1

我问这个是为了回应这个答案

我正在使用VariableVar-编辑请注意我正在询问在哪里使用VarVariable

Class NewClass {

    private  String Variable = "";

    Public Class (String Var)
    {
        NewClass.Var = Variable;
    }
}

或者

    private  String Variable = "";

    Public Class (String Variable)
    {
        NewClass.Variable = Var; // OR WHATEVER OTHER COMBINATIONS IT MAY BE.
    }
}

哪些是类变量,这与参数有何不同,哪些在哪里?

编辑

我应该补充一下,因为这是在链接的答案中,但似乎人们没有看过它:

这特别令人困惑,因为函数的参数与类变量的名称完全相同,但 Patient.ptNo 与参数 ptNo 不是同一个变量。(实际上,Patient.ptNo 应该是 this.ptNo,因为它属于该类的这个特定实例。Patient.ptNo 将引用对所有 Patient 类型的对象通用的单个值。)

所以当人们说this.Variable = Variable我仍然对什么是什么感到困惑时。

4

4 回答 4

3

使用变量作为构造函数参数没有问题,因为它是构造函数的局部变量。

class NewClass {

    private  String Variable = "";

    Public NewClass (String Variable)
    {
        this.Variable = Variable;
    }
}

                       or

class NewClass {

    private  String Variable = "";

    Public NewClass (String Var)
    {
        this.Variable = Var;
    }
}

两者都很好。

this.Variable表示当前对象变量。

尝试阅读命名约定。

于 2013-11-04T07:27:05.517 回答
2

this.Variable将引用Variable类的字段,并且只是Variable传递给构造函数的参数。

private String Variable = "";- 这不是静态的

因此,您的构造函数看起来很有趣

public NewClass(String Var/iable) {
    this.Variable = Variable; // this must be used, where this.Variable is the class variable and just Variable is the constructor parameter.
}

注意:您使用了ClassName.fieldName仅允许类的静态字段使用的。它应该是this.fieldName,如果Variable不是static。此外,Public不应大写,构造函数名称应为类名称。关键字class应该是 small 而不是Class

如果您想使用您在代码中放入的方式,Variable则类中的 应该是静态的。像这样的东西

private static String Variable = "";
public NewClass(String Var/iable) {
    NewClass.Variable = Variable; // Since Variable is static now, you use the classname to access the static field.
}

编辑:使用相同的名称是绝对可以的,只要你能区分它们。在这种情况下,this.Variable这意味着类变量,并且只是Variable引用在创建此类的实例时传递给构造函数的参数。

class Variable = Variable passed to the constructor; // This is what the below statement means
this.Variable = Variable;
于 2013-11-04T07:17:48.783 回答
2

类变量是类定义为static字段的变量,参数是方法定义的变量。就是这么简单。还有实例变量(在类级别定义但不是静态的)和局部变量(在方法中定义,但不是作为输入参数)。

public class Foo {
    private static String someName; // this is a class variable
    private String someOtherName; // this is an instance variable

    public Foo(String anotherName) { // anotherName is a constructor parameter
        int yetAnother = 1; // yetAnother is a local variable
        someOtherName = "foo"; // assign a value to someOtherName
    }

这两个变量是完全不同的。他们甚至不必具有相同的类型!您的示例中唯一的复杂之处是两个变量恰好具有相同的名称。发生这种情况时,编译器将优先考虑构造函数参数(或方法参数或局部变量)而不是类变量。为了“强制”它使用类变量,你需要在它前面加上this..

要记住的是,这两个变量是完全独立的,无论它们的名称如何。

所以这:

class NewClass {

    private  String Variable = "";

    Public NewClass (String Variable)
    {
        NewClass.Variable = Variable;
    }
}

与此完全相同:

class NewClass {

    private  String Variable = "";

    Public NewClass (String someOtherVariableName)
    {
        NewClass.Variable = someOtherVariableName;
    }
}

...它也与此完全相同:

class NewClass {

    private  String Variable = "";

    Public NewClass (String Var)
    {
        NewClass.Variable = Var;
    }
}

对参数使用与类变量相同的名称的约定只是意味着您不必在变量名称上提出无意义的变体。

于 2013-11-04T07:30:00.027 回答
1
class NewClass {

private  String variable = "";

public NewClass (String variable)
{
    this.variable = variable;
}
}

this.variable 引用当前对象实例。请遵循命名约定

于 2013-11-04T07:33:10.413 回答