Java约定引用方法和变量

Java约定的10.2节建议使用类名而不是对象来使用静态变量或方法,即MyClass.variable1MyClass.methodName1()而不是

 MyClass Obj1 = new MyClass(); Obj1.variable1; Obj1.methodName1(); 

没有解释这背后的基本原理,虽然我怀疑这与内存使用有关。 如果有人能解释这一点会很棒。

我猜你的意思是“对于静态方法和变量”。

关于内存没有区别,当然除非您为调用方法创建实例。 约定不是为了提高内存效率,而是为了编码效率,这与代码的可读性直接相关。

理由是通过阅读

 MyClass.methodName1() 

你知道它是一个静态方法,它不能使用或改变你的Obj1实例。

如果你写

 obj1.variable1; // note the "o" instead of "O", please do follow conventions 

那么读者必须阅读你的源代码,以了解variable1是否是静态的。

如果使用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.

这与public static方法和变量有关。 由于这些方法/变量与相应的类而不是类的实例相关联,因此将这些方法或变量引用为className.methodName()className.variableName是很好的。

“了解实例和类成员”将是一个很好的起点,可以了解如何使用static关键字创建属于类的字段和方法,而不是类的实例

这只是因为,公共静态方法或公共静态变量不与任何对象相关联,而是与类相关联。 尽管语言设计者已经灵活地在对象上调用它们,但是代码的读者会感到困惑,无论这些是静态变量/方法还是实例方法/变量。 因此,可读性是要求开发人员在类上调用它们的原因。

您可以使用类名表示法或使用对象访问来访问静态成员。 不建议使用对象表示法,因为它可能非常混乱。

 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()); } } 

如果使用类名表示法调用静态方法和变量,则更加清晰。

静态变量属于类而不属于对象(实例)。 静态变量可以由类名直接访问,不需要任何对象。 它节省了空间,而不必为每个类的相同数据提供变量。

 Syntax : . public class AA{ static int a =10; } 

你可以打电话

 System.out.println(AA.a); System.out.println(aObject.a); 

两个调用之间没有区别,但保持编码约定以保持更多的readbale