8 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.变量名的方式调用成员变量
    */
    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());        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值