方法
方法
- 一个方法只完成一个功能,这样有利于我们后期的扩展
- 方法的命名规则应遵守首字母小写的驼峰命名规则
方法的定义
方法包含一个方法头和方法体。下面是一个方法的所有部分
- 修饰符(public、static)
- 返回值类型(void、int)
- 方法名
- 参数类型(形参)
- 方法体
方法的调用
调用方法:对象名.方法名(实参列表)
当方法返回一个值的使用,方法调用通常被当做一个值
当方法返回值是空的时候,方法调用一定是一条语句
源代码
public class Demo01 {
public static void main(String[] args) {
//静态方法的调用可以为类.方法
Class.say();
//非静态方法的调用不可以直接类.方法 需要先实例化对象之后用对象.方法的方式调用
//Class.say1();错误
Class student = new Class();//实例化对象student, 利用和类同名的构造方法
student.say1();//利用对象.方法来调用方法
}
public static void a(){
b();
}
//静态方法可以直接调用静态方法
public static void b(){
d();//报错,静态方法无法直接调用非静态方法
}
//非静态方法可直接调用非静态方法
public void c (){
d();
}
public void d(){
b();//非静态方法可以直接调用静态方法
}
}
注:静态方法和类一起加载,而非静态方法是实例化之后才会存在。所以非静态方法无法直接调用静态方法
方法的重载(Overload)
方法重载的规则:
- 方法名称必须相同。
- 参数列表必须不同(可以是个数不同,类型不同,顺序不同)
实践理论:
- 方法名称相同时,编译器会根据调用方法的参数个数,参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
注:方法的重载的目的 就是通过传不同的参数达到调用不同的方法
命令行传参
有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()方法实现
可变参数
在方法声明中,在指定参数类型后加一个省略号(...)
一个方法中只能指定一个可变参数,他必须是方法的最后一个形参,其他的参数都要在它之前声明
注:可变参数有点类似与C语言中数组的首地址传递。
递归
递归分为递归头和递归体
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
- 递归体:什么时候需要调用自身方法。
源代码
5的阶乘,递归算法
public class Demo03 {
public static void main(String[] args) {
System.out.println(f(5)); //120
}
public static int f(int n){
if (n==1){
return 1;
}
return f(n-1)*n;
}
}
方法的数组参数传递
作为引用类型的数组也可以作为数组的形参或者返回值
注:JAVA中方法的数组(引用)传递类似于C语言中的地址传递,方法中对数组进行的操作对方法外也有影响
方法的引用类型的传递
同数组一样,引用类型的传递也是地址传递
public class Demo02 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);//null
change(person);
System.out.println(person.name);//Xiaobai
}
//引用类型的传递不是值传递。这里person.name的改变就是person对象中属性name的改变
public static void change(Person person){
person.name = "Xiaobai";
}
}
//定义一个person类,有一个属性:name
class Person{
String name;
}
注:类中属性和类中方法一样,如果想要用类名.属性名调用该属性,则该属性必须要用static修饰符修饰