Класс 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
как имя для одного из наших классов. Но, как и в реальной жизни, если есть два человека, которых зовут "Джон", вам иногда нужно их устранить.