95

教科書に書かれている文章を読んでいたところ、何を言っているのかよくわかりません。基本的に、静的メソッドまたはクラスメソッドには「modifier」キーワードstaticが含まれていると言っています。しかし、それが何を意味するのか本当にわかりませんか?

誰かが静的メソッドまたはクラスメソッドとは何かを本当に簡単な言葉で説明してもらえますか?

また、インスタンスメソッドとは何かについて簡単に説明してもらえますか?

これは彼らが教科書で私に与えたものです:

静的修飾子の有無には、重要な実際的な影響があります。パブリッククラスメソッドは、Javaがそれが属するクラスの定義を処理するとすぐに呼び出され、実行される場合があります。これは、インスタンスメソッドには当てはまりません。パブリックインスタンスメソッドを呼び出して実行する前に、それが属するクラスのインスタンスを作成する必要があります。パブリッククラスメソッドを使用するには、クラスが必要です。一方、パブリックインスタンスメソッドを使用する前に、クラスのインスタンスが必要です。

別のメソッドの定義内で静的メソッドが呼び出される方法は、2つのメソッドが同じクラスに属しているかどうかによって異なります。上記の例では、factorialとmainはどちらもMainClassクラスのメソッドです。その結果、mainの定義でfactorialを呼び出すと、メソッド名「factorial」が参照されるだけです。

4

11 に答える 11

177

Javaの基本的なパラダイムは、クラスを作成し、それらのクラスをインスタンス化することです。インスタンス化されたオブジェクト(クラスのインスタンス)には、それらの動作に影響を与える属性(メンバー変数)が関連付けられています。インスタンスでメソッドが実行されると、これらの変数が参照されます。

ただし、特定のタイプのすべてのオブジェクトは、メンバー変数にまったく依存しない動作をする可能性があります。これらのメソッドは静的にするのが最適です。静的であるため、メソッドを実行するためにクラスのインスタンスは必要ありません。

これを実行して、静的メソッドを実行できます。

MyClass.staticMethod();  // Simply refers to the class's static code

ただし、非静的メソッドを実行するには、次のことを行う必要があります。

MyClass obj = new MyClass();  //Create an instance
obj.nonstaticMethod();  // Refer to the instance's class's code

より深いレベルでは、コンパイラーは、クラスをまとめるときに、メソッドへのポインターを収集し、それらをクラスにアタッチします。これらのメソッドが実行されると、ポインターに従い、遠端でコードが実行されます。クラスがインスタンス化される場合、作成されたオブジェクトには、継承階層内のその特定のクラスに対して呼び出されるメソッドを指す「仮想メソッドテーブル」へのポインターが含まれます。ただし、メソッドが静的である場合、「仮想メソッドテーブル」は必要ありません。そのメソッドへのすべての呼び出しは、メモリ内のまったく同じ場所に移動して、まったく同じコードを実行します。そのため、高性能システムでは、インスタンス変数に依存しない場合は静的メソッドを使用することをお勧めします。

于 2012-08-16T18:18:50.693 に答える
20

static として宣言されていないメソッドと変数は、インスタンス メソッドとインスタンス変数と呼ばれます。インスタンス メソッドと変数を参照するには、最初にクラスをインスタンス化する必要があります。つまり、最初にそのクラスのオブジェクトを作成する必要があります。静的の場合、クラスをインスタンス化する必要はありません。ピリオド記号を使用して、クラス名でメソッドと変数にアクセスできます。 (。)

例えば:

Person.staticMethod();           //accessing static method.

非静的メソッドの場合、クラスをインスタンス化する必要があります。

Person person1 = new Person();   //instantiating
person1.nonStaticMethod();       //accessing non-static method.
于 2015-07-03T11:24:26.887 に答える
12

静的メソッドとインスタンス メソッドの違い

  1. インスタンスメソッドは、呼び出す前にそのクラスのオブジェクトを作成する必要があるメソッドです。静的メソッドは、クラスのオブジェクトを作成せずに呼び出すことができる Java のメソッドです。

  2. static メソッドは static キーワードで宣言されています。インスタンス メソッドに static キーワードがありません。

  3. 静的メソッドとは、クラスの単一のコピーとして存在することを意味します。ただし、インスタンス メソッドは、そのクラス用に作成されたインスタンスの数に応じて、複数のコピーとして存在します。

  4. 静的メソッドは、クラス参照を使用して呼び出すことができます。インスタンスまたは非静的メソッドは、オブジェクト参照を使用して呼び出されます。

  5. 静的メソッドは、インスタンス メソッドとインスタンス変数に直接アクセスできません。インスタンス メソッドは、静的変数と静的メソッドに直接アクセスできます。

参考:geeksforgeeks

于 2017-04-02T18:17:54.850 に答える
8

静的メソッド、変数は、オブジェクト インスタンスだけでなく、クラス全体に属します。静的メソッド、変数は、クラスの特定のインスタンスではなく、クラス全体に関連付けられます。各オブジェクトは、静的メソッド、変数の共通コピーを共有します。クラスから作成されたオブジェクトの数に関係なく、クラスごとに 1 つのコピーしかありません。

于 2012-08-16T18:24:12.727 に答える
4

インスタンスメソッド=> 特定のクラスの特定のインスタンスで呼び出されます。メソッドは、呼び出されたクラスを知りたがっています。それが起こる方法は、「this」と呼ばれる目に見えないパラメーターです。「this」の内部には、すでに値が設定されているインスタンス クラスのメンバーがあります。「これ」は変数ではありません。これは値であり、変更することはできず、値は呼び出しの受信者への参照です。 例:テレビ (実際の番組) を修理するために、repairmen (インスタンス メソッド) を呼び出します。ツール('this' パラメータ) が付属しています。彼には、テレビの修理に必要な特定のツールが付属しており、他のものも修理できます。

静的メソッドでは=> 「これ」などはありません。 例:同じ修理工(静的メソッド)。彼に電話するときは、電話する修理工 (電気技師など) を指定する必要があります。そして、彼はあなたのテレビだけを修理しに来ます。しかし、彼は他のことを修正するためのツールを持っていません (「this」パラメーターはありません)。

静的メソッドは通常、クラスのインスタンス (「this」から) からのデータを必要とせず、引数のみを使用して意図した目的を実行できる操作に役立ちます。

于 2016-08-22T15:35:07.303 に答える
2

オブジェクトの動作は、そのクラスの変数とメソッドに依存します。クラスを作成するときは、そのオブジェクトを作成します。静的メソッドの場合、静的メソッドはすべてのオブジェクトが同じコピーを持つことを意味するため、必要ありません。したがって、オブジェクトは必要ありません。例えば:

Myclass.get();

インスタンス メソッドでは、各オブジェクトの動作が異なるため、オブジェクト インスタンスを使用してメソッドを呼び出す必要があります。例えば:

Myclass x = new Myclass();
x.get();
于 2016-04-19T05:35:49.190 に答える
-2

関数の前に配置された static 修飾子は、その関数のコピーが 1 つだけ存在することを意味します。static 修飾子が関数の前に配置されていない場合、そのクラスのすべてのオブジェクトまたはインスタンスで、その関数の新しいコピーが作成されます。:) 変数の場合も同様です。

于 2012-08-16T18:20:13.687 に答える