ProgrammingJava開発者

Javaにおけるローカル変数、インスタンス変数、静的変数の違いを説明してください。それらの使用の特徴はどのようにエラーを引き起こす可能性がありますか?

Hintsage AIアシスタントで面接を突破

答え

ローカル変数 — メソッドまたはブロックの本文内で宣言され、存在します。自動的には初期化されません。初期化されていないローカル変数の使用はコンパイルエラーを引き起こします。

インスタンス変数(staticでないフィールド) — 各オブジェクトに個別に属し、オブジェクトのインスタンスが作成されるときに初期化されます。

静的変数(staticフィールド) — クラスのすべてのインスタンスに共通であり、クラス全体で唯一のインスタンスとして存在します。一つのオブジェクトでの変更は、そのクラスのすべての他のオブジェクトに見えます。

コード例
public class Example { private int instanceVar; // インスタンス変数 private static int staticVar; // 静的変数 public void foo() { int localVar = 0; // ローカル変数 } }

知識を試す質問

静的変数はプライベートにすることができ、異なるインスタンス間でどのように見えるのですか?

答え: はい、静的変数はプライベートにすることができます。変更はクラスのすべてのインスタンスに反映されます。これは、静的変数がオブジェクトではなくクラスに属しているためです。

public class MyClass { private static int counter = 0; public MyClass() { counter++; } public static int getCounter() { return counter; } }

MyClassの複数のインスタンスを作成すると、同じカウンターが増加します。

このテーマに関する知らなかったための実際のエラーの例


物語

エンタープライズアプリケーションにおいて、開発者は誤ってユーザーの状態を静的フィールドに配置しました。これにより、ユーザーはマルチユーザー環境で互いのデータを「見る」ことができました。


物語

マルチスレッドアプリケーションの作成中に、インスタンス変数が適切な同期なしに静的メソッド内で使用されました。これによりデータ競合と予期しない結果が生じました。


物語

開発者は、クラスフィールドの代わりにローカル変数を使用して中間結果を保持することに決めました。変数はメソッドを出ると破棄され、プログラムは常にnullを返しましたが、これはテスト時にすぐには発見されませんでした。