Java基础——对象和类4(this)

 

this 是一个 Java 中的关键字。这个关键字在不同的用法下有不同的含义。

4.1 this 表示引用

class MyClass{
    int value = 10;
    public void print(){
        int value = 20;
        System.out.println(value);
    }
}
public class TestMyClass{
    public static void main(String args[]){
        MyClass mc = new MyClass();
        mc.print();
    }
}

在这段代码中,调用 print 方法时,打印的是 20。原因也很简单。我们在 MyClass 类中定义了一个实例变量 value,这个变量的值 10。但是,我们在 print 方法中,同样定义了一个局部变量 value,这个 value 的值是 20。根据实例变量的特点,当实例变量和局部变量发生命名冲突时,以局部变量优先。因此,此时输出的 value 值,就是实例变量的值 20。

那有没有办法,在局部变量和实例变量冲突的时候,明确的访问实例变量呢?这个时候,我们就可以用 this 关键字。修改后的代码如下:

class MyClass{
    int value = 10;
    public void print(){
        int value = 20;
        System.out.println(value);
        System.out.println(this.value);
    }
}
public class TestMyClass{
    public static void main(String args[]){
        MyClass mc = new MyClass();
        mc.print();
    }
}

输出:

20

10

那么“this.”究竟是什么含义呢?从概念上说,在这种使用 this 的用法中,this 关键字表示的是“当前对象的引用”。那么什么是“当前”对象呢?所谓当前对象,指的是:对哪个对象调用方法,哪个对象就是当前对象

当局部变量和实例变量没有命名冲突时,表示实例变量时,可以不用 this。

 

另外,“this.”这种用法,在构造方法中也非常常见。例如下面的代码:

class MyClass{
    int value;
    public MyClass(){}
    public MyClass(int value){
        this.value = value;
    }
}

在第二个有参构造方法中,参数名为 value。由于参数是特殊的局部变量,这个参数就跟实例变量 value 产生了命名冲突。

于是,在构造方法中,我们就是用了 this 关键字

this.value = value;

“=”左边的 this.value 表示的是实例变量,而“=”右边的 value 指的是局部变量,也就是构造方法的参数。这句话的含义是,把构造方法的参数赋值给实例变量。

4.2 this 用在构造方法中

class MyClass{
    int value;
    public MyClass(){
    //非常复杂的构造过程…
    }
    public MyClass(int value){
        //复杂的构造过程…
        …
        this.value = value;
    }
}

假设有参数的构造方法“MyClass(int value)”相对“MyClass()”构造方法,只是多出一个语句:this.value = value。除此之外的构造过程完全相同。既然这部分代码完全相同,那么最合理的想法,应当是重用“MyClass()”这个无参构造函数。为此,我们希望能在“MyClass(int value)”这个有参构造方法中,调用无参的构造方法。如果在一个类的构造方法中,要调用本类的其他构造方法,就必须使用 this 关键字。语法是 this 加上一个圆括号,圆括号中加上调用构造方法时传递的参数。例如,在这个例子中,我们要调用 MyClass 类的无参构造方法,于是,就应当写成:

 

this();
public MyClass(int value){
    this();
    this.value = value;
}

这样,就实现了我们所说的,在 MyClass(int value)这个构造方法中,调用 MyClass()这个无参构造方法。

在使用“this()”这种语法时,要注意三个要点:

1、 只能在构造方法中使用,并且只能调用本类的其他构造方法

2、 在使用时,this()必须作为构造方法的第一个语句,否则编译出错。

需要强调的是,对 this()的调用必须是构造方法中的第一个语句,这个限制,指的是对“this + ()”的调用。而“this + .”的语法,不受这个限制。

3、 this()不能够递归调用。

也就是说,构造方法不能调用自身。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值