加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么在构造函数和Setter中使用“this”关键字?

发布时间:2020-12-15 05:14:46 所属栏目:Java 来源:网络整理
导读:构造函数用于初始化一个值,并在创建类实例时将其赋值给类变量,对吧? public class Joke{ private String jokeSetup; private String jokePunchLine; public Joke(String jokeSetup,String jokePunchLine){ this.jokeSetup=jokeSetup; this.jokePunchLine=jo
构造函数用于初始化一个值,并在创建类实例时将其赋值给类变量,对吧?

public class Joke{
   private String jokeSetup;
   private String jokePunchLine;

   public Joke(String jokeSetup,String jokePunchLine){
       this.jokeSetup=jokeSetup;
       this.jokePunchLine=jokePunchLine;
   }
}

考虑以下:

public Joke(String jokeSetup,String jokePunchLine)

是否创建了同名的另一个变量?

如果是这样,为什么将它们分配给前jokeSetup和jokePunchLine值?

PS:这段代码不是由我创建的.它是在我学习Java的视频中显示的.

解决方法

构造函数的目的是初始化刚刚创建的对象,例如填充其实例字段(也称为实例变量).这在构造函数中用于引用构造函数初始化的实例.

在示例构造函数中,您有参数和实例字段.构造函数正在获取参数的值并将这些值分配给实例字段:

public Joke(String jokeSetup,String jokePunchLine)
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---- Declares parameters this
//                                                      constructor accepts when
//                                                      called
{
//                 vvvvvvvvv------------ parameter
    this.jokeSetup=jokeSetup;
//  ^^^^^^^^^^^^^^---------------------- instance field

//                     vvvvvvvvvvvvv---- parameter
    this.jokePunchLine=jokePunchLine;
//  ^^^^^^^^^^^^^^^^^^------------------ instance field
}

构造函数可以使用常量值初始化实例字段,或者间接使用参数值(例如,查找某些内容)等.它并不总是直接的一对一分配,就像在您的示例中一样.

在您的示例中,参数与实例字段具有相同的名称,但这不是必需的.例如,这个构造函数与您的构造函数完全相同:

public Joke(String theJokeSetup,String theJokePunchLine)
//                 ^---------------------^---------- Note the name changes
{
//                   vvvvvvvvvvvv------------ parameter
    this.jokeSetup = theJokeSetup;
//  ^^^^^^^^^^^^^^--------------------------- instance field

//                       vvvvvvvvvvvvvvvv---- parameter
    this.jokePunchLine = theJokePunchLine;
//  ^^^^^^^^^^^^^^^^^^----------------------- instance field
}

Java让你不用这个.部分引用实例字段时,只需单独使用字段名称(例如jokeSetup而不是this.jokeSetup).但是,除非重命名参数,否则不能在构造函数中执行此操作,因为它们与实例字段具有相同的名称,因此构造函数中的jokeSetup是参数,而不是字段.当出现类似的冲突时,最本地的标识符优先(在构造函数中,参数是最本地的).

当没有冲突时,无论你是否使用它都是一种风格问题.部分与否. (我总是使用它.我发现它更清楚.)例如,这是另一个版本的构造函数,它与原始版本完全相同:

public Joke(String theJokeSetup,String theJokePunchLine)
//                 ^---------------------^---------- Note the name changes
{
//              vvvvvvvvvvvv------------ parameter
    jokeSetup = theJokeSetup;
//  ^^^^^^^^^--------------------------- instance field

//                  vvvvvvvvvvvvvvvv---- parameter
    jokePunchLine = theJokePunchLine;
//  ^^^^^^^^^^^^^----------------------- instance field
}

我之所以提到这一点是因为,当没有冲突时,这是一个风格问题,你会看到有时使用这种风格.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读