美文网首页
this关键字

this关键字

作者: 张轻舟 | 来源:发表于2019-02-03 22:39 被阅读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());        
        }
    }
    

    相关文章

      网友评论

          本文标题:this关键字

          本文链接:https://www.haomeiwen.com/subject/impusqtx.html