揭开this的神秘面纱-属性篇 | 带你学《Java面向对象编程》之七-阿里云开发者社区

开发者社区> Java开发者> 正文

揭开this的神秘面纱-属性篇 | 带你学《Java面向对象编程》之七

简介: 本节通过几组实例介绍了如何灵活地使用this进行本类属性的调用以及this在类中的特殊含义。

上一篇:3分钟速懂匿名对象 | 带你学《Java面向对象编程》之六
【本节目标】
通过阅读本节内容,能够让你初步了解到作用域的概念,理解this的多种用途,学会使用this进行类内属性的访问。

this调用本类属性

this可以算是Java中比较复杂的关键字,因为this的使用形式上决定了它的灵活性,在程序里面,使用this可以实现以下三类结构的描述:

  • 当前类中的属性:this.属性;
  • 当前类中的方法(普通方法、构造方法):this()、this.方法名称();
  • 描述当前对象;

通过现在的分析可以发现,利用构造方法或者是setter方法都可以进行类中的属性的赋值,在进行赋值的时候,之前采用的是如下的定义形式:

class Person{
   private String name ;
   private int age ;
   public Person(String n ,int a){
    name = n ;
    age = a ;
  }
  public void tell(){
    System.out.println(“姓名:”+ name + “、年龄:”+ age );
  }
//setter、getter略
}  
public class JavaDemo {          //主类
    public static void main(String args[]) {
      Person per = new person(“王五” ,38) ;
      per.tell() ;
   }
}

image.png
图一 执行结果一

但是我们在构造方法定义的过程中会发现有问题:

public Person(String n ,int a){
    name = n ;
    age = a ;
}

这个问题出现在参数名称上,可以发现,此时构造方法中两个参数的目的是为了类中的name或age属性初始化,但是,现在却发现此时的代码n和a参数名称不好。

public Person(String name ,int age){
    name = name ;
    age = age ;
}

image.png
图二 执行结果二

如果说现在将构造方法中的参数名称修改为name、age,则发现无法进行属性的正确设置:
在Java程序之中“{}”是作为一个结构体的边界符,那么在程序里面当进行变量(参数、属性)使用的时候,都会以“{}”作为一个查找边界,所以按照就近取用的原则,此时的构造方法并没有能够访问类中的属性,所以此时为了明确的标记出类中的属性与参数的区别,往往会在属性前追加一个“this”,表示本类属性。

class Person{
   private String name ;
   private int age ;
   public Person(String name ,int age){
    this.name = name ;
    this.age = age ;
   }
  public void tell(){
    System.out.println(“姓名:”+ this.name + “、年龄:”+ this.age );
  }
//setter、getter略
}  
public class JavaDemo {          //主类
    public static void main(String args[]) {
      Person per = new person(“王五” ,38) ;
      per.tell() ;
    }
}

image.png
图三 执行结果三

在以后的程序开发过程中,只要是访问本类中属性,请一定要加上“this”实现访问。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:揭开this的神秘面纱-方法篇 | 带你学《Java面向对象编程》之八
更多Java面向对象编程文章查看此处

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

Java开发者成长课堂

官方博客
官网链接