繁体   English   中英

Java 构造函数 - 如何创建它们

[英]Java Constructors - how to create them

我目前正在学习 Java,我对 Java 中的构造函数有疑问。 在学习时,我有时会看到构造函数的写法不同,如我的 2 个示例所示。 您能否解释一下这两个之间有什么区别以及为什么要使用其中一个。 一种是使用“这个”。 而另一个不是,这让我很困惑。 有没有合适的方法来写这个。

例1

public class Dog {
  String breed;
  boolean hasOwner;
  int age;
    
  public Dog(String dogBreed, boolean dogOwned, int dogYears) {
    
    breed = dogBreed;
    hasOwner = dogOwned;
    age = dogYears;
   

例2

public class Dog {
  String breed;
  boolean hasOwner;
  int age;
    
  public Dog(String dogBreed, boolean dogOwned, int dogYears) {
    
    this.breed = dogBreed;
    this.hasOwner = dogOwned;
    this.age = dogYears;

尽管它们(上面的示例)都做同样的事情,但是用this关键字引用实例变量总是好的。

this只不过是对 class 的自我 object 的引用。 希望您已经了解 Java 和 Object 面向原则的基础知识,在 Java 中,所有内容都称为对象。 即使您尝试访问变量,您也必须通过创建实例(即简单来说 object)通过对象来完成。 回到你的例子,因为你正在设置实例变量,你应该通过引用this关键字来使用。 换句话说,您明确表示class 的实例变量应使用作为参数传递的数据进行设置。

我还想指出一件事。 我看到在示例 2 中,您更改了构造函数的参数只是为了确保 Java 不会与实例变量和参数混淆。 但是在这样做的同时,您改变了参数的含义或描述性意图。 这本可以避免,如下所示 -

public class Dog {
  String breed;
  boolean hasOwner;
  int age;
    
  public Dog(String breed, boolean hasOwner, int age) {
    
    this.breed = breed;    
    this.hasOwner = hasOwner;
    this.age = age;

    // Any this.variables are referred as the instance  variables and the ones
    // without the this are referred as the parameters. 
  }
}

我希望您现在已经理解了this关键字的用途。 请记住this不仅限于变量,还可以与方法一起使用。 只要您记住this只是对自我的引用,您就永远不会感到困惑。

这是非常基本的,但为了做出正确的决定,您可以考虑了解this的流行含义。

在您给定的示例中,无论是否使用this都很好,但 2. 示例由于以下原因而过度杀伤:我们使用this来指代我们正在创建的 Object。 在您的示例 2 中, this和 Dog 我们可以说它们在该上下文中是相同的。 所以说: Dog chien = new Dog(...); 在 class Dog 内部,使用thischien或您创建的任何其他Dog object 相同。

那么为什么要使用this呢? 一个基本原因是为构造函数或方法提供了参数,以防您将它们命名为与属性相同的名称。

例如,您可以这样做:

public class Dog { 
            String breed; 
            boolean hasOwner;
            int age; 
     
  public Dog(String breed, boolean hasOwner, int age) { 
             this.breed = breed;
             this.hasOwner = hasOwner;
             this.age = age;

这和您的示例 1 一样有效。有了this ,您表明您想要为 Dog 的属性分配一个值,该值作为参数给出。 否则,您可以避免编写像breed = breed这样的歧义。

总而言之,如果您的参数名称与属性名称不同,则不需要使用this ,因此不需要示例 1 和 2 都可以,但在 2 中不需要它,例如1刚刚好。 然而,对于 java 中的更多概念,习惯于将this作为 object 的自我参考是一个很好的做法。 这可能有助于您更好地了解 java 中未来有用的东西。

在 Java 中,构造函数是与方法类似的代码块。 在创建 class 的实例时调用它。 在调用构造函数时,memory中分配了object的memory。

这是一种特殊的方法,用于初始化 object。 每次使用 new() 关键字创建 object 时,都会调用至少一个构造函数。

关键字this是 Java 中的引用变量,它引用当前的 object。 当我们在构造函数中使用与定义的变量相似的相同参数时,我们在构造函数中使用 this 关键字。

public class Dog {
String breed;
boolean hasOwner;
int age;

public Dog(String dogBreed, boolean dogOwned, int dogYears) {

  this.breed = dogBreed;
  this.hasOwner = dogOwned;
  this.age = dogYears;

当您使用时,分配参数的值。

public class Dog{
    String breed;
    boolean hasOwner;
    int age;
    public Dog(String dogBreed, boolean dogOwned, int dogYears){
        this.breed = dogBreed;
        this.hasOwner = dogOwned;
        this.age = dogYears;
    }
}

所以现在,如果你不使用 java 的“this”关键字,当你尝试使用你的局部变量并且你 output 显示为零或依赖时,编译器将无法理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM