方法是一种语法结构,可以把代码封装成一个功能,以便于方法重复调用。
方法的好处
- 提高了代码的复用率
- 让程序逻辑更加清晰
方法格式的注意点这里需要强调,因为定义的返回值类型是int所以有返回值,且返回值必须是int类型,如果返回值类型是double,那么返回值就必须是double类型,如果返回值类型是void那么就没有返回值。
package 方法; import java.util.Scanner; public class way { public static void main(String[] args) { isEvenNumber(); } // 定义一个方法判断一个数是否是偶数。 public static void isEvenNumber(){ Scanner sc = new Scanner(System.in); System.out.println("please input number"); int num = sc.nextInt(); if(num % 2 == 0){ System.out.println(true); }else { System.out.println(false); } } }
案例:设计一个方法用于打印三个数中较大的数
package 方法; import java.util.Scanner; public class way { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("please input"); int a = sc.nextInt(); System.out.println("please input"); int b = sc.nextInt(); System.out.println("please input"); int c = sc.nextInt(); getmax(a,b,c); } // 定义一个方法用于打印较大的数 public static void getmax(int a,int b,int c){ int middle = a > b ? a:b; int max = middle >c ? middle:c; System.out.println(max); } }形参与实参
带返回值方法的定义和调用形参:方法定义中的参数 等同于变量定义格式,例如:int number
实参:方法调用中的参数等同于使用变量或常量,例如: 10 number
package 方法; import java.util.Scanner; public class way { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("please input"); int a = sc.nextInt(); System.out.println("please input"); int b = sc.nextInt(); System.out.println("please input"); int c = sc.nextInt(); int max = getmax(a,b,c); System.out.println("最大值为" + max); } // 定义一个方法用于打印较大的数 public static int getmax(int a,int b,int c){ int middle = a > b ? a:b; int max = middle >c ? middle:c; // System.out.println(max); return max; } }
package 方法; public class way2 { public static void main(String[] args) { int a = 10; int b = 20; boolean res = iseven(a,b); System.out.println(res); } public static boolean iseven(int a,int b){ if (a == b){ return true; }else { return false; } } }方法使用的常见问题 方法不能嵌套定义 void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据
package 方法; import java.util.Scanner; public class way2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("please input n:"); int n = sc.nextInt(); int all = sum(n); System.out.println("sum is "+all); } public static int sum(int n){ int sum = 0; for(int i = 0;i < (n+1);i++){ sum += i; } return sum; } }
package 方法; import java.util.Scanner; public class way2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("please input n:"); int n = sc.nextInt(); // int all = sum(n); // System.out.println("sum is "+all); boolean bool = jiou(n); if(bool == true){ System.out.println(n + "是偶数"); }else { System.out.println(n + "是奇数"); } } public static int sum(int n){ int sum = 0; for(int i = 0;i < (n+1);i++){ sum += i; } return sum; } public static boolean jiou(int a){ if(a % 2 == 0){ return true; }else { return false; } } }方法的调用流程
以上图为例,再方法执行时候,先执行Test,随后执行sum方法,最后执行方法add。再执行方法add时候,传入实参10与20,调用方法将其传入并执行,最终执行输出语句。
以上图为例,方法之间是平级的,可以相互调用,再方法区,先执行mian语句,调用方法study语句;其中study方法中,先执行eat语句,再执行输出语句,最后执行sleep语句;执行完毕。
方法的运行区域在哪里?:栈内存。
Java的参数传递机制–值传递重点:java传递的不是变量本身,是变量中存储的数值,如果是数组的话就是传递数组的地址
package 方法; public class way3 { public static void main(String[] args) { int a = 10; change(a); System.out.println(a); // 10 } public static void change(int a){ System.out.println(a); // 10 a = 20; System.out.println(a); // 20 } }
引用类型的参数传递这里最初我们定义的整型形参10,传入change中,传入的不是变量的本身,而是一个拷贝值,所以change中的第一个输出是10,经过赋值后输出20,change执行完毕,注意这时候a的实际数值并没有变换,还是10,因为刚才改变的只是形参的一个拷贝值。
package 方法; public class way3 { public static void main(String[] args) { int a = 10; // change(a); // System.out.println(a); // 10 int [] arr = {1,2,3,4}; System.out.println(arr[1]); // 2 change(arr); // 200 System.out.println(arr[1]); } public static void change(int a){ System.out.println(a); // 10 a = 20; System.out.println(a); // 20 } // 方法复用;后面介绍。 public static void change(int[] arr){ arr[1] = 200; } }
再讲解这道题目之前,还是先介绍一下区别:
System.out.println()这种语法默认是对输入的数据进行换行;而System.out.print()不会对数据进行换行。
package 方法; public class way4 { public static void main(String[] args) { int[] arr = {15,50,58,90,45}; ArrayDemo(arr); } public static void ArrayDemo(int[] arr){ if (arr != null && arr.length>0){ System.out.print("["); for(int i = 0;i
package 方法; import org.w3c.dom.ls.LSOutput; public class way4 { public static void main(String[] args) { int[] arr = {15,50,58,90,45}; int[] arr1 = null; // ArrayDemo(arr1); // getindex(arr1,85); // the arr has some problem int index = getindex(arr,100); System.out.println("您输入的元素的索引是" + index); } public static int getindex(int[] arr,int index){ if(arr != null && arr.length > 0){ for (int i =0;i < arr.length;i++){ if(arr[i] == index){ return i; } } System.out.println("查无此数,默认返回-1"); }else { System.out.println("the arr has some problem"); } return -1; }
package 方法; import org.w3c.dom.ls.LSOutput; public class way4 { public static void main(String[] args) { int[] arr1 = {15,50,58,90,45}; int[] arr2 = {15,50,58,90,45}; int[] arr3 = null; int[] arr4 = {}; boolean x = compare(arr1,arr4); System.out.println(x); } public static boolean compare(int[] arr1,int[] arr2){ if ( (arr1 != null) && (arr2 != null) &&(arr1.length >0) && (arr2.length > 0)&&(arr1.length == arr2.length)){ for(int i = 0;i < arr1.length;i++){ if(arr1[i] == arr2[i]){ return true; }else { return false; } } } return false; } public static int getindex(int[] arr,int index){ if(arr != null && arr.length > 0){ for (int i =0;i < arr.length;i++){ if(arr[i] == index){ return i; } } System.out.println("查无此数,默认返回-1"); }else { System.out.println("the arr has some problem"); } return -1; } public static void ArrayDemo(int[] arr){ if (arr != null && arr.length>0){ System.out.print("["); for(int i = 0;i 方法重载可读性好,方法名称相同提示是同一类型的功能,通过形参不同实现功能差异化的选择,这是一种专业的代码设计。
package 方法; public class way5 { public static void main(String[] args) { fire(); fire("xxxx"); fire("xxxx",5); } public static void fire(){ System.out.println("##################"); } public static void fire(String location){ System.out.println("默认向"+location+"发射一枚##"); } public static void fire(String location,int num){ System.out.println("默认向"+location+"发射"+num +"枚##"); } }方法重载的识别技巧
方法重载举例:package 方法; public class way6 { public static void main(String[] args) { } // 新方法 public static void open(){} // 方法重载 public static void open(int a){} // 方法重载 public static void open(int a ,int b){} // 方法重载 public static void open(int a,double b){} // 新方法 public static void OPEN(){} }return关键字package 方法; public class way6 { public static void main(String[] args) { chu(10,0); } public static void chu(int a,int b){ if (b == 0){ System.out.println("输入有误,分母不能为0"); return; }else { int c = a / b; System.out.println("a / b = "+ c); } } }参考
黑马程序员 https://www.bilibili.com/video/BV1Cv411372m?p=59&t=1.4
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)