Java约定第10.2节建议使用类名而不是对象来使用静态变量或方法,即MyClass.variable1
或MyClass.methodName1()
而不是
MyClass Obj1 = new MyClass();
Obj1.variable1;
Obj1.methodName1();
没有解释这背后的基本原理,虽然我怀疑这与内存使用有关。如果有人能够解释这一点会很棒。
答案 0 :(得分:8)
我猜你的意思是“对于静态方法和变量”。
内存没有区别,当然除非您为调用方法创建实例。约定不是为了提高内存效率,而是为了编码效率,这与代码的可读性直接相关。
理由是通过阅读
MyClass.methodName1()
您知道这是一种静态方法,并且无法使用或更改您的Obj1
实例。
如果你写
obj1.variable1; // note the "o" instead of "O", please do follow conventions
然后读者必须阅读您的源代码,以了解variable1是否为静态。
答案 1 :(得分:3)
如果使用object进行静态变量访问,则编译器将仅用Class Name
替换它。
所以
MyClass Obj1 = new MyClass();
Obj1.variable1;
Obj1.methodName1();
与
相同MyClass.variable1;
MyClass.methodName1();
Now Why to differentiate? Answer is - It is for better reading If someone see method being called on Class then he immediately come to know that it is static method. Also it prevents generation of one additional object to access the method.
答案 2 :(得分:0)
这与public
static
方法和变量有关。由于这些方法/变量与相应的类而不是类的实例相关联,因此将这些方法或变量引用为className.methodName()
或className.variableName
"Understanding Instance and Class Members"是了解使用static关键字创建属于类的字段和方法而不是类的实例的好起点
答案 3 :(得分:0)
这只是因为,公共静态方法或公共静态变量不与任何对象相关联,而是与类相关联。尽管语言设计者已经灵活地在对象上调用它们,但是代码的读者会感到困惑,无论这些是静态变量/方法还是实例方法/变量。因此,可读性是要求开发人员在类上调用它们的原因。
答案 4 :(得分:0)
您可以使用类名表示法或使用对象访问来访问静态成员。不建议使用对象表示法,因为它可能非常混乱。
public class TheClass {
public static final staticValue = 10;
public static void staticMethod() {
System.out.println("Hello from static method");
}
public static void main(String ... args) {
TheClass obj = null;
// This is valid
System.out.println(obj.staticValue);
// And this too
System.out.println(obj.staticMethod());
// And this is also valid
System.out.println(((TheClass)null).staticValue);
// And this too
System.out.println(((TheClass)null).staticMethod());
}
}
如果使用类名表示法调用静态方法和变量,那就更清楚了。
答案 5 :(得分:-1)
静态变量属于类而不属于对象(实例)。 静态变量可以由类名直接访问,不需要任何对象。 它节省了空间,而不必为每个类的相同数据提供变量。
Syntax : <class-name>.<variable-name>
public class AA{
static int a =10;
}
您可以致电
System.out.println(AA.a);
System.out.println(aObject.a);
两个调用之间没有区别,但保持编码约定以保持更多的readbale