내가 this 기사를 읽고 된 여러 클래스 로더를 통해 얻은, 그리고 그것을 말한다 :클래스의 인스턴스는
우리는 이러한 CustomClassLoaders에 의해로드 된 학생 클래스의 두 인스턴스가있는 경우가 student1 및 student2, 다음 student1 및 student2이없는 말 유형 호환 가능. 즉,
학생 student3 = (학생) student2;
은 ClassCastException을 던질 것입니다. 왜냐하면 JVM은 다른 ClassLoader 인스턴스에 의해 정의되기 때문에 JVM이이 두 클래스를 별개의 고유 한 클래스 유형으로 간주하기 때문입니다.
이제 전달하고자하는 내용을 이해했습니다. 즉, 두 개의 다른 클래스 로더를 사용하여 동일한 클래스를로드하면 형식이 호환되지 않습니다. 이렇게 멀리까지 좋습니다.
하지만 사용 한 예는
학생 student3 = (학생) student2 즉, 나를 혼란 것입니다; 우리는이 Studnet가 패키지 준수 적절한 위치에 존재한다는 것입니다 찾습니다 모든 것을 컴파일러, 학생학생 같은 refrance 변수를 선언 할 때
그것은 것이 아닌가 structure.Now 런타임에 우리는이 참조 변수를 실제로드 된 클래스에 할당 할 때 클래스를로드하는 데 어떤 클래스 로더가 사용되는지 정말로 중요합니까? 내 이해에서 클래스 로더는 우리가 ' new '를 호출하거나 정적 필드를 호출합니다. 단순히 유형을 선언 할 때가 아닙니다.
이 점에 대해 명확히하고이 점에 대해 제 이해를 돕습니다.
감사합니다, 대부분 정확하지만, 할당이 발생하면 JVM이 올바른지 확인해야 Mawia
하지만 jvm은 두 가지가 서로 다르다고 생각하게 만들었습니다. 이제는 클래스 로더가 student3과 연결되지 않습니다. Student2만이 일부 클래스 로더에 의해로드 된 오브젝트에 지정됩니다. – mawia
@mawia : 예, 있습니다 : 확인하려면 JVM이'student3' 클래스를로드해야합니다. 따라서 변수 할당에 대해서도 클래스 로딩이 발생한다고 말할 수 있습니다. 또는 당신이'Class.forName()'을 부를 때. –