I Java-programmering opstår en `ClassCastException`, når der gøres et forsøg på at caste et objekt af en klasse til en anden klasse, som det ikke er kompatibelt med. Det er en runtime-undtagelse, der indikerer, at en inkompatibel typekonvertering er forsøgt.
Her er et eksempel til illustration:
``` java
Objekt obj =ny Objekt();
prøv {
String str =(String) obj; // Forsøg på at kaste objekt til streng
} catch (ClassCastException e) {
System.out.println("ClassCastException opstod");
}
```
I dette eksempel er objektet 'obj' en forekomst af den generiske 'Object'-klasse, og vi forsøger at caste det til en 'String'. Da `Object` ikke er en `String`, og der ikke er nogen implicit typekonvertering mellem de to, resulterer det i en `ClassCastException`.
Her er de vigtigste punkter at huske om `ClassCastException`:
1. Det sker under kørsel, når der er et forsøg på at tildele et objekt af én type til en variabel eller reference af en anden, inkompatibel type.
2. Det sker, når en underklassereference er tildelt en superklassereference, men underklassen er ikke en gyldig underklasse af superklassen.
3. Det kastes, når man kalder metoder eller får adgang til felter på et objekt, der ikke er af den korrekte type.
4. `ClassCastException` kan undgås ved at sikre korrekt typekontrol og casting ved håndtering af objekter af forskellige klasser.
5. Det anbefales at bruge operatoren `instanceof` til at kontrollere kompatibiliteten af objekter før casting for at forhindre `ClassCastException`.
``` java
if (obj forekomst af streng) {
String str =(String) obj; // Sikker støbning
} andet {
throw new ClassCastException("Kan ikke caste " + obj.getClass().getName() + " til String");
}
```