Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_This_Instance Variables - Fatal编程技术网

在Java中,访问类内实例变量的最佳方式是什么?

在Java中,访问类内实例变量的最佳方式是什么?,java,oop,this,instance-variables,Java,Oop,This,Instance Variables,我刚刚开始学习Java,它很棒。我需要了解的一点是,在类中,我们可以通过两种方式访问实例变量: class Box { // Instance variables private int width; private int height; private int depth; // First way public void set_volume(int a, int b, int c) { this.width = a;

我刚刚开始学习Java,它很棒。我需要了解的一点是,在类中,我们可以通过两种方式访问实例变量:

class Box {

    // Instance variables
    private int width;
    private int height;
    private int depth;

    // First way
    public void set_volume(int a, int b, int c) {
        this.width = a;
        this.height = b;
        this.depth = c;
    }

    // Second way
    public void set_volume_v2(int a, int b, int c) {
        width = a;
        height = b;
        depth = c;
    }

}

在这里,实例变量无需
关键字即可访问。那最好的办法是什么呢?或者它们之间有什么区别?

使用
将允许您确保引用的是实例变量而不是参数,如果它们共享相同的名称

这通常被认为是实例方法和构造函数的最佳实践


否则,您的两种方法是等效的

使用
将允许您确保引用的是实例变量而不是参数,如果它们共享相同的名称

这通常被认为是实例方法和构造函数的最佳实践


否则,您的两种方法是等效的

实例变量应使用
关键字进行访问,它消除了本地可验证文件同名的混淆。这将忽略以下类型的问题-

public void set_volume_v2(int width, int height, int depth) {
    width = width;
    height = height;
    depth = depth;
}
此处将使用本地veriable以获得更多偏好

public void set_volume_v2(int width, int height, int depth) {
    this.width = width;
    this.height = height;
    this.depth = depth;
}

并且this.width确保是实例变量,width是局部变量。

实例变量应该使用
这个
关键字访问,它消除了局部变量同名的混淆。这将忽略以下类型的问题-

public void set_volume_v2(int width, int height, int depth) {
    width = width;
    height = height;
    depth = depth;
}
此处将使用本地veriable以获得更多偏好

public void set_volume_v2(int width, int height, int depth) {
    this.width = width;
    this.height = height;
    this.depth = depth;
}

而this.width确保是实例变量,width是局部变量。

最好的方法是始终使用
this

 this.width = a;
这样我们就不会混淆参数名和实例变量

一个容易混淆的小例子是

  public void set_volume_v2(int width) {
        width = width;
    }

因此,当您编写
this.width
时,我们要明确它是实例变量

最好的方法是始终使用

 this.width = a;
这样我们就不会混淆参数名和实例变量

一个容易混淆的小例子是

  public void set_volume_v2(int width) {
        width = width;
    }

因此,当您编写
this.width
时,我们要明确它是实例变量

两个都可以。当字段名被参数隐藏时,通常使用
this
关键字。在您的情况下,两者都是相同的,因为在解析局部变量和实例变量时,不会因为它们的名称不同而产生歧义!有时最好在一个冗长的方法中使用
这个
,以便更清楚地识别实例变量和局部变量。在发布前搜索:,@Shiva这3个链接不回答它。顺便说一句,这是一个很好的尝试。我得到的三个答案都是相同的,他们没有意见不同。所以,这个问题在我看来绝对不是一个基于观点的问题。两者都可以。当字段名被参数隐藏时,通常使用
this
关键字。在您的情况下,两者都是相同的,因为在解析局部变量和实例变量时,不会因为它们的名称不同而产生歧义!有时最好在一个冗长的方法中使用
这个
,以便更清楚地识别实例变量和局部变量。在发布前搜索:,@Shiva这3个链接不回答它。顺便说一句,这是一个很好的尝试。我得到的三个答案都是相同的,他们没有意见不同。因此,在我看来,这个问题绝不是一个基于意见的问题。在特定情况下,您只需要
this
关键字。引用一个字段而不引用它是完全正确的。@Bart这就是原因。我们应该习惯于使用
this
,因此您不需要记住任何情况:)您只需要在特定情况下使用
this
关键字。引用一个字段而不引用它是完全正确的。@Bart这就是原因。我们应该习惯于使用
这个
,所以你不需要记住任何情况:)@downvoter你能评论一下我的错误吗?这就是为什么所有参数都应该是最终的。如果width参数是final,则示例将出现编译错误。不是downvoter顺便说一句@downvoter你能评论一下我的错误吗?这就是为什么所有参数都应该是最终的。如果width参数是final,则示例将出现编译错误。顺便说一句,不是唐宁街。