方法就是一段代码片段,这个片段可以完成特定的功能,并且可以重复利用。
[方法修饰列表] 返回值类型 方法名(方法参数列表){ 方法体 }
方法修饰列表
是可选项,方法的修饰符可以包括:public,protected,private,abstract,static, final,synchronized,其中public,protected,private 不能同时存在。
返回值类型
如果没有返回值使用void 关键字,如果存在返回值可以是基本类型和引用类型;如果存在返回值,必须使用 return语句,return语句后面不能再执行语句,因为不可能会执行到,编译会发生错误。
方法名
任意合法的标识符。
方法参数列表
参数列表可以有多个,也可以没有参数。
格式:
数据类型 ... 变量名 (String ...strs)
可变个数形参的方法与同名的方法之间,彼此构成重载
可变参数方法的使用与方法参数部分使用数组是一致的
public void show(String ... strs){ for(int i=0;i<strs.length;i++){ System.out.println(strs[i]); } }
方法的参数部分有可变形参,需要放在形参声明的最后(便于分辨传入的参数属于哪个类型的形参)
public void show(int ... ints, double m)//无法分辨哪个是属于double类型的,最重要的是编译无法通过 public void show(1,2,3); public void show(double m , int ... ints) 若方法体是System.out.println(m); public void show(1,2,3);//1.0 public void show(1,5,7);//1.0
在一个方法的形参位置,最多只能声明一个可变个数形参
方法的使用中,可以调用当前类的属性、方法。
概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可
与权限修饰符、返回值类型、形参变量名、方法体均无关
两同一不同:同一个类,同一个名字,不同参数(个数或类型)
public void show(int i);//判断与下面是方法是否构成重载(同一个类中) private int show(int i);// NO private int show(int p);// NO private int show(int p ,char a);// YES
方法,必须由其所在类或对象调用才有意义。那么Java的实参值如何传入方法中呢?
Java里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
形参是基本数据类型,将实参基本数据类型变量的“数据值”传递给形参
形参是引用数据类型,将实参引用数据类型变量的“地址值”传递给形参
最后的输出为:15 0 20
方法1使用的System.exit(int status)这个方法是用来结束当前正在运行中的java虚拟机。
方法2是重写了方法
一个方法体内调用它自身
适合理解递归的问题:
斐波那契数列
台阶问题
汉诺塔问题
快排