1

我试图理解thisjava中的关键字。我想改用this关键字来重写这段代码。如果我做得对,请告诉我。这是原始代码:

public class Book {

    private String title;
    private String author;
    private String publisher;

    public Book(String bookTitle, String authorName, String publisherName){
        title = bookTitle;
        author = authorName;
        publisher = publisherName;
    } 
}

这是重写的代码:

public class Book {

    private String title; 
    private String author; 
    private String publisher; 

    public Book(String title, String author, String publisher){
        this.title = title; 
        this.author = author; 
        this.publisher = publisher; 
    }
}

我做对了吗?

谢谢,

凯文

编辑:感谢您的回复......还有一个问题:在修改后的代码的构造函数中,等号的哪一侧指的是类变量?例如, inthis.title = title;this.titletitle来自构造函数还是来自类变量的变量?

根据下面的回复,我认为答案是this.title指类变量title

4

6 回答 6

2

是的。关键字的this意思是“我现在在里面运行的这个类的实例”。对于变量或方法引用,您通常不需要它,但在这种(常见)情况下,构造函数参数与保存它们的字段具有相同的名称,使用this字段和参数之间的编译器区分。

于 2013-10-11T19:13:04.717 回答
1

你用对this了。

现在,要了解为什么以this这种方式工作,请注意先前版本的构造函数中的局部变量(构造函数参数)名称与您的成员名称不同。因此,不需要,因为没有任何歧义。this

在第二个版本中,由于它们的名称与构造函数参数相同,因此在构造函数主体中隐藏或隐藏类成员字段。因此,this哪个指向当前对象实例需要显式引用它们。

另请注意,this 不能静态上下文(静态方法)中使用它,原因很明显,没有当前对象实例与之关联。它必须在构造函数实例块实例方法中使用。

于 2013-10-11T19:18:07.453 回答
1

这里

使用 this 关键字的最常见原因是字段被方法或构造函数参数遮蔽。

让我们举一个例子来说明上述语句的含义。我在适当的代码部分添加了注释供您参考。

public class ThisKeywordExample {

    private int x;
    private int y;

    public void setVar(int x, int y) {
        x = x;  // Setting private variable x value 
        y = y;  // Setting private variable y value
        System.out.println(x + " " + y); // prints 10 20 
    }

    public static void main(String[] args) {
        ThisKeywordExample obj1 = new ThisKeywordExample();
        obj1.setVar(10, 20);
        System.out.println(obj1.x + " " + obj1.y); //prints 0 0 because the effect is limited to the local copies of x &  y in the setVar method
    }
}

现在我建议您将setVar方法更改为

public void setVar(int x, int y) {
            this.x = x;  // Setting private variable x value 
            this.y = y;  // Setting private variable y value
            System.out.println(x + " " + y); // prints 10 20 
        } 

看看它现在是如何工作的。

于 2013-10-11T19:52:37.780 回答
0

this 是的,您在 java 中已经正确理解了。来自 Sun 的原始文档:

在实例方法或构造函数中,this 是对当前对象的引用——调用其方法或构造函数的对象。您可以使用 this 从实例方法或构造函数中引用当前对象的任何成员。

来源:http ://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

于 2013-10-11T19:18:45.900 回答
0

看看你的问题,有两个使用它的大概念已经演变。在第一种也是最重要的情况下,this 用于指代已经进化的当前对象,构造函数意味着 this 携带当前对象的 referenceid.... 在第二种情况下,这主要用于区分局部参数和实例变量,因为两种变量类型的名称是相同的......并且在 java 中,当在任何局部块或方法中使用时,局部变量会掩盖实例变量(同名)......所以这里区分了实例变量(this.title)和局部变量(title)..记住这让你可以直接引用你可以使用它来避免实例和局部变量之间可能发生的任何命名空间冲突的对象......

于 2013-10-11T19:40:35.690 回答
0

“this”允许您轻松区分类/对象中的同名变量。

在我看来,您正确使用了“this”。

但是,我会注意不要将相同的变量名用于多种用途。在这种情况下,可以接受;但是,避免养成不良的编程习惯是明智的。

于 2013-10-11T19:12:35.020 回答