面向对象基础篇 – 函数
函数定义
什么是函数
具有特定功能的一段代码,可以被多次使用
函数的格式
权限修饰符 函数类型修饰符 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2, ...){
执行语句;
return 返回值;
}
//例如:
public static void print(){
System.out.println("我是一个函数");
return ;//可以不写但默认存在
}
- 当函数没有返回值时,并不代表不执行return 语句
- 但函数值存在返回值时,必须返回一个规定类型的值
- 返回值类型可兼容
- double 类型 可以返回 byte,short,int.类似于自动类型转换
- 通过函数名即可调用函数
定义一个函数
class Demo{
public static void main(String[] args){
int a = 11 ;
int b = 6 ;
System.out.println("a和b中的较大数是:"+max(a,b));
}
//求两个int值中的最大值
public static int max(int a, int b){
if(a>=b) return a ;
return b;
}
}
/*
执行输出
11
*/
函数的运行原理
每当,函数被调用时,都会在栈内存中为他分配与一个空间,直到函数运行结束,函数弹栈,并将返回值返回给调用它的函数
函数的重载
- 在同一个类中,多个同名的函数我们称之为函数的重载,如下
class Demo {
public void show(){
}
public int show(int a){
return 0;
}
private int show (int a, int b){
return a+b ;
}
}
观察上面的示例,我们可以发现
- 函数的重载,与函数权限无关
- 与函数返回值类型无关
- 与参数名无关
- 与参数数量
- 只与参数类型的排列组合有古纳西
函数重载的好处在于: 可以扩展函数的功能
函数的重写
- 子类继承父类的方法,父类方法无法满足子类行为时,子类可以重写继承而来的方法
class Father{
//求两个int值中的最大值
private int show (int a, int b){
return a+b ;
}
}
class Son extends Father {
@Overread
private int show (int a, int b){
return a-b ;
}
}
观察上例我们可以知道
- 函数重写,除了函数体可以不同,函数名,参数列表,返回值类型都必须相同
重写与重载的区别
- 重写,用在子父类继承中
- 重载,用在同一个类中
函数的递归
顾名思义,函数的递归有一个递的过程还有一个归的过程
递归的体现就是,函数本身不断地调用自己
-
一般而言,可以被循环解决的问题,都可以使用递归解决;但是递归能解决的问题循环就不一定可以解决
-
递归的缺点在于,如果计算量很大,相较于循环,耗时耗空间
递归的思路
- 先递后归
- 前进段 : 将问题从大化小
- 结束段 : 问题无法化小,则继续处理当前问题
- 返回段 : 将小问题处理完后,返回上一级
//递归实现1-100累加
class Demo{
public static void main(String[] args) {
System.out.println(add(100));
}
public static int add(int n) {
if (n == 1) {
return 1;
}//归
return add(n - 1) + n;//递
}
}