22

私が理解しているように、 new はキーワードであり、関数ではありません。

例えば

A a = new A();

型 A のオブジェクト a をインスタンス化します。
キーワードは、それ自体はどのオブジェクトにも関連付けられていません。

逆に、A に public 内部クラス B がある場合は、B を呼び出します。

B b = a.new B()

ここでは、new は B のプロパティであり、独立したキーワードではないようです。

A.new とはどういう意味ですか?

4

5 に答える 5

16

Newどちらの場合もキーワードです。これは、クラス インスタンス作成式の一部です。

非修飾修飾の 2 つの形式があります。

非修飾形式はキーワード「new」で始まります。

修飾された形式は、プライマリ クラスで始まり、次に 'new' です。これにより、内部クラス (外部クラスのインスタンスへの暗黙的な参照を保持する静的ではないネストされたクラス) を作成できます。修飾された形式は、そのインスタンスを指定する方法を提供します。

Java 言語仕様のセクション 15.9から:

非修飾クラス インスタンス作成式は、キーワード new で始まります。

クラスがトップレベル (§7.6)、メンバー (§8.5、§9.5)、ローカル (§14.3)、または匿名クラス (§ 15.9.5)。

修飾されたクラス インスタンス作成式は、Primary で始まります。

修飾されたクラス インスタンス作成式により、内部メンバー クラスとその匿名サブクラスのインスタンスを作成できます。

于 2013-05-13T14:05:12.960 に答える
7

new独自の構文を持つキーワードです (お気づきのとおり)。JLS 3.9を参照

Javaにはそのような機能はありません。メソッドがあり、Java 8 ではさらに機能的な機能が追加されます。

于 2013-05-13T14:02:46.170 に答える
3

それはそうなるでしょうB b = a.new B();し、new はまだ単なるキーワードです。オブジェクト a への参照は、B がネストされたクラスであることをコンパイラに示します。 http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

于 2013-05-13T14:04:41.680 に答える
0
B b = A.new B(); // A should be an instance object not a class name,
                 // otherwise it's not a valid syntax

Binstance のインスタンス メンバーにアクセスできる型のオブジェクトを作成していますA

于 2013-05-13T14:02:27.280 に答える
0

new は確かに Java のキーワードです。

これは新しいキーワード構文の一部です。あなたが提示したように、それには2つの呼び出し方法があります。2 つ目は、内部クラスをインスタンス化する前に、最初に外部クラスをインスタンス化するために使用されます。

クラスのプロパティのように見えるかもしれませんが、Java でそのようなプロパティを作成することはできません。「new」はキーワードであるため、プロパティとして使用できません。

于 2013-05-13T14:07:55.870 に答える