Java入门之方法
1、方法包含于类或对象中,在程序中被创建,在其他地方被引用。是完成特定功能的代码片段。方法名按驼峰命名规则,建议一个方法实现一个功能,保持方法的原子性,便于扩展。
2、方法=方法头+方法体
修饰符[可选] 返回值类型 方法名(参数类型 参数名) {
....
方法体
....
[return 返回值]
}
(1)修饰符:
public
protected
default/缺省
private
(2)返回值类型
无返回关键字:void
有返回:String,int等,方法体需要用return返回值。
(3)形参:接收外界输入的数据
(4)实参:调用方法时实际传给方法的数据
1 public static void main(String[] args) { 2 int max = max(5, 9); //实参 3 System.out.println(max); 4 } 5 6 public static int max(int a, int b){ //形参 7 if(a > b){ 8 return a; 9 }else{ 10 return b; 11 } 12 }
3、重载
同一个类中,方法名一样,参数列表不一样(类型,顺序,个数)。
实现理论:方法名称相同时,编译器会根据调用方法的参数个数,参数类型等逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
4、命令行传参
在程序运行时传递消息,需要靠传递命令行参数给main()函数实现。
1 public static void main(String[] args) { 2 for (int i = 0; i < args.length; i++) { 3 System.out.println("args[" + i + "]" +args[i]); 4 } 5 }
使用IDEA的终端Terminal,也可以使用dos窗口
编译时需要切换到文件目录底下,执行时要带完整的pakage
5、递归
递归就是A方法调用A方法,自己调用自己。尽量避免使用,容易出现栈溢出。知道递归思想即可。
递归结构包括:
(1)递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
(2)递归体:什么时候需要调用自身方法。
1 //实现阶乘 2 public static void main(String[] args) { 3 System.out.println(fnc(5)); 4 } 5 6 public static int fnc(int n){ 7 if(n == 1){ 8 return 1; 9 }else{ 10 return n * fnc(n - 1); 11 } 12 }
6、方法的调用
- 静态方法
类名.方法
- 非静态方法
(1)实例化这个类 通过new关键字
(2)对象类型 对象名 = 对象值
(3)对象名.方法
当a为静态方法,b为非静态方法时,a不能直接调用b方法,需要通过实例化类来调用b方法。
静态方法是和类一起加载的,非静态方法是当类实例化才存在的。
7、值传递和引用传递
值传递:
在调用函数时,将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,就不会影响到实际参数。
1 public static void main(String[] args) { 2 int a = 1; 3 System.out.println(a); //输出1 4 change(a); 5 System.out.println(a);//输出1 6 } 7 8 public static void change(int a){ 9 a = 5; 10 }
引用传递:
在调用函数时,将实际参数的地址传递到函数中,那么在函数中对参数进行修改,将会影响到实际参数。
1 public class Demo01 { 2 public static void main(String[] args) { 3 Person person = new Person(); 4 System.out.println(person.name); //输出 null 5 change(person); 6 System.out.println(person.name);//输出 Mary 7 } 8 9 public static void change(Person p){ 10 p.name = "Mary"; 11 } 12 } 13 14 class Person{ 15 String name; 16 }