方法/函数
将一段逻辑或者功能提取出来,这种提取的形式就是函数
格式
修饰符 返回值类型 函数名(参数列表){
方法体;
return 返回值;
}
//明确返回值类型---求两个整数的和,确定结果一定是整数---返回值类型是int
//明确函数执行过程中是否有未知量参与---求两个整数的和,这两个整数在函数执行过程中不能自动产生,是两个未知量,未知量需要以参数的形式体现
//定义参数相当于在声明了几个变量
//在函数中声明的参数---形参---形式参数
//函数名+参数列表---方法签名---add(int i, int j)
public static int add(int i, int j){
int sum = i + j;
return sum;
}
//调用函数的时候传入的实际值---实参---实际参数
add(3,5);
注意:
1.如果函数没有返回值,那么返回值类型定义为void
2. return后续的代码不再执行
3. 任何一个实体函数都有return语句
构造方法
在类中与类同名而没有返回值类型的方法---主要是用于创建对象
构造方法可以重载
如果一个类没有手动提供构造函数,那么JVM在编译的时候会添加一个无参的构造方法。
构造方法没有返回值类型,也没有返回值,能写return语句吗?---可以---规避风险
重载
一个类中存在了函数名一致,而参数列表不一致的函数的时候,称这多个函数之间构成了重载。
函数在调用的时候会最先匹配格式最一致
当进行函数重载的时候,尽量重载所有的情况,以防出现多个函数都匹配的情况
练习:
1.任何一个大于等于6的偶数都可以分解成两个质数的和
14 = 3 + 11
14 = 7 + 7
2. 亲密数:如果A的所有因数(含1,不含本身)之和等于B,且B的所有因数之和(含1不含本身)等于A,A和B是一对亲密数。输出3000以内所有的亲密数
重写
在父子类中存在了方法签名完全一致的方法---产生了方法的重写
注意:方法的重写遵循 两等两小一大 这五个要求
1. 方法签名要求完全一致
2. 如果父类中方法的返回值类型是基本类型/void/最终类,子类中重写的方法的返回值类型必须一致
3. 如果父类方法的返回值类型是引用数据类型,那么子类重写的方法的返回值类型是父类方法返回值类型的子类或者是本身
class A {}
class B extends A{}
class C{
public A m(){
return null;
}
}
class D extends C {
public B m(){
return null;
}
}
4.子类抛出异常小于等于父类方法抛出异常
5. 子类方法的权限修饰符的范围要大于等于父类方法的权限修饰符的范围
class A{
protected void m(){}
}
class B extends A{
public void m(){}
}
权限修饰符
用于限定变量或者方法的使用范围的
| 本类中 | 子类中 | 同包类中 | 其他类中 |
public | 可以 | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
默认 | 可以 | 同包子类可以 | 可以 | 不可以 |
private | 可以 | 不可以 | 不可以 | 不可以 |
函数的递归
指在函数中调用自己本身
StackOverflowError---栈溢出错误---反应函数在栈中执行---函数在执行完成之前不会释放栈内存---递归的次数太多,就会出现这个错误
注意:基本数据类型传参传的是实际值,对于引用类型而言传参传的是地址
练习:求任意一个数的阶乘