Java規約のセクション10.2では、オブジェクトの代わりにクラス名を使用して静的変数MyClass.variable1
またはメソッドを使用することを推奨しています。MyClass.methodName1()
MyClass Obj1 = new MyClass();
Obj1.variable1;
Obj1.methodName1();
この背後にある理論的根拠の説明はありませんが、これはメモリの使用と関係があると思われます。誰かがこれを説明できれば素晴らしいでしょう。
Java規約のセクション10.2では、オブジェクトの代わりにクラス名を使用して静的変数MyClass.variable1
またはメソッドを使用することを推奨しています。MyClass.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が静的であるかどうかを知るために、ソースコードを読み取る必要があります。
静的変数アクセスにオブジェクトを使用する場合、コンパイラはそれをClass Name
only に置き換えます。
そう
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.
これは、publicstaticメソッドまたはpublicstatic変数がオブジェクトではなく、クラスに関連付けられているためです。言語設計者はオブジェクトに対してそれらを呼び出す柔軟性を与えていますが、コードの読者は、それらが静的変数/メソッドであるかインスタンスメソッド/変数であるかを混乱させるでしょう。したがって、読みやすさは、開発者にクラスでそれらを呼び出すように依頼する背後にある理由です。
クラス名表記を使用するか、オブジェクトを使用してアクセスすることにより、静的メンバーにアクセスできます。非常に紛らわしいため、オブジェクト表記の使用はお勧めしません。
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());
}
}
静的メソッドと変数がクラス名表記で呼び出されると、より明確になります。
これは、public
static
メソッドと変数に関係しています。これらのメソッド/変数は、クラスのインスタンスではなく、それぞれのクラスに関連付けられているため、これらのメソッドまたは変数を次のように参照すると便利ですclassName.methodName()
。className.variableName
「インスタンスとクラス メンバーについて」は、 static キーワードを使用して、クラスのインスタンスではなくクラスに属するフィールドとメソッドを作成する方法を学ぶための出発点として適しています。
static 変数はクラスに属し、オブジェクト (インスタンス) には属しません。静的変数はクラス名で直接アクセスでき、オブジェクトは必要ありません。クラスごとに同じデータの変数を持つ必要がないため、スペースを節約できます。
Syntax : <class-name>.<variable-name>
public class AA{
static int a =10;
}
あなたは呼び出すことができます
System.out.println(AA.a);
System.out.println(aObject.a);
2 つの呼び出しに違いはありませんが、より読みやすくするためにコーディング規約を維持してください