満足のいく答えがどこにも見つからない。
すべての最上位クラスは、定義により静的です。
static
が要約すると、クラスのインスタンスが単独で立つことができるということです。または、他の方法:非静的内部クラス(=インスタンス内部クラス)は、外部クラスのインスタンスなしでは存在できません。最上位クラスには外部クラスがないため、static
以外にできません。
allトップレベルのクラスは静的であるため、トップレベルのクラス定義にstatic
キーワードを使用しても意味がありません。
遊ぶコード:
public class Foo {
public class Bar {
// Non-static innner class
}
public static class Baz {
// Static inner class
}
}
public class Example {
public static void main(String[] args) {
new Foo(); // this is ok
new Foo.Baz(); // this is ok
new Foo.Bar(); // does not compile!
Foo f = new Foo();
Foo.Bar bar = f.new Bar(); //this works, but don't do this
}
}
本当に ugいコード設計であるため、ここに「しかしこれをしないでください」と入れました。インスタンスの内部クラスは、外部クラスの外側に表示されるべきではありません。外部クラス内からのみ使用する必要があります。
私は同じ答えを与えました なぜJavaクラスをstaticとして宣言できないのですか? 。しかし、ここにもう一度書いてください。
メンバーを静的として定義する必要があります
ここで、外部クラスを静的として定義し、それを許可されているとします。これは目的に役立つか、開発者に利点を提供しますか、それとも開発者と言語作成者の両方にあいまいさと複雑さをもたらしますか?
外側のクラスを静的として定義すると、上記で定義した目的に役立つかどうかを確認しましょう。
上記の点から、Java作成者は、外部クラスを静的にする必要がないため、外部クラスを静的にすることを許可していませんでした。外部クラスを静的にすることは、複雑さ、曖昧さのみを増加させます 外側がなぜJavaクラスが静的になれない
static
は、デフォルトですが、インターフェイスのネストされたクラスを追加できます。
最初はネストされたクラスがなく、どのクラスにもstaticを追加できなかったため、static
を最上位クラスに追加できないと思います。
後でネストされたクラスが追加され、ネストされたクラスに静的を追加できましたが、必要以上に構文を変更しない傾向があるため、トップレベルのクラスには追加されませんでした。 (必要性/利点がなかったため)
クラスJVMを実行するたびに、JVMはオブジェクトをインスタンス化します。 JVMは多数のオブジェクトを作成できますが、定義上、静的とはすべてのオブジェクトに同じコピーセットがあることを意味するため、トップクラスが静的である場合、プログラムを実行するたびにオブジェクトが作成され、同じメモリロケーションに乗り続けます。
2.メンバーを静的として定義する必要があります。これはクラスのすべてのオブジェクトに共通する必要があります。なぜなら、すべてのクラスはすでにすべてのオブジェクトに共通しており、すべてのオブジェクトで使用可能にするために静的にする必要はありません。
外部クラスで「静的」キーワードを見たいと思うなら、あなたは正しく理解していないと思います。
要するに、外部クラスで静的機能をどのように使用するのでしょうか?
public class Outer
{
public static int x = 0 ;
}
次に、Outer.xを実行して静的変数にアクセスします。これは、xがOuterのすべてのオブジェクトで単一の値を共有することを意味します。
これで、Outerクラスのstaticキーワードはどのような結果になりますか? 。
Staticキーワードはメモリを提供し、オブジェクトを作成せずにロジックを実行することを目的としているため、外部(トップレベル)クラスをstaticとして宣言できません。クラスには値ロジックが直接ないため、staticキーワードは外部クラスでは許可されません。