Я только что прочитал в ОСА-Book (Oracle Certified Associate), что:java.lang.ClassCastException во время выполнения или во время компиляции
«Некоторые проливает исключения могут быть обнаружены как ошибки во время компиляции, но другие могут быть обнаружены только во время выполнения ».
Теперь я пытаюсь найти пример для обоих случаев: время компиляции и время выполнения.
Рассмотрим следующую структуру класса:
class A {}
class B extends A {}
class C extends B {}
Следующие ввергнуть
Object o = new C();
B b = (B) o;
правильно. Таким образом, код будет работать без ClassCastException
.
Актерский
Object o = new B();
C c = (C) o;
неправильно. Объект o
является, по меньшей мере, типом B
; поэтому его можно было бы отличить до B
или A
.
Но может быть это обнаружено во время выполнения или времени компиляции? Я бы догадался, во время компиляции ?! Или компилятор знает только тип ссылки, а не самого объекта (в памяти)? Если это так, компилятор не может решить, правильно ли выполняется трансляция или нет во время компиляции.
Благодарим за помощь!
Было бы во время выполнения, как компилятор будет знать тип объекта заранее? – SMA
Вы можете просто попробовать - напишите небольшую программу, попробуйте ее скомпилировать, посмотрите, дает ли компилятор вам сообщение об ошибке; если он компилируется, попробуйте запустить его и посмотреть, есть ли у вас «ClassCastException». – Jesper