2014-01-31 2 views
16

Недавно я только что получил сообщение об ошибке в Java, чтокласс Строка сделать путаницу

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

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

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

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

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

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

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

+2

Я действительно не понимаю, что вы пытаетесь сделать –

ответ

32

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

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: Chapter 7. Packages:

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

+0

, но это означает, что если я напишу String [], это означает мой класс coustom? Это действительно так? –

+0

Да, если компилятор находит его на пути к вашему классу ... –

+0

, но если у меня есть 2 импортированных класса с тем же, что и судья компилятора java, который нужно взять, а что не взять?(не в пути класса, а в пакете othr) –

3

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

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

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

+0

of cource может быть .. как кайт (птица, бумага предмет.) –

Смежные вопросы