JAVA中this用法小结

我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它,但是到底“this”该怎么用,却心中无数!很多人一提起它,就说“当前对象”,可到底什么是当前对象,是什么当前对象,他自己也不清楚。现在让大家看一个小例子,给你分享一下JAVA中“this”的用法!

package cn.com.thisTest;

/**
 * @Author : 沉迷BUG亦无法自拔
 * @Description : 陌上花开,可缓缓归矣。
 * @ClassName : ThisTest
 * @CreateDate: 2020-03-24 11:34:42
 */
@SuppressWarnings("all")
public class ThisTest {

    private int i = 0;
    //第一个构造器:有一个int型形参

    ThisTest(int i) {
        this.i = i + 1;//此时this表示引用成员变量i,而非函数参数i
        System.out.println("Int constructor i——this.i:  " + i + "——" + this.i);
        System.out.println("i-1:" + (i - 1) + "this.i+1:" + (this.i + 1));
        System.out.println("i: " + i);
        System.out.println("this.i: " + this.i);
        //从两个输出结果充分证明了i和this.i是不一样的!
    }
    //  第二个构造器:有一个String型形参


    ThisTest(String s) {
        System.out.println("String constructor:  " + s);
    }
    //  第三个构造器:有一个int型形参和一个String型形参


    ThisTest(int i, String s) {
        this(s);//this调用第二个构造器
        //this(i);
       /*此处不能用,因为其他任何方法都不能调用构造器,只有构造方法能调用他。
       但是必须注意:就算是构造方法调用构造器,也必须为于其第一行,构造方法也只能调 
       用一个且仅一次构造器!*/
        this.i = i++;//this以引用该类的成员变量
        System.out.println("Int constructor:  " + i + "/n" + "String constructor:  " + s);
    }

    public ThisTest

    increment() {
        this.i++;
        return this;//返回的是当前的对象,该对象属于(ThisTest)
    }

    public static void main(String[] args) {
        ThisTest tt0 = new ThisTest(10);
        ThisTest tt1 = new ThisTest("ok");
        ThisTest tt2 = new ThisTest(20, "ok again!");

        System.out.println(tt0.increment().increment().increment().i);
        //tt0.increment()返回一个在tt0基础上i++的ThisTest对象,
        //接着又返回在上面返回的对象基础上i++的ThisTest对象!
    }

}

运行结果:
Int constructor i——this.i: 10——11
String constructor: ok
String constructor: ok again!
Int constructor: 21
String constructor: ok again!
14
细节问题注释已经写的比较清楚了,这里不在赘述,只是总结一下,其实this主要要三种用法:
1、表示对当前对象的引用!
2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。
3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!

JAVA中this的三种用法的详解
this关键字必须放在非静态方法里面
this关键字代表自身,在程序中主要的使用用途有以下几个方面:
? 使用this关键字引用成员变量(成员变量被封装了,也就是被private修饰时)
? 使用this关键字在自身构造方法内部引用其它构造方法
? 使用this关键字代表自身类的对象
? 使用this关键字引用成员方法
8.8.1.1 引用成员变量
在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,有些时候可以省略,有些时候不能省略。首先看一下下面的代码:
/

  • 使用this引用成员变量
    /
    public class ReferenceVariable {
    private int a;
    public ReferenceVariable(int a){
    this.a = a;
    }
    public int getA(){
    return a;
    }
    public void setA(int a){
    this.a = a;
    }
    }
    在该代码的构造方法和setA方法内部,都是用this.a引用类的成员变量。因为无论在构造方法还是setA方法内部,都包含2个变量名为a的变量,一个是参数a,另外一个是成员变量a。按照Java语言的变量作用范围规定,参数a的作用范围为构造方法或方法内部,成员变量a的作用范围是类的内部,这样在构造方法和setA方法内部就存在了变量a的冲突,Java语言规定当变量作用范围重叠时,作用域小的变量覆盖作用域大的变量。所以在构造方法和setA方法内部,参数a起作用。
    这样需要访问成员变量a则必须使用this进行引用。当然,如果变量名不发生重叠,则this可以省略。
    但是为了增强代码的可读性,一般将参数的名称和成员变量的名称保持一致,所以this的使用频率在规范的代码内部应该很多。
    8.8.1.2 引用构造方法
    在一个类的构造方法内部,也可以使用this关键字引用其它的构造方法,这样可以降低代码的重复,也可以使所有的构造方法保持统一,这样方便以后的代码修改和维护,也方便代码的阅读。
    下面是一个简单的示例:
    /
    *
  • 使用this关键字引用构造方法
    /
    public class ReferenceConstructor {
    int a;
    public ReferenceConstructor(){
    this(0);
    }
    public ReferenceConstructor(int a){
    this.a = a;
    }
    }
    这里在不带参数的构造方法内部,使用this调用了另外一个构造方法,其中0是根据需要传递的参数的值,当一个类内部的构造方法比较多时,可以只书写一个构造方法的内部功能代码,然后其它的构造方法都通过调用该构造方法实现,这样既保证了所有的构造是统一的,也降低了代码的重复。
    在实际使用时,需要注意的是,在构造方法内部使用this关键字调用其它的构造方法时,调用的代码只能出现在构造方法内部的第一行可执行代码。这样,在构造方法内部使用this关键字调用构造方法最多会出现一次。
    8.8.1.3 代表自身对象
    在一个类的内部,也可以使用this代表自身类的对象,或者换句话说,每个类内部都有一个隐含的成员变量,该成员变量的类型是该类的类型,该成员变量的名称是this,实际使用this代表自身类的对象的示例代码如下:
    /
    *
  • 使用this代表自身类的对象
    /
    public class ReferenceObject {
    ReferenceObject instance;
    public ReferenceObject(){
    instance = this;
    }
    public void test(){
    System.out.println(this);
    }
    }
    在构造方法内部,将对象this的值赋值给instance,在test方法内部,输出对象this的内容,这里的this都代表自身类型的对象。
    8.8.1.4 引用成员方法
    在一个类的内部,成员方法之间的互相调用时也可以使用“this.方法名(参数)”来进行引用,只是所有这样的引用中this都可以省略,所以这里就不详细介绍了。
    *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值