ここで簡単な質問があります。次のように、メインクラスで[宣言]されたオブジェクト内で変数を宣言すると:
public static int number;
(通常、私は次のように宣言します:
private int number;
)
メインクラスでも[宣言]された別のオブジェクトで使用できますか? ところで、私はセキュリティ ATM を気にしません。何かを機能させたいだけで、保護は気にしません)
ここで簡単な質問があります。次のように、メインクラスで[宣言]されたオブジェクト内で変数を宣言すると:
public static int number;
(通常、私は次のように宣言します:
private int number;
)
メインクラスでも[宣言]された別のオブジェクトで使用できますか? ところで、私はセキュリティ ATM を気にしません。何かを機能させたいだけで、保護は気にしません)
Java言語仕様からの引用は次のとおりです。
static
フィールドフィールドが宣言されている場合、
static
最終的に作成されるクラスのインスタンスの数 (場合によってはゼロ) に関係なく、フィールドの具体化は 1 つだけ存在します。クラス変数static
と呼ばれることもあるフィールドは、クラスが初期化されるときに具体化されます。宣言されていないフィールド
static
(非static
フィールドと呼ばれることもあります) は、インスタンス変数と呼ばれます。クラスの新しいインスタンスが作成されるたびに、そのインスタンスに関連付けられた新しい変数が、そのクラスまたはそのスーパークラスで宣言されたすべてのインスタンス変数に対して作成されます。[サンプルプログラムは以下のとおりです...]
つまり、static
フィールドはクラス変数です。クラスのインスタンスではなく、クラスに属します。ある意味では、フィールドをクラスのインスタンスによって共有される変数と考えることができますが、 メソッドもクラスに属しているように、フィールドをクラスに属しているstatic
と考える方がはるかに一貫性があります。static
static
それらはクラスに属しているため、そのクラスのインスタンスにアクセスする必要はありません (適切な可視性を前提としています)。実際static
、型式ではなくインスタンスを介してメンバーにアクセスすることは、プログラミングの悪い方法と見なされています。
ここには実際には 2 つの問題があります。内部クラスのコンテキストでのパブリックとプライベート、および静的変数です。
パート1:
staticは、その変数にアクセスするためにクラスのインスタンスが必要ないことを意味します。次のようなコードがあるとします。
class MyClass {
public static String message = "Hello, World!";
}
次の方法でプロパティにアクセスできます。
System.out.println(MyClass.message);
staticキーワードを削除する場合は、代わりに次のようにします。
System.out.println(new MyClass().message);
newキーワードによって作成されたクラスのコピーであるinstanceのコンテキストでプロパティにアクセスしています。
パート2:
同じ Java ファイルで 2 つのクラスを定義する場合、そのうちの 1 つは内部クラスでなければなりません。内部クラスは、プロパティと同様にstaticキーワードを持つことができます。staticの場合、個別に使用できます。静的でない場合は、クラス インスタンスのコンテキストでのみ使用できます。
元:
class MyClass {
public static class InnerClass {
}
}
次に、次のことができます。
new MyClass.InnerClass();
「静的」がなければ、次のものが必要になります。
new MyClass().new InnerClass(); //I think
内部クラスがstaticの場合、外部クラスの静的プロパティにのみアクセスできます。内部クラスが静的でない場合、任意のプロパティにアクセスできます。内部クラスは、 public、protected、またはprivateの規則を尊重しません。したがって、以下は合法です。
class MyClass {
private String message;
private class InnerClass {
public InnerClass() {
System.out.println(message);
}
}
}
内部クラスにキーワードstaticがある場合、メッセージは静的ではないため、これは機能しません。
static
変数は、特定のクラスのすべてのインスタンスで共有されます。の場合public
、すべてに表示されます。非静的変数は 1 つのインスタンスのみに属します。
main
メソッドはであるため、変数static
のみを表示できstatic
ます。ただし、静的に作業することは避けてください。クラスのインスタンスを作成し、データを変数を介して共有するのではなく、メソッド/コンストラクターのパラメーターとして渡しstatic
ます。
「番号」を保持するクラスが MyClass と呼ばれる場合、任意のメソッドから MyClass.number として参照できます。
ただし、変数に対してそうするのは良い設計ではありません。