一、什么是方法?
System.out.println()//System是一个类,out是一个对象,println()就是一个方法
方法是语句的集合
命名规则:首字母小写+驼峰命名规则
Ex. 加法
Demo01
//加法public int add(int a, int b) {return a + b;}
此时在main方法里直接调用不了,改为:
public class Demo01 {//main方法public static void main(String[] args) {int sum = add(1, 2);System.out.println(sum);}//加法public static int add(int a, int b) {return a + b;}
}
设计方法的原则:一个方法只完成一个功能(原子性)
二、方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){...方法体...return 返回值;//return还用来终止方法
}
方法名中的参数是形参,用来定义,等同于占位符
三、方法的调用
对象名.方法名(实参列表)
java都是值传递
四、方法的重载
Demo01
重载就是在一个类中,有相同的函数名称,但形参不同的函数
public class Demo01 {public static void main(String[] args) {int sum1 = add(1, 2);System.out.println(sum1);double sum2 = add(1.1, 2.2);System.out.println(sum2);}public static int add(int a, int b) {return a + b;}public static double add(double a, double b) {return a + b;}public static int add(int a, int b, int c) {}...
}
方法的重载的规则:
- 方法名称必须相同;
- 参数列表必须不同(个数不同、类型不同或参数排列顺序不同等);
- 方法的返回类型可以相同也可以不相同;
- 仅仅返回类型不同不足以成为方法的重载。
实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法;如果匹配失败,则编译器报错。
五、命令行传递参数
CommandLine
在cmd中
C:\Users\xieyueting\Desktop\javaSE\code\JavaSE\Method\src>javac -encoding UTF-8 CommandLine.javaC:\Users\xieyueting\Desktop\javaSE\code\JavaSE\Method\src>java CommandLineC:\Users\xieyueting\Desktop\javaSE\code\JavaSE\Method\src>java CommandLine this is
args[0]: this
args[1]: is
六、可变参数
也可以叫作不定项参数
在方法声明中,在指定参数类型后加一个省略号(...)
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
public class Demo03 {public static void main(String[] args) {Demo03 demo03 = new Demo03();demo03.test(1,2,3,4,5);}public void test(int x,int... i){System.out.println(i[0]);//输出2}
}
Ex. 排序
Demo03
public class Demo03 {public static void main(String[] args) {printMax(5.2,4,9,6.3,12.2,7.0);printMax(new double[]{1,2,3});}//排序public static void printMax(double... numbers){if(numbers.length == 0){System.out.println("No argument passed!");return;}double result = numbers[0];for(int i = 1; i < numbers.length; i++){if(result < numbers[i]){result = numbers[i];}}System.out.println(result);}}
七、递归
方法自己调用自己
递归结构包含两个部分:
-
递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
-
递归体:什么时候需要调用自身方法。
Demo04
public class Demo04 {public static void main(String[] args) {Demo04 test = new Demo04();test.test();}public void test(){test();}
}
/*会报错死循环:
Exception in thread "main" java.lang.StackOverflowError*/
Ex. 阶乘
Demo05
public class Demo05 {public static void main(String[] args) {int result1 = f(1);int result2 = f(2);int result3 = f(5);System.out.println(result1);System.out.println(result2);System.out.println(result3);}public static int f(int n) {if(n==1){return 1;}else {return n*f(n-1);}}
}
java都是使用栈机制
能不用递归就不用递归,占大量空间内存