2017-11-16 1 views
-3

毎回クラスが初期化され、メソッドが静的ではない()か、このクラスのメソッドが静的で、それらの使用がClass.method()のような場合、パフォーマンスの差はどれくらいですか?Java - 静的と非静的のパフォーマンスの差

コード例:1がより速くなるでしょう。

//File Class1 
public class Class1{ 
    public static void myMethod(){ 
     System.out.println("Static method, usage: Class1.myMethod();") 
    } 
} 

//File Class2 
public class Class2{ 
    public void myNonStaticMethod(){ 
     System.out.println("Non static method, usage: Class2 class2 = new Class2(); class2.myNonStaticMethod();") 
    } 
} 

?静的またはクラス初期化のメソッド?

PS。申し訳ありませんが、もし私が間違いをしました。英語は私の主要言語ではありません。 :P

+4

実際の問題はありません。一方を選択することのポイントは効率性ではなく、目的と要件です。 – Stultuske

+0

パフォーマンスに関して私はどちらを使うのが良いですか?私はいくつかのケースでは "スーパー"は必要ないので、静的が速ければ、私はそこで使うことができますが、それは良いですか? –

+0

なぜ、それぞれの呼び出しで新しいクラスインスタンス「Class2」を作成したいのですか?メソッドはそのクラスのインスタンスにどのように関連していますか?メソッドをオーバーライドできるようにしますか? – Thomas

答えて

0

それはあなたが達成しようとしていることだけに依存します。メソッドや変数を静的にすることは、必ずしも親クラスのインスタンスを作成しなくてもアクセスできるようにしたい場合です。例:

体格指数を計算するためのクラスを持つことができます。そのクラス内ではキログラムをポンドに変換するメソッドxを使用できます。今ではキログラムからポンドへの変換を行うことはできますが、体格指数は計算したくありません。この種のシナリオでは、メソッドxを静的にすることが理にかなっているため、xの新しいインスタンスを作成せずにキログラムからポンドに変換できます。

実際にはパフォーマンスに関してではなく、使い方についてです。

+0

ありがとうございました!ですから、APIのようなものを作成している場合、最良の選択肢は静的メソッドを作ることです。 しかし、PlayerData(場所、名前などのすべてのプレーヤデータを保持する)を作成するときは、スタティックなどのクラスコンストラクタinstadを使用して、それらをpublicにして、初期化されたクラスを他のクラスにエクスポートする方が良いこのすべてのデータを別々に収集するにはhashmap? –

+0

場所、名前のようなすべてのプレーヤーデータを保持する 'PlayerData'のようなもの。はい、新しいインスタンスを作成する必要があります。しかし、基本的に静的メソッド/変数は、インスタンス変数のようなものに依存しないときに使用されます –

関連する問題