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

インスタンスメソッド

インスタンスメソッドは、呼び出される前にクラスのオブジェクトを作成する必要があるメソッドです。インスタンスメソッドを呼び出すには、クラスメソッドを定義したクラスのオブジェクトを作成する必要があります。

public void geek(文字列名)
{
//実行するコード….
}
//戻り値の型は、int、float、またはユーザー定義のデータ型です。

メモリの割り当て: これらのメソッド自体はヒープの永続生成スペースに格納されますが、パラメーター(それらに渡される引数)とそのローカル変数および返される値はスタックに割り当てられます。それらは、それらが存在する同じクラス内で、または同じパッケージまたは他のパッケージで定義された異なるクラスから呼び出すことができ、目的のインスタンスメソッドに提供されるアクセスタイプに依存します。

重要ポイント

・インスタンスメソッドは、クラスではなくクラスのオブジェクトに属します。つまり、クラスのオブジェクトを作成した後に呼び出すことができます。

・クラスから作成された個々のオブジェクトには、そのクラスのインスタンスメソッドの独自のコピーがあります。

・インスタンスメソッドは、仮想メソッドを使用していても、インスタンスごとに保存されません。それらは単一のメモリロケーションに格納され、呼び出し時にthisポインタが渡されるため、どのオブジェクトに属しているかを「知る」だけです。

・これらは実行時に動的バインディングを使用して解決されるため、オーバーライドできます。

サンプルコード

出力結果

GeeksforGeeks

静的メソッド

静的メソッドは、クラスのオブジェクトを作成せずに呼び出すことができるJavaのメソッドです。それらは、クラス名自体またはそのクラスのオブジェクトへの参照によって参照されます。

メモリ割り当てそれらは、そのクラスのオブジェクトではなく、それらが存在するクラスに関連付けられているため、ヒープの永続生成スペースに格納されます。しかし、それらのローカル変数とそれらに渡された引数はスタックに格納されます。それらはクラスに属しているため、クラスのオブジェクトを作成せずに呼び出すことができます。

重要なポイント

静的メソッドは、それらが存在するクラスに関連付けられています。つまり、クラスのインスタンス(ClassName.methodName(args))を作成しなくても呼び出すことができます。それらは、同じクラスから作成されたすべてのオブジェクト間で共有されることを目的として設計されています。

静的メソッドはオーバーライドできません。ただし、コンパイル時にコンパイラーによって静的バインディングを使用して解決されるため、オーバーロードされる可能性があります。

出力結果

Vaibhav
モヒト

注:クラスで定義された静的変数とその値(プリミティブまたは参照)は、メモリのPermGenスペースに格納されます。

静的変数がオブジェクトを参照している場合はどうなりますか?

static int i = 1;
静的オブジェクトobj = new Object();

最初の行では、値1がPermGenセクションに格納されます。2行目では、参照objはPermGenセクションに格納され、参照するオブジェクトはヒープセクションに格納されます。

静的メソッドを使用するのはいつですか?

同じクラスのすべてのインスタンスで共有できるコードがある場合、コードのその部分を静的メソッドに配置します。
それらは基本的にクラスの静的フィールドにアクセスするために使用されます。

インスタンスメソッドと静的メソッド

・インスタンスメソッドは、インスタンスメソッドとインスタンス変数に直接アクセスできます。

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

・静的メソッドは、静的変数と静的メソッドに直接アクセスできます。

・静的メソッドはインスタンスメソッドとインスタンス変数に直接アクセスできません。オブジェクトへの参照を使用する必要があります。また、「this」のインスタンスがないため、静的メソッドはこのキーワードを使用できません。

Writer

Ryotin

現役フリーランスエンジニアです。使ってるエージェントはフライテック!得意言語はJava。月収は75万円。SESのフリーランスではこれ以上稼ぐのは厳しそう...とはいってもサラリーマンの時より倍の収入だから家族も喜んでるけどね!

最新の案件情報