this关键字

1. this是什么?

  • 在Java中,this关键字不算难理解,它的作用和其词义很接近。
    • 它在方法(准确的说是实例方法或非static的方法)内部使用,表示调用该方法的对象
    • 它在构造器内部使用,表示该构造器正在初始化的对象。
  • this可以调用的结构:成员变量、方法和构造器

2. 什么时候使用this

2.1 实例方法或构造器中使用当前对象的成员

在实例方法或构造器中,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的可读性。不过,通常我们都习惯省略this。
但是,当形参与成员变量同名时,如果在方法内或构造器内需要使用成员变量,必须添加this来表明该变量是类的成员变量。即:我们可以用this来区分成员变量局部变量。比如:

image-20220503102947013

另外,使用this访问属性和方法时,如果在本类中未找到,会从父类中查找。这个在继承中会讲到。

举例1:

class Person{   // 定义Person类  
    private String name ;     
    private int age ;             
    public Person(String name,int age){   
        this.name = name ;     
        this.age = age ;    
    }  
    public void setName(String name){  
        this.name = name;  
    }  
    public void setAge(int age){  
        this.age = age;  
    }  
    public void getInfo(){    
        System.out.println("姓名:" + name) ;  
        this.speak();  
    }  
    public void speak(){  
        System.out.println(“年龄:” + this.age);     
    }  
}  

2.2 同一个类中构造器互相调用

this可以作为一个类中构造器相互调用的特殊格式。

  • this():调用本类的无参构造器
  • this(实参列表):调用本类的有参构造器
public class Student {  
    private String name;  
    private int age;  
​  
    // 无参构造  
    public Student() {  
//        this("",18);//调用本类有参构造器  
    }  
​  
    // 有参构造  
    public Student(String name) {  
        this();//调用本类无参构造器  
        this.name = name;  
    }  
    // 有参构造  
    public Student(String name,int age){  
        this(name);//调用本类中有一个String参数的构造器  
        this.age = age;  
    }  
​  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public int getAge() {  
        return age;  
    }  
    public void setAge(int age) {  
        this.age = age;  
    }  
​  
    public String getInfo(){  
        return "姓名:" + name +",年龄:" + age;  
    }  
}

注意:

  • 不能出现递归调用。比如,调用自身构造器。
    • 推论:如果一个类中声明了n个构造器,则最多有 n – 1个构造器中使用了"this(形参列表)"
  • this()和this(实参列表)只能声明在构造器首行。
    • 推论:在类的一个构造器中,最多只能声明一个"this(参数列表)"
Java基础

构造方法

2025-8-8 14:59:17

Java基础

面向对象特征一:封装性(encapsulation)

2025-8-8 14:59:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索