Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解”的用法;这";在爪哇_Java_This - Fatal编程技术网

Java 理解”的用法;这";在爪哇

Java 理解”的用法;这";在爪哇,java,this,Java,This,我试图理解java中的this关键字。我想用this关键字来重写这段代码。如果我做得对,请告诉我。以下是原始代码: public class Book { private String title; private String author; private String publisher; public Book(String bookTitle, String authorName, String publisherName){ tit

我试图理解java中的
this
关键字。我想用
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; 
    }
}
我做对了吗

谢谢

凯文

编辑:谢谢你的回复。。。还有一个问题:在修改后的代码的构造函数中,等号的哪一侧表示类变量?例如,在
this.title=title
,此.title是否引用构造函数或类变量中的
title
变量

根据下面的回答,我认为答案是
这个。title
指的是类变量
title

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

在我看来,您使用的“this”是正确的

但是,我要提醒您,不要在多次使用时使用相同的变量名。在这种情况下,这是可以接受的;但是,避免养成不良的编程习惯是明智的。

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

在我看来,您使用的“this”是正确的


但是,我要提醒您,不要在多次使用时使用相同的变量名。在这种情况下,这是可以接受的;然而,避免养成坏的编程习惯是明智的。

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

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

您正确地使用了
this

现在,要理解为什么
这个
是这样工作的,请注意,构造函数的早期版本中的局部变量(构造函数参数)名称与类成员名称不同。因此,
不需要此
,因为没有任何歧义

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


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

您已经正确地使用了

现在,要理解为什么
这个
是这样工作的,请注意,构造函数的早期版本中的局部变量(构造函数参数)名称与类成员名称不同。因此,
不需要此
,因为没有任何歧义

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


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

是的,您已经正确地理解了java中的
这一点。来自Sun的原始文档:

在实例方法或构造函数中,这是对 当前对象-正在使用其方法或构造函数的对象 打电话。您可以从中引用当前对象的任何成员 一个实例方法或构造函数


来源:

是的,您已经正确地理解了java中的
这一点。来自Sun的原始文档:

在实例方法或构造函数中,这是对 当前对象-正在使用其方法或构造函数的对象 打电话。您可以从中引用当前对象的任何成员 一个实例方法或构造函数


来源:

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

看看你的问题,使用它有两个大概念已经演变。 在第一种也是最重要的情况下,它被用来指代当前对象,它已经进化,构造函数意味着它携带了当前对象的referenceid。。。。 在第二种情况下,这主要用于区分局部参数和
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
    }
}
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 
        }