Подтвердить что ты не робот

Что нового в java? Функция или ключевое слово

Как я понимаю, новое - это ключевое слово, а не функция.

Например

A a = new A();

создает объект a типа A.
Ключевое слово не связано ни с одним объектом как таковым.

Напротив, когда мы имеем в открытый внутренний класс B, мы называем

B b = a.new B()

Здесь он выглядит как new является свойством B, а не независимым ключевым словом.

В чем смысл A.new?

4b9b3361

Ответ 1

New - это ключевое слово в обоих случаях. Это часть выражения создания экземпляра класса.

Существуют две формы: неквалифицированные и квалифицированные.

Неквалифицированная форма начинается с ключевого слова "новый".

Квалифицированная форма начинается с первичного класса, затем "нового". Это позволяет создавать внутренние классы - нестатические вложенные классы, которые содержат неявную ссылку на экземпляр внешнего класса. Квалифицированная форма предоставляет способ указать этот экземпляр.

Из Спецификация языка Java, раздел 15.9:

Условные выражения для экземпляров неквалифицированного класса начинаются с ключевого слова new.

Для создания экземпляра класса может использоваться выражение выражения для неквалифицированного экземпляра класса, независимо от того, является ли класс верхним уровнем (§7.6), членом (§ 8.5, § 9.5), локальным (§14.3) или анонимным класса (§15.9.5).

Выражения создания экземпляра квалифицированного класса начинаются с Первичного.

Ключевое выражение создания экземпляра класса позволяет создавать экземпляры внутренних классов-членов и их анонимных подклассов.

Ответ 2

new - это ключевое слово, у которого есть собственный синтаксис (как вы заметили). См. JLS 3.9

Java не имеет функций как таковых. Он имеет методы, и Java 8 добавит больше функциональных возможностей.

Ответ 3

Это было бы B b = a.new B();, а new все еще просто ключевое слово. Ссылка на объект a показывает компилятору, что B является вложенным классом. http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

Ответ 4

B b = A.new B(); // A should be an instance object not a class name,
                 // otherwise it not a valid syntax

Вы создаете объект типа B, который будет иметь доступ к экземплярам экземпляра экземпляра A.

Ответ 5

Новое наверняка является ключевым словом в Java.

Это часть нового синтаксиса ключевых слов. У вас есть два способа вызова, как вы представили. Второй используется для создания экземпляра внешнего класса, прежде чем вы сможете создать экземпляр внутреннего класса.

Это правда, что может выглядеть как свойство класса, но вы не сможете создать такое свойство в Java. Поскольку "новое" является ключевым словом, поэтому оно не может использоваться как свойство.