Ich kann mir aber nicht vorstellen, dass in einer Klausur etc. nach einer Liste von möglichen Fehlermeldungen gefragt wird. Vielmehr wird es wohl um den grundsätzlichen Unterschied zwischen Compile-Fehlern (die eben schon beim Übersetzen auftreten und daher leicht zu finden sind) und Laufzeitfehlern (bei denen ein syntaktisch korrektes und damit fehlerfrei übersetzbares Programm zur Laufzeit auf irgendwelche Umstände trifft, die eine weitere Verarbeitung unmöglich machen) gehen.
Compile-Fehler können z.B. falsch geschriebene Klassen- oder Methodennamen, fehlende Klammern oder Semikola, nicht zur Dateistruktur passende Klassen- oder Packagenamen oder auch illegale Zeichen im Code sein.
Laufzeitfehler gibt es in Java jede Menge, zumal jede Anwendung auch ihre eigenen definieren kann. Grundsätzlich kann aber zwischen drei Typen unterscheiden:
1. von java.lang.Error abgeleitete Klassen
Das sind hauptsächlich Fehler, die in der Java-Runtime selbst auftreten (z.B. nicht genug Speicher, Klassen nicht gefunden, Class-Files passen nicht zur Java-Version). Lt. API-Doku sollte eine Anwendung solche Fehler nicht abfangen müssen; spätestens dan, wenn man mit Reflection arbeitet, kommt aber oft nicht umhin, das doch zu tun.
2. von java.lang.RuntimeException abgeleitete Klassen
Das sind Laufzeitfehler, die im normalen Betrieb auftreten können. Sie sollten normalerweise nicht abgefangen werden, sondern durch entsprechende defensive Programmierung vermieden werden. Beispiele sind die Divison durch Null oder die allseits beliebte NullPointerException beim Dereferenzieren nicht initialisierter Variablen.
3. von von java.lang.Exception, aber nicht von java.lang.RuntimeException abgeleitete Klassen
Das sind deklarierte Exceptions, deren Behandlung vom Compiler erzwungen wird; man muss sie also abfangen oder in seiner Methode ebenfalls im throws-clause deklarieren. Bespiele sind IOExceptions, die bei vielen Datei- oder Netzwerkoperationen geworfen werden können.
Besonders 2. und 3. sind recht unscharf gegeneinander abzugrenzen; es gibt da auch unterschiedliche Meinungen, welchen Typ man für eigene Exceptions wählen soll: deklarierte Exceptions helfen dem Programmierer besser, Fehlersituationen entsprechend zu begegnen. Allerdings führen sie besonders im Falle von Libraries dazu, dass entweder die Fehlerbehandlung an einer Stelle passiert, die damit eigentlich nichts zu tun hat, oder dass Implementierungsdetails sichtbar werden.