方法和方法重载

方法和方法重载

1. 掌握方法的语法定义

中括号:[]表示可选

[权限修饰符]   [特殊修饰符]  返回值类型 方法名([参数列表]){
    // 方法体
    // 如果有返回值类型(只要不是void) 那么必须要加上关键字return
    [return xxx;]
}

**方法的分类:**无论是什么方法最终一定能够被归类到四类中。

根据返回值类型和是否有参数列表划分出来的。

  1. 无参无返方法(没有参数(空的),也没有返回值类型void)

    public void printInfo(){
        
    }
  2. 无参有返方法(没有参数(空的),有返回值类型:例如以前用过的scanner它的nextXXX()方法可以给你返回一个结果,这个结果叫做返回值)

    public int nextInt() {
         return nextInt(defaultRadix);
    }
  3. 有参无返方法(有参数(参数列表),没有返回值类型void)

    public void plus(double num1,double num2) {
    	System.out.println(num1+num2);
    }
  4. 有参有返方法(有参数,也有返回值类型)

    public double plus(double num1,double num2) {
    		double sum = num1 + num2;
    		return sum;
    }

方法的注意事项:

  1. 方法声明上的参数列表是形式参数列表,它是随便起的名,只不过是为了方便我们定义方法时使用而已。
  2. 方法在调用的时候,如果方法声明上有要求传递参数,你就必须按照形式参数列表的类型和数量一 一对应传值。这时候你传的值叫做实际参数
  3. 方法在定义返回值之后,如果你调用时没有拿变量接收,你得不到这个返回值。

2. 掌握方法的参数传递(小心-基本数据类型和引用数据类型)

1547175093640

基本数据类型在作为方法的参数传递时,是将数据的值传递过去了,多者之间没有关系。

引用数据类型在作为方法的参数传递时,是将引用的内存地址传递过去了,多者之间使用的是同一块堆内存,所以其中一处变化,会导致所有引用得到的结果变化。

3. 掌握特殊的方法:构造方法

**特殊的作用:**用作于对象的初始化。

语法:

权限修饰符   类名(参数列表){
    // 初始化操作
}

构造方法的注意事项:

  1. 每个类都被系统赋予了一个默认的无参构造。但是如果你手动编写了一个构造(无参/有参),系统都不会再给你提供默认无参构造了。

  2. 构造方法没有返回值类型,构造方法的方法名必须和类名完全一致。

4. 特殊的关键字:this(这个)

我们发现当方法声明上的参数名(局部变量)和成员变量的名相同时,默认会就近原则。局部变量优先。

所以这时候为了区分局部变量和成员变量可以给成员变量前加上this标识。

**this:**表示当前这个类的(这个)对象,谁调用这个方法谁就是当前对象。

public Student(String name, int age, String classId) {
		name = name;
		age = age;
		classId = classId;
	}

因为它是个对象,所以我们可以利用this去调用对象可以调用的东西。

this.name // 调用属性

this.printInfo(); // 调用普通方法

在构造方法中调用构造方法时,必须在有效代码的第一行。(必须在构造里才能调用)

this(); // 调用无参构造

this(xxx,xxx,xx); // 调用带参构造

5. 掌握方法重载

**作用:**方便你调用方法,不用去记忆一堆的方法名。也方便你定义方法,不用去起一堆的方法名。

**方法重载(overload):**发生在一个类中,出现的方法名相同参数列表不同的场景就是方法重载。与方法的返回值类型和访问修饰符无关!

为什么与返回值类型无关?

**鸡贼回答:**构造方法没有返回值类型,但是也能构成方法重载,所以方法的重载和返回值类型无关!

正确回答:

float max(int num1,int num2);
int max(int num1,int num2);

// 如果你调用max方法  你根本无法知道调用的是谁  
max(10,20)

什么样的才叫参数列表不同?

参数列表的个数不同。

float method1(int num1,int num2);
int method1(int num1);

参数列表的数据类型不同。

float method1(int num1,String num2);
int method1(int num1,int num2);

参数列表的位置不同。

float method1(int num1,String num2);
int method1(String num1,int num2);

6. 掌握成员变量和局部(Local)变量的区别

成员变量和局部变量的区别:

  1. 初始值不同。

    成员变量有初始值。

    局部变量没有初始值,如果不赋初始值,不能使用。

  2. 位置不同。

    成员变量定义在类中方法外。

    局部变量定义在类中方法内。(方法声明上的形参或者方法体中)

  3. 作用域不同。

    成员变量的作用域是整个类。

    局部变量的作用域是在定义它的方法内。

  4. 生命周期不同。

    成员变量是随着对象的创建而产生,随着对象的销毁而消失。

    局部变量是随着方法的压栈而产生,随着方法的弹栈而消失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值