【面向对象】02方法与方法重载 this的几种用法 成员变量和局部变量

方法与方法重载

定义带参数的方法

<访问修饰符>  返回值类型  <方法名>(<形式参数列表>) {
    //方法的主体
    [return 返回值]
}
public void addName(String name){ 
	//方法体
}

调用带参数的方法

对象名.方法名(参数1, 参数2,......,参数n) // 实参列表

注意

  • 调用方法时不能指定实参类型

  • 形参和实参数据类型一致,数量一致

方法传参

基本数据类型:值传递(浅拷贝)

引用数据类型:地址传递(深拷贝)

构造方法

访问修饰符 构造方法名(参数列表) { 
    //方法体
}

特征

  • 无返回值(不需要写void)

  • 方法名与类名相同(区分大小写)

  • 系统默认提供无参构造方法,可以重写指定参数

作用

对象初始化:系统提供默认无参构造方法。

Student s1 = new Student(); // 无参构造方法
s1.name = "张三";
s1.score = 40;

Student stu1 = new Student("张三",40); // 带参构造方法

方法重载

一个类中,出现多个方法的名称相同,但是它们的形参列表是不同的,那么这些方法就称为方法重载了。

特征

  • 同一个类中
  • 方法名相同
  • 参数个数或类型不同
  • 与返回值、访问修饰符无关

构造方法重载

此时系统不再提供默认无参构造方法,需要手动添加,方可使用无参构造方法。

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

带参构造方法this关键字是对一个对象的默认引用这里用以区分同名成员变量

this的五种用法

this 就是一个变量,代表当前对象。可以用在方法中,来拿到当前对象。哪个对象调用方法,this就指向哪个对象。

1、区分实例变量和参数

当方法或构造函数的参数与实例变量同名时,使用 this.变量名 区分。

public class Person {
    private String name;
    public Person(String name) {
        this.name = name; // 使用 this 区分实例变量和参数
    }
    public void setName(String name) {
        this.name = name; // this.name 指向实例变量
    }
}

2、调用当前对象的方法

this.方法名() 可以用于调用当前对象的其他方法

public class Calculator {
    public void add(int a, int b) {
        System.out.println("sum = " + (a + b));
    }
    public void calculate() {
        this.add(5, 10); // 使用 this 调用另一个方法
    }
}

3、在构造函数中调用其他构造函数

使用 this() 调用同一类中的其他构造函数。常用于构造函数重载。

public class Rectangle {
    private int length;
    private int width;
    public Rectangle() {
        this(1, 1); // 调用带参数的构造函数
    }
    public Rectangle(int length, int width) {
        this.length = length;
        this.width = width;
    }
}

4、返回当前对象

this 可以作为方法的返回值,允许方法返回当前对象。常用于建造者模式。

public class Builder {
    private String value;
    public Builder setValue(String value) {
        this.value = value;
        return this; // 返回当前对象
    }
}

5、在匿名内部类中使用 this

在匿名内部类中,this 关键字指代的是内部类的实例,而不是外部类的实例。如果需要引用外部类的实例,可以用 OuterClassName.this 来指定。

public class OuterClass {
    private String outerField = "Outer";
     public void createInnerClass() {
        // 创建匿名内部类
        Runnable runnable = new Runnable() {
            private String innerField = "Inner";
            @Override
            public void run() {
                System.out.println("Inner field: " + innerField);
                // 使用 this 访问匿名内部类的实例
                System.out.println("This is: " + this);
                // 使用 OuterClass.this 访问外部类的字段
                System.out.println("Outer field: " + OuterClass.this.outerField);
            }
        };
        // 执行 Runnable 实现的 run 方法
        runnable.run();
    }
    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        outerClass.createInnerClass();
        // ner field: Inner
		// This is: OuterClass$1@4554617c
		// Outer field: Outer
    }
}

成员变量和局部变量及其区别

1.含义

  • 变量声明的位置决定变量作用域
  • 变量作用域确定可在程序中按变量名访问该变量的区域
public class AutoLion{
    变量1类型  变量1; // 成员变量
    变量2类型  变量2;
    变量3类型  变量3;
	public 返回类型 方法1(){
        变量4类型  变量4; // 局部变量
    }
    public 返回类型 方法2(){
        变量5类型   变量5; // 局部变量
    }
}

2.区别

①作用域不同

局部变量的作用域仅限于定义它的方法;成员变量的作用域在整个类内部都是可见的

②初始值不同

Java会给成员变量一个初始值;不会给局部变量赋予初始值

在同一个方法中,不允许有同名局部变量;在不同的方法中,可以有同名局部变量
在同一个类中,成员变量和局部变量同名时,局部变量具有更高的优先级

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值