我在回答this answer时问这个问题。
我正在使用Variable
和Var
的示例 - 修改请注意我在问{i}}或Var
的使用位置:
Variable
或
Class NewClass {
private String Variable = "";
Public Class (String Var)
{
NewClass.Var = Variable;
}
}
哪些是类变量,这与参数有何不同,哪些在哪里?
修改
我应该补充一下,因为这是在链接的答案中,但似乎人们没有看过它:
因为函数的参数特别令人困惑 与类变量具有完全相同的名称,但是Patient.ptNo 与参数ptNo不是同一个变量。 (其实, Patient.ptNo应该是this.ptNo,因为它属于这个 该类的特定实例。 Patient.ptNo会指单个 患者类型的所有对象共有的值。)
所以当人们说 private String Variable = "";
Public Class (String Variable)
{
NewClass.Variable = Var; // OR WHATEVER OTHER COMBINATIONS IT MAY BE.
}
}
时,我仍然对什么是什么感到困惑。
答案 0 :(得分: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
表示当前对象变量。
尝试阅读命名约定。
答案 1 :(得分: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
应该很小而不是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;
答案 2 :(得分: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;
}
}
对参数使用与类变量相同名称的约定只意味着您不必在变量名称上提出无意义的变体。
答案 3 :(得分:1)
class NewClass {
private String variable = "";
public NewClass (String variable)
{
this.variable = variable;
}
}
this.variable指当前对象实例。 请遵循命名惯例