设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块集合。我们设计方法的时候,最好保持方法的原子性,就是只完成一个功能,这样利于我们后期的扩展。
方法包含一个方法头和一个方法体。
下面是一个方法的所有部分:
修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; }
调用方法:对象名.方法名(实参列表)
Java支持两种调用方法的方式,根据方法是否返回值来选择。
当返回一个值的时候,方法调用通常被当作一个值。
方法调用案例:
public class Demo01 { //main方法 public static void main(String[] args) { //实际参数:实际调用传递给他的参数 int add = add(1, 5); System.out.println(add); } //加法 //形式参数,用来定义作用的 //public是公共的,所有人都可以使用它 public static int add(int a, int b) { //如果要直接使用这个方法,static让这个方法成为类方法,不然无法直接在主方法调用, // 定义一个方法名字加类型如果是void就没有返回值,如果有就有返回值 return a + b; //如果方法存在返回值的话,一定要用return返回如果是void就不用返回了 } }
重载就是在一个类中,有相同的函数名称,但形参不同的函数。
方法的重载的规则:
重载案例:
public class Demo { public static void main(String[] args) { int max = max(50, 20); System.out.println(max); } //方法可以无限制重名,但是确保数据类型不同 public static int max(int num1,int num2){ int result=0; if (num1>num2){ result=num1; System.out.println("num1>num2"); }else if (num1==num2){ System.out.println("num1==num2"); return 0; //也可以用来终止方法 }else { result=num2; System.out.println("num1<num2"); } return result; } public static double max(double num1,double num2){ int result=0; if (num1>num2){ result=num1; System.out.println("num1>num2"); }else if (num1==num2){ System.out.println("num1==num2"); return 0; //也可以用来终止方法 }else { result=num2; System.out.println("num1<num2"); } return result; } public static int max(int num1,int num2,int num3){ int result=0; if (num1>num2){ result=num1; System.out.println("num1>num2"); }else if (num1==num2){ System.out.println("num1==num2"); return 0; //也可以用来终止方法 }else { result=num2; System.out.println("num1<num2"); } return result; } }
有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。
public class Demo { public static void main(String[] args) { for(int i=0;i<args.length;i++){ System.out.println("args["+i+"]:"+args[i]); } } }
可变参数案例:
public class Demo { public static void main(String[] args) { //调用可变参数 printMax(1,2,23,2,5,4); printMax(new double[]{1,2,3,4,5,6,}); Demo04 demo04 = new Demo04(); demo04.test(1,2,3,4,5,6); demo04.test(2,11,22,33,44,55); } public static void printMax(double... numbers){ if (numbers.length==0){ System.out.println("你没有输出任何数"); return; } double result=numbers[0]; //排序 for (int i = 1; i < numbers.length; i++) { if (numbers[i]>result){ result=numbers[i]; } } System.out.println("最大的值是:"+result); } public void test(double a,int ... i){//可变参数,只能放在最后面 System.out.println(i[0]); System.out.println(i[1]); System.out.println(i[2]); System.out.println(i[3]); System.out.println(i[4]); System.out.println(i[5]); } }
递归注意事项:
案例1:递归求和
private static int sum(int num) { if (num==0){ return 0; } return num+sum(num-1); }
案例2:递归求阶乘
private static int factoria(int num) { if(num==1) return 1; return num * factoria(num-1); }
案例3:递归遍历文件夹中全部文件及子文件夹中的全部文件
private static void getAllFiles(File file) { if(file.isDirectory()){ File[] files = file.listFiles(); for (File file1 : files) { if(file1.isDirectory()){ getAllFiles(file1); continue; } System.out.println(file1); } } }