this关键字

this是什么?

this是java里面的一个关键字,是一种引用类型,在堆(heap)中的每个java对象上都有一个this指向自己。this代表着当前对象的引用


this可以做什么?

1.可以区分成员变量和局部变量。

例:

/*

    创建一个歌手类

*/class Singer{

    private String name;

    /*

    以前在编写set方法时为了将传入参数的名字和成员变量的名字做区分

    这两个变量的名字是不一样的

    public void setName(String _name){

        name = _name;

    }

    */    /*

        因为this代表当前对象的引用,所以可以使用this.变量名的方式调用成员变量

    */    publicvoidsetName(String name){

        //this.name表示的是成员变量,name表示传入的参数        this.name = name;

    }

    publicStringgetName(){

        //return name;        return this.name;

    }

    //还可以使用this.方法名的方式调用当前对象的方法    //下面两种方式都可以调用到m2方法    publicvoidm1(){

        this.m2();

        m2();

    }

    publicvoidm2(){

        System.out.println("TESTING");

    }

}

2.可以调用构造方法

语法:this(实参);

注意:如果要是使用this调用构造方法的话,那么this必须出现在构造方法的第一行

例:

/*

    定义一个日期类

*/class MyDate{

    //年    private int year;

    //月    private int month;

    //日    private int day;

    //构造方法    //需求:在创建日期对象的时候,默认的日期是:1970-1-1    MyDate(){

        //通过this调用有参的构造方法        this(1970,1,1);//必须出现在第一行,否则将编译报错        //构造方法不能这样调用        //MyDate(1970,1,1);Error    }

    //构造方法    MyDate(int year,int month,int day){

        this.year = year;

        this.month = month;

        this.day = day;

    }

    //set和get方法    publicintgetYear(){

        return year;

    }

    publicvoidsetYear(intyear){

        this.year = year;

    }

    publicintgetMonth(){

        return month;

    }

    publicvoidsetMonth(intmonth){

        this.month = month;

    }

    publicintgetDay(){

        return day;

    }

    publicvoidsetDay(intday){

        this.day = day;

    }

}public class ThisTest01{

    publicstaticvoidmain(String[] args){

        MyDate md = new MyDate();

        System.out.println(md.getYear()+"年"+md.getMonth()+"月"+md.getDay()+"日");

    }

}

再谈局部变量和成员变量

先看下面代码:

public class ActorTest01 {

    publicstaticvoidmain(String[] args){

        Actor a = new Actor();

        a.setName("范冰冰");

        a.act1();

        a.act2();

    }

}class Actor{

    private String name;

    publicvoidact1(){

        //定义一个局部变量name        String name = "周润发";

        System.out.println("name=" + name);//这里打印出来的是局部变量name的值        System.out.println("this.name=" + this.name);

    }

    publicvoidact2(){

        System.out.println("name=" + name);//这里打印的是成员变量name的值    }

    publicStringgetName(){

        return name;

    }

    publicvoidsetName(String name){

        this.name = name;

    }

}

在Java里面,局部变量和成员变量的标识符是可以相同的,如果有相同的标识符,则可以通过this调用成员变量

/*

    成员变量:

        宽width,高high

    成员方法:

        setXxx和getXxx

        求周长:getLength()

        求面积:getArea()

*/class Rectangle {

    //宽    private int width;

    //高                    private int high;               

    publicRectangle(){}            //空参构造    publicRectangle(intwidth,inthigh){

        this.width = width;            //有参构造        this.high = high;

    }

    publicvoidsetWidth(intwidth){

        this.width = width;

    }

    publicintgetWidth(){           

        return width;

    }

    publicvoidsetHigh(inthigh){   

        this.high = high;

    }

    publicintgetHigh(){           

        return high;

    }

    //计算周长    publicintgetLength(){       

        return 2 * (width + high);

    }

    //计算面积    publicintgetArea(){           

        return width * high;

    }

}public class Rectangle1Test {                           

    publicstaticvoidmain(String[] args){

        Rectangle1 r = new Rectangle1(10,20);

        System.out.println(r.getLength());       

        System.out.println(r.getArea());       

    }

}

你可能感兴趣的:(this关键字)