2016-09-18 2 views
0

Учитывая класс затенения встроенного класса как строки:Что происходит, когда мы определяем имя класса как String?

class String { 
public static void main(String[] args) { 

} 
} 

Строка не является ключевым словом, но тем не менее, выше программа дает ошибку во время выполнения. Почему это?

+1

Ну, что ошибка ??? – OldProgrammer

+0

Строка уже называется классом. Класс String. Это, для меня, предполагает, что вы хотите переопределить этот класс. –

+0

Ошибка @OldProgrammer: Ошибка: главный метод не найден в классе String, пожалуйста, определите основной метод как: public static void main (String [] args) или класс приложения JavaFX должен расширять javafx.application.Application. –

ответ

2

плохое случается, когда вы определяете класс с именем Струнный вы затенения с java.lang.String класса это означает, что каждый объявлен объект должен использовать полное квалифицированное имя-java.lang.String, если он относится к «нормальной String» другой, чем будет указывать на ваш определенный один ..

пример кода вы пишете:

public static void main(String[] args) { 

} 

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

вам будет необходимо определить явный аргумент, делая

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

} 

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

этот код будет компилироваться, но в любом достойном анализаторе кода вы получите много жалоб и переименуйте предложение s ..

Я буду следовать, что слишком, и не предлагают и не назвать свои классы как классы стандарт Java ...

2

Причина в том, что метод main является «особенным», поскольку он является точкой входа программы. Аргументы программы заданы так, чтобы иметь переменное число Java's java.lang.String s, а не ваш класс String. Ваш класс строк является самым близким к классу, так как это текущий класс, поэтому Java использует ваш класс String в аргументах main, когда JVM ожидает строку Java, что приводит к ошибке. Вы можете предотвратить это, используя полное имя строки в Java:

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

Итак, определяемый пользователем класс String будет иметь больший приоритет над классом Libraray String? –

+0

Да, потому что он самый близкий, так как это текущий класс @NickSilicon – Li357

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