Java方法
一、方法定义与调用
1、定义方法语法:
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
注意:
- [] 符号叫做中括号,以上中括号[ ]里面的内容表示不是必须的,是
可选
的 - 方法体由Java语句构成
- 方法定义之后需要去调用,不调用是不会执行的
- Java都是值传递
2、方法调用语法:
类名.方法名(实际参数列表);
二、方法的重载和重写
1、重载(Overload)
在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。
重写 总结:
- 重载Overload是一个类中多态性的一种表现
- 重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
- 重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准
2、重写(Override)
从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。
重写 总结:
- 发生在父类与子类之间
- 方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
- 访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
- 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
3、区别
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
三、可变参数
1、可变参数语法:
修饰符 返回值类型 方法名(数据类型... 变量名){ }
2、注意:
- 这里的
可变参数变量
其实是一个数组 - 如果一个方法
有多个参数
,包含可变参数
,可变参数要放在最后
四、递归
1、定义
所谓递归就是自己调用自己。
2、分类
- 直接递归:方法自身调用自己
- 间接递归:A方法调用B方法,B方法调用C方法,C方法再调用A方法
3、注意
- 递归一定要有条件限定,保证递归能够停止下来,否则会形成死循环并发生栈内存溢出(StackOverflowError)
- 递归中虽然限定了停止下来的条件,但是递归次数不能太多,否则也会发生栈内存溢出
- 禁止构造方法递归