2013-01-20 2 views
4
class TestMe{ 
    public static void main (String args[]){ 
     String s3; 
     System.out.print(s3); 
    } 
} 

왜 컴파일러에서 오류가 발생하는지, refernce 객체의 기본값은 null이며 왜 출력이 아닌지 ... ??자바에서 문자열의 초기화가 필요합니까 ...?

error: variable s3 might not have been initialized

+0

클래스 이름을 변경했습니다. 클래스가 "Java"인 경우 – doniyor

+0

가능한 복제본 [Java의 초기화되지 않은 클래스 멤버는 컴파일러 오류를 발생시키지 않습니다. 그러나 지역 변수는 않습니다. 왜?] (http : // stackoverflow.com/questions/8521917/uninitialized-class-members-in-java-do-not-issue-any-compiler-errors-local-vari) – Lion

답변

2

지역 변수는 사용하기 전에, 현지 바르 자바에서 기본 값을 가져 해달라고 초기화되어야한다 따라서 귀하의 string s3는 지역 변수, 따라서 컴파일러 오류와 같이 기본 값이 null하지 않습니다.

FOM JLS :

는 선언자 다음 변수에 대한 모든 참조가 변수에 과제의 실행에 의해 선행되어야한다 초기화 표현, 또는 컴파일 타임 오류가없는 경우 발생 §16의 규칙에 따라.

0

예, 필요합니다.

String s3; 
s3 = "Something...."; 
System.out.print(s3); // prints "Something..." 

로컬 변수를 사용하기 전에 초기화해야합니다.

5

IT는 선언자가 초기화 표현이없는 경우, 변수에 대한 모든 참조가 변수에 할당의 실행에 의해 선행되어야한다 §14.4.2. Execution of Local Variable Declarations:

에 있도록 JLS는 말한다 오류로 인해, 또는 §16의 규칙에 따라 컴파일 타임 오류가 발생합니다.

1

null의 디폴트 값은 final필드 클래스을 비 - 적용된다.

모든 다른 경우

처음 사용하기 전에 초기화를 필요로

+0

배열의 셀은 배열이 로컬 인 경우에도 기본값을 기본값으로 초기화합니다 . – Mik378

+0

배열 셀은 필드가 아닙니다. 초기화되지 않은 배열은 예를 들어'Object [] foo;'와 같이 배열을 할당하면'new Object [50]'의 속성은 타입에 따라 모든 것을 '0'또는 'null'로 설정한다는 것입니다 . –

+0

예, 각 셀은 배열의 유형 기본값으로 초기화됩니다. 필자는 필드 나 초기화되지 않은 배열에 대해서뿐만 아니라 기본값이 적용되는 경우에 대해서도 언급했습니다. 예를 들어 부울 배열은 모든 셀을'false'로 초기화합니다. – Mik378

0

내가 지역 변수에 대해 알고 것은 :
지역 변수가 및 변수에 값을 제공 할 수있는 프로그래머의 결정에 일부 calculation.So을 수행하는 대부분 선언 기본값을 사용하지 않아야합니다. 프로그래머가 실수로 로컬 변수를 초기화하지 않았 으면 기본값을 취하고 출력이 잘못됩니다. 그래서 지역 변수는 실수를 피하기 위해 변수를 사용하기 전에 프로그래머에게 초기화를 요청할 것입니다.

0

defaut 값이 사용되는 고유 한 시나리오는 해당 변수가 객체의 필드 또는 배열의 구성 요소 인 경우에도 적용됩니다. 사실, 배열은 항상 적절한 기본값으로 셀을 초기화합니다.

따라서 변수는 필드에서 가져온 것이 아니므로 (메서드의 로컬 이후) 배열 초기화에 참여하지 않았습니다. 그래서 컴파일러가 논리적으로 불평합니다.

관련 문제