한 친구가 저에게 보내는 스 니펫과 관련이 있습니다. 그것은 정말로 이상한 행동을했습니다. 나는 인터넷에서 무언가를 찾았는지 행운이 없는지 알아보기 위해 구글 코드를 시도했다. 나는 친구와 연락 할 수 없어, 그 일에 대해 무언가를했다.누구든지이 코드가 false를 반환하는 이유를 설명 할 수 있습니까
public class Test {
public static void main(String[] args) throws MalformedURLException {
System.out.println(Boolean.TRUE); //This prints false
}
static {
try {
Field value = Boolean.class.getDeclaredField("value");
value.setAccessible(true);
value.set(Boolean.TRUE, value.get(Boolean.FALSE));
} catch (Exception e) {
throw new AssertionError(e);
}
}
}
가 나는 static으로 선언있어 코드의 조각처럼, 먼저 그 main
방법을 실행하고, 그 정적 코드 안에 모든 Boolean
인스턴스의 값을 변경하고, 생각 (?). 나도 모르겠다. 나는 이것을 확인하기 위해 전문가의 견해가 필요하다.
'static' 섹션은 클래스가 처음로드 될 때 실행되는 정적 초기화 블록입니다. 이 블록은 정적 인 필드 'TRUE'의 값을'false'로 변경하기 위해 반사되는 부분을 사용합니다. 자세한 내용은 [필드 초기화] (http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html)를 참조하십시오. – MadProgrammer