java方法是语句的集合,它们在一起执行一个功能。
最好一个方法实现一个功能(原子性)
package method; public class Demo01 { // main方法 public static void main(String[] args) { // int sum = add(1, 2); // System.out.println(sum); test(); } // 加法 public static int add(int a,int b){ return a+b; } public static void test(){ // 计算0-100之间奇数和偶数的和 int a = 0; int b = 0; for (int i = 0; i <= 100; i++) { if(i % 2 == 0){ a += i; }else { b += i; } } System.out.println("奇数和为:"+ b); System.out.println("偶数和为:"+ a); } }
包括方法头方法体
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
package struct; import java.util.Scanner; public class Demo2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); int b = scanner.nextInt(); System.out.println(max(a, b)); scanner.close(); } // 比大小 public static int max(int num1,int num2){ if(num1 == num2){ System.out.println("一样大"); return 0; // 终止方法 } if(num1>num2){ return num1; }else { return num2; } } }
重载:在一个类中,有相同的函数名称,但形参不同的函数
简单说,名字相同,参数不同(个数,类型,顺序等等)
返回类型随意,返回类型不足以成为区分重载的因素。
package method; public class Demo01 { // main方法 public static void main(String[] args) { int sum = add(1, 2); int add = add(2, 3, 4);// 调用重载add方法 System.out.println(sum); System.out.println(add); // test(); } // 加法 public static int add(int a,int b){ return a+b; } // 重载add方法 public static int add(int a,int b,int c){ return a+b+c; } public static void test(){ // 计算0-100之间奇数和偶数的和 int a = 0; int b = 0; for (int i = 0; i <= 100; i++) { if(i % 2 == 0){ a += i; }else { b += i; } } System.out.println("奇数和为:"+ b); System.out.println("偶数和为:"+ a); } }
有时候需要运行一个函数的时候再传递给它消息。这要靠main()函数实现
package method; public class Demo02 { public static void main(String[] args) { // args.length 数组长度 for (int i = 0; i < args.length; i++) { System.out.println("args[" + i + "]:" + args[i]); } } }
jdk1.5开始,java支持传递同类型的可变参数给一个方法
在方法声明在,在指定参数类型后加一个省略号
一个方法只能指定一个可变参数,它必须是方法的最后一个参数。
package method; public class Demo03 { public static void main(String[] args) { // Demo03 demo03 = new Demo03(); // demo03.test(1); printMax(34, 3, 3, 2, 56.5); printMax(new double[]{1, 2, 3}); } // public void test(int... i){ // System.out.println(i[0]); // } public static void printMax(double... numbers){ if(numbers.length == 0){ System.out.println("no argument passed"); return; } double result = numbers[0]; // 排序 for (int i = 0; i < numbers.length; i++) { if(numbers[i] > result){ result = numbers[i]; } } System.out.println("the max value is " + result); } }
递归即自己调用自己
利用递归把复杂问题简化,大大减少了程序的代码量。
递归结构包括:
递归头:什么时候不调用自身方法。
递归体:什么时候需要调用自身方法
package method; public class Demo05 { // 5! 5*4*3*2*1 public static void main(String[] args) { System.out.println(f(5)); } public static int f(int n){ if(n==1){ return 1; }else { return n*f(n-1); } } }
递归算法对人类友好,符合人类逻辑,但是对计算机来说不友好,时间复杂度大,尤其是Java这种栈机制的编程语言,为了防止栈内存溢出,最后少使用复杂的,深层的递归算法。