2016-09-18 1 views
0

은 문자열과 같은 내장 클래스를 미행하는 클래스를 감안할 때. 왜 그런가요?클래스 이름을 String으로 정의하면 어떻게됩니까?</p> <pre><code>class String { public static void main(String[] args) { } } </code></pre> <p>문자열 키워드 아니지만, 여전히, 위의 프로그램은 런타임 오류를 제공합니다 :

+1

음을 너무 그런 식으로 따를 것이며,의 standart 자바 클래스처럼 클래스의 이름을 결코 제안, 오류가 무엇입니까 ??? – OldProgrammer

+0

String은 이미 클래스의 이름입니다. String 클래스 나에게이 클래스를 재정의하려는 것으로 가정합니다. –

+0

@OldProgrammer 오류입니다 : Error : Main 메서드를 클래스 String에 찾을 수 없습니다. 기본 메서드를 다음과 같이 정의하십시오. public static void main (String [] args) 또는 JavaFX 응용 프로그램 클래스는 javafx.application.Application을 확장해야합니다. –

답변

2

나쁜 일이 발생 : 당신은 자바의 문자열의 정규화 된 이름을 사용하여이 문제를 방지 할 수 있습니다

public static void main(String[] args) { 

} 
: 전체 수식 명 java.lang.String 그것은

예를 들어 당신이 작성한 코드입니다 .. 당신의 하나의 정의를 가리 킵니다 이외의 "일반 문자열"을 참조하는 경우

그건 당신이 응용 프로그램의 진입 점은 발견되지 않을 것이기 때문에, 다음 컴파일러가 불평 할 수있는 유일한 클래스 인 경우 ...

당신이

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

} 
을 수행하여 명시 적으로 인수를 정의해야합니다

이것은 Java Lang의 클래스를 가져올 필요가 없기 때문에 코드를주의 깊게 작성해야하며 매우 오류가 발생하기 때문에 목을 부러 뜨리는 아주 좋은 함정입니다.

코드 컴파일하지만 괜찮은 코드 분석기에서는 많은 불만을 제기하고 제안의 이름을 바꿉니다. 의 ..

내가 ...

2

이유는 프로그램의 진입 점이라는 점에서 main 메서드가 '특별'이기 때문입니다. 프로그램의 인수는 String 클래스가 아닌 Javajava.lang.String의 변수 번호를 갖도록 지정됩니다. String 클래스는 현재 클래스와 가장 비슷한 클래스이므로 Java는 JVM이 Java String을 예상 할 때 main 인수에서 String 클래스를 사용하므로 오류가 발생합니다. 모든 선언 된 개체를 사용해야합니다 즉, 당신이 이름을 당신이 java.lang.String 클래스 을 미행하는문자열로 클래스를 정의 할 때

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

그래서 사용자 정의 String 클래스가 Libraray String 클래스보다 우선 순위가 높습니까? –

+0

예, 현재 클래스 인 @NickSilicon과 가장 가까운 클래스이기 때문에 – Li357

관련 문제