一、方法的使用


【本节目标】

  1. 掌握方法的定义和使用
  2. 掌握方法传参
  3. 掌握方法重载
  4. 掌握方法递归

一、方法的概念

在程序编写时,我们难免会频繁地写同一段代码,如果每次都将这段代码重新实现一边,将大大增加代码的繁琐程度。在这种情况下,我们可以将这段代码封装成方法,每次要使用时就调用这个方法。

1.1 什么是方法?

方法就是一个代码片段,类似于 C语言中的函数。方法的存在也是模块化编程思想的体现:

  1. 能够模块化地组织代码
  2. 做到让代码被重复使用
  3. 让代码更好理解
  4. 直接调用现有方法,不必重复造轮子

1.2 方法的定义

public static int func(int n){
	int x = 10;
	return x;
}
/*
修饰符 返回值类型 方法名(形参...){
	方法体代码;
	return ;
}
*/

eg1: 实现一个方法,判断是否为闰年。

public static boolean isLeapYear(int year){
	if((year%4==0&&year%100!=0) || year&400==0){
		return true;
	}
	return false;
}

注意:

  1. 注意修饰符的搭配。
  2. 在java中,方法必须写在类当中。
  3. 方法不能嵌套定义。
  4. java 中不存在方法声明。

1.3 方法调用的执行过程

在 Java 的方法调用时,有一套基本的流程,由计算机来完成:
调用方法 -->传递参数 -->找到方法地址 -->执行被调用的方法 -->被调方法结束返回 -->回到主调方法继续向下执行
我们可以发现这套流程和C语言中的函数调用是基本一致的。

还有两点注意事项

  • 调用方法时,不会执行方法的代码,调用时才会执行。
  • 一个方法可以多次调用。

1.4 实参和形参的关系

Java 的形参和实参的关系与C语言中的也基本一致。
形参的名字可以随意取,对方法没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。

public static int add(int a, int b){
	return a+b;
}
int ans = add(2,3); // 2和3 是实参,调用时传给形参 a 和 b。

Java中实参的值永远是拷贝到形参中,形参和实参本质是内存中不同的地址。

我们学过 C语言的知道:可以在调用时将实参地址传给形参,这样可以直接通过地址找到内存中保存的数据,进而直接影响到实参。
但是在Java中,我们无法获取到栈区的地址。不存在取地址的操作。

1.5 没有返回值的方法

class Test{
	public static void main(String[] args){
		int a = 10;
		int b = 20;
		print(a,b);
	}
	// 这里 print 方法的返回类型是 void
	// 这样的方法不用返回
	public static void print(int a,int b){
		System.out.println("x=" + x +" y=" y);
	}
}

二、方法的重载

方法重载是一个全新的概念。

2.1 为什么需要方法重载?

public class test3 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int ret = add(a,b);
        System.out.println("ret = " + ret);
        
        double a2 = 10.5;
        double b2 = 20.5;
        double ret2 = add(a2,b2);
        System.out.println("ret2 = " + ret2);
        
    }
    public static int add(int x,int y){
        return x + y;
    }
}

// 对于上面的代码,直接执行时会报错:从double转换到int可能会有损失。
// double ret2 = add(a2,b2);

上面 ret2 参数类型和方法不匹配,不能使用add方法,我们可以用方法重载来解决

2.2 方法重载的概念

在自然语言中,一个词语如果有多重含义,那么就说这个方法重载了,在 JAVA 中方法也是可以重载的。
如果几个方法的名字相同,但是参数列表的个数或类型不同,就说这个方法重载了

public class test3 {
    public static void main(String[] args) {
        add(1, 2);              // 调用add(int a,int b)
        add(1.5, 2.5);          // 调用add(double a,double b)
        add(1.4, 2.4, 3.6);  	// 调用add(double a,double b,double c)
        // 以上为重载的方法的三个不用形式
    }
    
    public static int add(int a,int b){
        return a+b;
    }
    
    public static double add(double a,double b){
        return a+b;
    }
    
    public static double add(double a,double b,double c){
        return a+b+c;
    }
    
}

注意:

  1. 方法名必须相同
  2. 参数列表必须不同(参数的个数不同,参数的类型不同)
  3. 与返回值的类型无关
  4. 重载只能出现在一个类或者由同一个类继承的类中
  5. 编译器在编译代码时,会对实参类型进行推演,根据结果确定调用哪个方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值