Является ли ключевое слово `new` в java избыточным?
Я иду из С++, поэтому есть одна особенность java, которую я не совсем понимаю. Я прочитал, что все объекты должны быть созданы с использованием ключевого слова new
, за исключением примитивов. Теперь, если компилятор может распознать примитивный тип и не позволяет создавать объект, вызывающий его конструктор без new
, в чем причина того, что ключевое слово new
вообще? Может ли кто-нибудь представить пример, когда две строки кода, идентичные, за исключением наличия new
, компилируются и имеют различное значение/результаты?
Просто для того, чтобы уточнить, что я имею в виду, избыточным, и, надеюсь, сделать мой вопрос яснее. Добавляет ли new
что-нибудь? Может ли язык выражаться без new
для создания объектов через конструктор?
Ответы
Ответ 1
Методы и конструкторы могут иметь одинаковое имя.
public class NewTest {
public static void main(final String[] args) {
TheClass();
new TheClass();
}
static void TheClass() {
System.out.println("Method");
}
static class TheClass {
TheClass() {
System.out.println("Constructor");
}
}
}
Является ли этот выбор дизайна языка хорошей идеей, является спорным, но тем, как он работает.
Ответ 2
Верьте или нет, поэтому использование конструктора new
для конструкторов - это пространство имен. Следующие компилируются просто:
public class Foo {
public Foo() {}
public void Foo() {}
}
Ответ 3
Я не понимаю, почему разработчики java-языка решили добавить оператор new
на Java-язык, но я не хочу его пропустить. Даже если это может быть избыточным, если не было разрешено давать классы, методы и поля с тем же именем, как и другие, уже были показаны в их ответах:
Потому что - это значительно улучшает читаемость. Каждый раз, когда я читал этот оператор new
, я сразу понял, что рождается новый объект.
Ответ 4
Если вы пришли из С++, почему вы удивлены? Разве С++ не имеет те же new
, с той же целью? Java пытается следовать большей части синтаксиса C/С++, что, скорее всего, причина.
Комментируя ответ artbristol: очень маловероятно, что разработчики Java сначала выложили пространства имен, а затем были вынуждены добавить новое ключевое слово. Скорее всего, наоборот: new
был первым, затем они обнаружили, что он позволяет им иметь имена конструкторов, сталкивающиеся с другими именами.
Ответ 5
new
должен быть написан на Java для создания нового экземпляра объекта.
public class Foo {
public void test() {
final Foo foo1 = new Foo();
final Foo foo2 = Foo();
}
public Foo Foo() {
System.out.println("hello world");
return this;
}
}
Обратите внимание, что методы, начинающиеся с символа верхнего регистра, не рекомендуется на Java, чтобы избежать путаницы.