第三章_Java中方法(封装)的基本概念和使用

第三章_Java中方法(封装)的基本概念和使用

1.方法的概念

​ 方法是一个独立的可执行的单元。方法在一些语言中被称为函数,是对于一些重复使用的具有复杂逻辑的代码的封装,给被封装的代码起一个名字,并且可以随时通过这个名字调用被封装的代码。

为什么要定义方法?

​ 假如有三个学生的成绩,需要计算他们每个人的总分。那么三个人的成绩我们就需要做重复的工作做三次,而方法的定义就是为了简化我们计算的过程,我们可以通过调用方法直接获取他们的总分,从而简化了一系列重复而又繁琐的工作。

eg:

姓名语文数学总分
张三8090170
李四8080160
王五9090180
public class Test {
    public static void main(String[] args) {
        //把张三的成绩当做参数传入获取总分的方法
        int zhangSan_Score = getSum(80, 90);
        System.out.println("张三的成绩是:"+zhangSan_Score);

        //把李四的成绩当做参数传入获取总分的方法
        int liSi_Score = getSum(80, 80);
        System.out.println("李四的成绩是:"+liSi_Score);

        //把王五的成绩当做参数传入获取总分的方法
        int wangWu_Score = getSum(90, 90);
        System.out.println("王五的成绩是:"+wangWu_Score);

    }
    //定义一个获取总分的方法
    public static int getSum(int chinese, int math) {
        int sum = chinese+ math;
        return sum;
    }
}

执行效果:
在这里插入图片描述

总结

我们定义了一个获取总分的方法,省略了计算的过程,大大的节约了计算的时间。

2.定义方法的格式
2.1方法的定义格式
修饰符	返回值类型	方法名称(形参列表){

	方法体代码;	//就是一些可以执行某种功能的代码
	return 返回值;//没有返回值的方法,这一步可以不写	
				//如果有返回值,返回值要与返回值类型相对应
}
2.2方法定义格式的解释
2.11.修饰符:

​ 对于初学者来说,初学阶段只使用public static 就足够了

​ 修饰符共分为4种,以下是对它们范围的排序

​ public > protected > default > private

2.1.2.返回值类型:

​ a.基本数据类型

​ b.引用数据类型

​ c.无返回值类型 :void

注:(void)关键字是方法的独有类型,只能在定义方法的时候使用,其他地方不能使用。

2.1.3.方法名称:

​ 建议使用"小驼峰"命名,首个单词小写,建议使用动词

​ 需要是合法字符,不能使用关键字命名

2.1.4.形参列表:

​ 解释指接受的数据类型,形参列表中的格式,需要写 数据类型 + 变量名称

​ 如果接受多个参数,使用逗号分隔

2.1.5.方法体代码:

​ 方法内部执行的若干行代码,完成了某种功能的需求。

2.1.6.return:

​ 结束方法的执行,并且将返回值返还给调用处。

2.1.7.返回值:

​ 方法最终产生的结果数据。

总结

返回值必须和返回值类型对应。

参数如果有多个,需要使用逗号分隔。

参数如果没有,小括号则可以留空。

多个方法的定义先后顺序无所谓。

不能在一个方法内部定义方法。

方法定义之后,没有调用就不会执行;要想执行,一定要调用它。

2.3定义方法的标准

​ 定义一个方法封装功能只要能明确以下两个标准,就能使我们根据业务需求定义一个逻辑清晰明了的方法。

2.3.1方法是否需要申明返回值类型

​ 情景一(无返回值):假如我们仅仅需要拿到两个数的和,并且直接输出,那么就不需要返回值。返回值类型申明无:void

​ 情景二(有返回值):假如我们拿到两个数的和之后,还需要使用和来进行其他的运算或者比较,这时候就需要申明方法的返回值,明确返回值的类型。

2.3.2方法是否需要申明形参列表?如果需要,则需要传递几个参数?

​ 情景一(无形参列表):假如有两个已经确定的数需要求和,学生A,学生B,学生C都需要对这两个数进行计算,这时方法内部可以直接把和求出来让不同的学生来调用这个方法,这时就不需要再传递参数了。

​ 情景二(有形参列表):假如我们需要计算随机两个数的和,那么这时候形参列表就需要传递两个参数,并且在传递的时候申明这两个参数的类型。

3.方法的调用方式
3.1有返回值方法的调用
a.输出调用
b.赋值调用
c.直接调用

代码演示:

public class Test {
    public  static void main(String[] args) {
        //a.输出调用
        System.out.println("输出调用method:"+method(10,20));//30

        //b.赋值调用
        int sum = method(2, 3);
        System.out.println("赋值调用method"+sum);//5

        //c.直接调用
        /*
            此处我们直接调用,没有输出语句所有控制空不会有数据产生
            但是证明可以直接调用这个方法
         */
        method(5,5);//10
    }

    //定义一个有返回值的方法
    public static int method(int a, int b) {
        int sum = a + b;
        return sum;
    }
}

执行效果:

在这里插入图片描述

3.2无返回值方法的调用

注:如果一个方法没有返回值,那么它只能直接调用。

代码演示:

public class Test {
    public  static void main(String[] args) {
//        //输出调用
//        System.out.println(method());
//        //赋值调用
//        int sum = method();
//        System.out.println(sum);

        //直接调用
        method();
    }
    //定义一个有返回值的方法
    public static void method() {
        int a = 10;
        int b = 20;
        int sum = a + b;
        System.out.println("和是:"+sum);
    }
}

在这里插入图片描述

把报错的代码注释后的运行效果:

在这里插入图片描述

4.形参和实参的说明

​ 由于方法中的参数提到了形参变量,在此处把形参变量和实参变量进行说明讲解。防止大家对参数变量概念的混淆。

4.1形参变量

​ 用在方法的入口,方法入口定义的变量为形参变量。

​ 简单来说就是方法名后的()中传递的变量。

4.2实参变量

​ 在方法中定义的变量就是实参变量

​ 简单来说就是定义方法时{}中,方法体代码中定义的变量,仅在当前方法内部有效。

代码解释:

public class Test {
    public static void main(String[] args) {
        String a = "实参变量";//a是实参变量
    }
    public static void method(String b){//b是形参变量
    }
}
总结:
  1. 实参的作用范围,从定义开始到遇见的第一个 } 截止。
    形参的作用范围从方法开始到该方法结束位置。

​ 2.实参值通常可以传给方法的形参值。

​ 3.实参变量通常需要给初始值,但是形参变量不能给初始值。

5.方法重载
5.1方法重载的概念

​ 同一个类中,出现名称相同的多个方法,但是多个方法的形参列表不同,我们称为方法的重载。约定做同一件事,但是形参不同会执行不同的情况。

什么时候使用方法重载?

​ 对于参数列表不一样的多个方法,如果设置不一样的方法名称会很麻烦,所以引入了方法重载(Overload)的技术。

5.2方法重载的前提条件

​ 方法重载可以总结为2同1不同。

​ 2同:同一个类中,方法名称必须相同

​ 1不同 :形参列表必须不同

形参列表怎样才算不同?

类型不同,顺序不同,个数不同

方法重载代码演示:

public class Test {
    public static void main(String[] args) {

    }
    //第一次定义method
    public static void method(int a){
    }
    //改变方法的形参列表,重载method
    public static void method(long b){
    }
    //改变方法的形参列表,重载method
    public static void method(double c,String s){
    }
     //改变形参列表的顺序,重载方法
    public static void method(String s,double c){
    }
}
与方法重载无关的因素

1.与修饰词和返回值无关(只和方法名和形参列表有关)

2.与参数的名称无关,(如果参数类型和顺序一样,只修改参数名不属于方法重载)

如下图示例,这种特别被误认为是方法重载

在这里插入图片描述

6.方法的参数传递
6.1值传递

​ 对于基本数据类型的变量,传递给方法的形参的时候,实际上传输的是变量的副本值;
不是变量本身,我们称为java的这一参数传递机制为:值传递

​ 对于引用数据类型,引用数据类型的值传递 不改变地址,但是可以修改堆内存中的值。

代码演示:

public class Test {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        method(arr);
    }
    //定义method方法
    public static void method(int[] arr){
        arr[0] = 10;
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

执行效果:

在这里插入图片描述

解释:

​ 我们把int类型的arr数组当做参数,传入method 方法中当做方法的形参变量。

​ 其本质传输的是引用数据类型的地址值副本,因为地址值指向的是同一个对象,所以一方修改了地址中的数据,另一方看到的数据就是修改之后的。

6.2参数传递

形式参数:在“定义方法”的时候,写在小括号之内的变量,就叫形式参数。

实际参数:在“调用方法”的时候,真正传入方法里的数据,叫做实际参数。

总结

两条规则:

对于基本类型(以及String)来说,形式参数的操作【不会】影响实际参数。

对于引用类型(除了String)来说,形式参数的操作【会】影响实际参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值