this关键字

2019-02-03  本文已影响47人  张轻舟

this是什么?

this是java里面的一个关键字,是一种引用类型,在堆(heap)中的每个java对象上都有一个this指向自己。this代表着当前对象的引用。
this可以做什么?
1.可以区分成员变量和局部变量。
例:

/*
    创建一个歌手类
*/
class Singer{

    private String name;

    /*
    以前在编写set方法时为了将传入参数的名字和成员变量的名字做区分
    这两个变量的名字是不一样的
    public void setName(String _name){
        name = _name;
    }
    */

    /*
        因为this代表当前对象的引用,所以可以使用this.变量名的方式调用成员变量
    */
    public void setName(String name){
        //this.name表示的是成员变量,name表示传入的参数
        this.name = name;
    }

    public String getName(){
        //return name;
        return this.name;
    }

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

    public void m2(){
        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方法
    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }
    public int getMonth() {
        return month;
    }
    public void setMonth(int month) {
        this.month = month;
    }
    public int getDay() {
        return day;
    }
    public void setDay(int day) {
        this.day = day;
    }
}

public class ThisTest01{

    public static void main(String[] args){



        MyDate md = new MyDate();

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

    }

}

再谈局部变量和成员变量
先看下面代码:

public class ActorTest01 {

    public static void main(String[] args){

        Actor a = new Actor();
        a.setName("范冰冰");
        a.act1();
        a.act2();
    }

}

class Actor{

    private String name;

    public void act1(){
        //定义一个局部变量name
        String name = "周润发";
        System.out.println("name=" + name);//这里打印出来的是局部变量name的值
        System.out.println("this.name=" + this.name);
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

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

小练习

写一个长方形类,里面提供计算周长和面积的方法

答案

/*

    成员变量:
        宽width,高high
    成员方法:
        setXxx和getXxx
        求周长:getLength()
        求面积:getArea()
*/
class Rectangle {

    //宽
    private int width;
    //高                
    private int high;                

    public Rectangle(){}            //空参构造

    public Rectangle(int width,int high) {
        this.width = width;            //有参构造
        this.high = high;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getWidth() {            
        return width;
    }

    public void setHigh(int high) {    
        this.high = high;
    }

    public int getHigh() {            
        return high;
    }

    //计算周长
    public int getLength() {        
        return 2 * (width + high);
    }

    //计算面积
    public int getArea() {            
        return width * high;
    }
}

public class Rectangle1Test {                            
    public static void main(String[] args) {
        Rectangle1 r = new Rectangle1(10,20);
        System.out.println(r.getLength());        
        System.out.println(r.getArea());        
    }
}
上一篇下一篇

猜你喜欢

热点阅读