1

私はhttp://www.oracle.com/technetwork/java/javase/documentation/codeconventions-137265.html#587からJavaのコード規約を読んでいました。

その中で、クラス変数またはメソッドにアクセスするためにオブジェクトを使用することは避け、代わりにクラス名を使用する必要があると彼らは述べています。

クラス(静的)変数またはメソッドにアクセスするためにオブジェクトを使用することは避けてください。代わりにクラス名を使用してください。例えば:

classMethod();             //OK 
AClass.classMethod();      //OK
anObject.classMethod();    //AVOID!

パフォーマンスやその他の点で、これには特別な理由がありますか?

4

5 に答える 5

4

クラス変数とは、静的変数を意味すると思います。

読者を混乱させるため、インスタンス変数を介した静的変数/メソッドの使用は避ける必要があります。インスタンスを使用してインスタンス変数にアクセスすることしかできないため、インスタンスを介して静的メソッドを呼び出すコードを読み取ると、何が起こっているかについて読者を混乱させる可能性があります。

Thread.sleep静的メソッドである、を使用してこのケースをイメージします。

Thread.sleep(1000);

メソッドは静的であり、クラス名を介して呼び出しているため、読者は、現在のスレッドをスリープ状態にする効果があると推測するのが直感的です。

これを行った場合:

Thread t = new Thread(...);
t.sleep(1000);

今、どのスレッドがスリープ状態になっていますか?現在のものは「明らかに」。スリープがどのように機能するかを知らない人は、子スレッドがどういうわけかスリープ状態になっていると思うかもしれません。

于 2012-06-28T12:57:54.977 に答える
3

何をしたいかによると思います。私は常にクラス名を使用して静的変数にアクセスします。静的であるため、どのように行うかは重要ではありませんが、メモリ使用量を節約できます。

非静的変数については、常にオブジェクトを使用してください。

于 2012-06-28T12:55:43.957 に答える
3

生成されるバイトコードに関しては何の違いもないので、パフォーマンスは問題ではありません。

問題は、変数を使用して静的メンバーにアクセスすることは、変数によって保持されている参照が実際にアクセスされているものにとって重要であるかのように見えることです。しかし、そうではありません!実際、anObjectどこnullにいても、は得られませんNPEが、単に。を呼び出しますclassMethod

したがって、原則は単純です。静的メンバーにアクセスするときは、実際に行われているアクセスに関係のない情報(この場合は変数名)に言及しないようにします。

于 2012-06-28T12:59:16.193 に答える
1

パフォーマンスについてはわかりませんが、コードを調べている別の開発者は、クラス名と一緒に使用すると、静的変数/メソッドを一目で知ることができます。

ただし、コンパイラが変数を使用して異なるコードを提供することはないと思います。

于 2012-06-28T12:56:52.137 に答える
1

その理由は。

1.変数またはメソッドが実際には静的であることを示します。

2.また、オブジェクトがどのクラスを参照しているかを確認しました。追加費用が発生します。

于 2012-06-28T12:56:57.257 に答える