"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Java가 명시적 캐스팅 중에 ClassCastException을 발생시키는 이유는 무엇입니까?

Java가 명시적 캐스팅 중에 ClassCastException을 발생시키는 이유는 무엇입니까?

2024년 11월 25일에 게시됨
검색:873

Why Does Java Throw a ClassCastException During Explicit Casting?

Java의 명시적 캐스팅 및 ClassCastException 이해

Java에서는 명시적 캐스팅을 사용하여 슈퍼클래스 객체를 하위 클래스 변수에 할당할 수 있습니다. 예를 들어 다음 코드를 고려해보세요.

public class Animal {
    public void eat() {}
}

public class Dog extends Animal {
    public void eat() {}

    public static void main(String[] args) {
        Animal animal = new Animal();
        Dog dog = (Dog) animal;
    }
}

코드가 성공적으로 컴파일되었지만 Dog dog = (Dog) Animal; 런타임에 ClassCastException이 발생합니다.

이 오류가 발생하는 이유는 무엇입니까?

컴파일러는 명시적 캐스팅을 허용하지만 컴파일 타임에 캐스팅의 유효성을 보장할 수는 없습니다. 객체를 슈퍼클래스에서 서브클래스로 캐스트하면 본질적으로 컴파일러에게 객체가 실제로 서브클래스의 인스턴스임을 신뢰하도록 지시하는 것입니다.

이 예에서 변수 Animal은 Animal의 인스턴스입니다. 수업. 그러나 이를 Dog 개체로 캐스팅하면 동물이 Dog 개체를 참조하는 것으로 암시적으로 가정하지만 그렇지 않습니다. 따라서 JVM은 런타임에 이 가정을 검증하고 실패할 때 ClassCastException을 발생시킵니다.

이러한 오류를 어떻게 방지할 수 있습니까?

명시적 캐스팅을 안전하게 수행하려면 다음을 수행해야 합니다. 다음 확인을 수행하십시오.

  1. 객체가 예상 하위 유형의 인스턴스인지 확인하십시오. 연산자를 사용하여 객체가 원하는 하위 클래스에 할당될 수 있는지 확인합니다.
  2. ClassCastException을 적절하게 처리합니다. 캐스트가 실패하면 ClassCastException을 포착하여 적절하게 처리할 수 있습니다.

요약하자면 명시적 캐스팅을 사용하면 컴파일러의 유형 검사를 무시할 수 있지만 이에 의존하기 전에 신중하게 접근하고 캐스팅의 유효성을 확인하는 것이 중요합니다. 그것.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3