대비를 설명합니다. 다음 자바 조각 봐 :자바의 해당 클래스의 인스턴스 변수를 사용하여 클래스의 정적 멤버 및 정적 함수에 액세스 할 수 있습니까?
public class Janerio {
public static void main(String[] args) {
new Janerio().enemy();
}
public static void enemy() {
System.out.println("Launch an attack");
}
}
위의 코드는 매우 잘 작동하고, 출력은 다음과 같이 될 것에 따라이 질문에 대한 대답은 예 것으로 보인다. 이러한 상황이 온다 이유
Launch an attack
하지만
public class Janerio {
public static void main(String[] args) {
System.out.println(new Janerio().class);
}
}
내가 컴파일 타임 오류를 얻을 다음 코드를 실행 바로 다음 순간에
는/Janerio.java:3: error: <identifier> expected
System.out.println(new Janerio().class);}
^
/Janerio.java:3: error: ';' expected
System.out.println(new Janerio().class);}
^
2 errors
나는 보지 않는다 이전 스 니펫에서는 클래스의 인스턴스를 사용하여 정적 "적"기능에 액세스 할 수 있었기 때문에 여기서는 잘못된 것으로 입증되었습니다. 클래스의 인스턴스를 사용하여 ".class"정적 메서드에 액세스 할 수없는 이유는 무엇입니까? ".class"를 정적 함수 또는 Janerio 클래스의 멤버로 간주하는 것이 잘못되었지만 두 조각의 정적 기능과 유사하게 잘못 되었습니까? 하지만 ".class"를 클래스 이름과 함께 호출하자마자 ".class"는 본질적으로 정적이지만 클래스의 인스턴스와 함께 ".class"를 호출 할 때 정적이됩니다.
public class Janerio {
public static void main(String[] args) {
System.out.println(Janerio.class);
}
}
출력 우리가 얻을 :
class Janerio
.class는 메소드가 아니며 클래스 리터럴을 나타냅니다. 대체로 SO : D에 어딘가에 대한 답이있을 것입니다. – Koekje