Класс String создает путаницу

Недавно я только что получил ошибку в java, что

Exception in thread "main" java.lang.NoSuchMethodError: main

Даже если мой класс был всего 3 строки кода.

public class Test{
    public static void main(String[] args){
    System.out.println("hello");
    }
}

Мне было интересно, почему это происходит, но позже я узнал, что существует публичный класс String, который я пробовал и создавал в том же пакете.

так что теперь возникает новый вопрос, что происходит в такой ситуации, хотя String не является keyword, определенным в java (вы можете использовать в своем коде)

Затем я просто удалил String.java и String.class из пакета, но звучит странно, что вы также не можете использовать класс String.

Вопрос. Является ли java основным приоритетом для нашего пользовательского класса?

Ответы

Ответ 1

Ваш основной метод должен соответствовать

 public static void main(java.lang.String[] args){ ... }

Если вы создаете свой собственный класс String в том же пакете, где класс с вашим основным методом, он станет

 public static void main(your.own.package.String[] args){ ... }

который действителен, но не позволит запускающему средству запуска больше искать основной метод, так как он ожидает java.lang.String[] в качестве параметра.

Классы из java.lang автоматически импортируются по умолчанию, поэтому вам не нужен явный оператор import, который, вероятно, сделал его еще более запутанным для вас.

Как правило, я бы избегал называть свои собственные классы такими же, как классы из Java Runtime, когда это возможно - особенно из java.lang.

См. также JLS: Глава 7. Пакеты:

Пакет состоит из нескольких единиц компиляции (§7.3). Единица компиляции автоматически имеет доступ ко всем типам, объявленным в ее пакете, а также автоматически импортирует все общедоступные типы, объявленные в предопределенном пакете java.lang.

Ответ 2

Вы всегда можете использовать полное имя:

public static void main(java.lang.String[] args) ...

Рассказ, который вы рассказываете, говорит, что мы можем использовать String как имя для одного из наших классов. Но, как и в реальной жизни, если есть два человека, которых зовут "Джон", вам иногда нужно их устранить.