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

Является ли ключевое слово `new` в java избыточным?

Я иду из С++, поэтому есть одна особенность java, которую я не совсем понимаю. Я прочитал, что все объекты должны быть созданы с использованием ключевого слова new, за исключением примитивов. Теперь, если компилятор может распознать примитивный тип и не позволяет создавать объект, вызывающий его конструктор без new, в чем причина того, что ключевое слово new вообще? Может ли кто-нибудь представить пример, когда две строки кода, идентичные, за исключением наличия new, компилируются и имеют различное значение/результаты?

Просто для того, чтобы уточнить, что я имею в виду, избыточным, и, надеюсь, сделать мой вопрос яснее. Добавляет ли new что-нибудь? Может ли язык выражаться без new для создания объектов через конструктор?

4b9b3361

Ответ 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, чтобы избежать путаницы.