我对Java代码中的变量声明感到困惑。
我读过。。。不要试图使用全局变量声明。
不要使用这样的东西:
package cls;
public class test {
private String var;
public someMethod(){ ... }
}
使用?
package cls;
public class test {
public someMethod(){
String var = null;
}
}
我不知道哪种方式是正确的。。。。
这完全取决于您需要什么。
然而,您的第一个示例不是全局变量,而是一个实例变量。
变量的作用域应尽可能小。这使得代码更容易推理。
实例变量是OOP的核心——类(对象(的存在是为了封装对象状态,以及对该状态进行操作的方法。例如,Person
类可能有名字和姓氏实例变量:
public class Person {
private String firstName;
private String lastName;
// Plus getters and setters for each.
}
这允许实例方法直接访问名字和姓氏变量,而不必在所有需要它们的方法之间传递它们。
第二个例子是一个局部变量。它只在声明的方法中可见。对它的引用可以传递给其他方法。
两者都是正确的。这两者都不是全局变量。第一个是类字段。它对于您创建的类的每个实例都是唯一的。类字段(即变量(一直保留在类的实例中,直到类本身被删除。
第二个是方法范围变量。它只是用于临时目的,以执行方法工作所需的计算,一旦方法中的代码完成,变量就会消失。
您可以将每个用于不同的目的。例如,如果您正在编写Car类,则可能会有一个SteeringWheel和Brake的类字段。但是,如果你有一种计算每加仑平均英里数的方法,你可以创建一个方法范围的变量来帮助执行计算。
在Java中不可能像在C等语言中那样拥有真正的"全局"变量。Java迫使您以面向对象的方式构建程序。
在上面的示例中,如果整个test
对象都需要var
,并且存储起来很重要,那么您将使用第一个示例。如果var
仅在someMethod
中是必需的,并且test
对象存储它并不重要,则使用第二个示例。
请注意,即使使用第一个示例,var
也被封装在test
对象中,因此它根本不是真正的"全局",只是可能稍微与test
的成员函数(这是实例/成员变量的全部点(有关。
Java中最接近"全局"数据的东西是:
public class GlobalVars {
public static int globalInt;
}
您可以在整个代码中以GlobalVars.globalInt
的形式访问globalInt
,而无需创建GlobalVars
的实例。