Javas töödeldakse eriolukordi erilise juhtimismehhanismi - katsendidirektiivi (ingl.k. try/catch) abil. Eriolukorra tekkimise kohas tekitatakse spetsiaalsete omadustega objekt klassist java.lang.Throwable või mõnest selle alamklassist. Juhtimine antakse seda tüüpi eriolukordi töötlevale programmiosale (catch-haru e. püünis) või tagasi antud meetodit välja kutsunud meetodile, kui antud meetod ise eriolukordi ei töötle.
Throwable
Error
LinkageError
ClassCircularityError
ClassFormatError
IncompatibleClassChangeError
NoSuchMethodError
NoSuchFieldError
InstantiationError
AbstractMethodError
IllegalAccessError
NoClassDefFoundError
VerifyError
UnsatisfiedLinkError
UnsatisfiedError
AbstractMethodError
ExceptionInInitializationError
ThreadDeath
VirtualMachineError
InternalError
OutOfMemoryError
StackOverflowError
UnknownError
AWTError
Exception
ClassNotFoundException
CloneNotSupportedException
IllegalAccessException
InstantiationException
InterruptedException
NoSuchMethodException
TooManyListenersException
ParseException
AWTException
IOException
CharConversionException
EOFException
FileNotFoundException
InterruptedIOException
ObjectStreamException
InvalidClassException
InvalidObjectException
NotActiveException
NotSerializableException
OptionalDataException
StreamCorruptedException
WriteAbortedException
SyncFailedException
UnsupportedEncodingException
UTFDataFormatException
MalformedURLException
ProtocolException
SocketException
BindException
ConnectException
NoRouteToHostException
UnknownHostException
UnknownServiceException
RuntimeException
ArithmeticException
ArrayStoreException
ClassCastException
IllegalArgumentException
IllegalThreadStateException
NumberFormatException
FormatException
IllegalMonitorStateException
IllegalStateException
IndexOutOfBoundsException
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
NegativeArraySizeException
NullPointerException
SecurityException
EmptyStackException
MissingResourceException
NoSuchElementException
IllegalComponentStateException
Selleks, et erindeid ise tekitada, kasutatakse erindiseade direktiivi (throw-statement), mille argumendiks on Throwable (alam)klassi isend. Tekitatud erind tuleb reeglina töödelda või delegeerida töötlemiseks "üles".
Näit.
catch (Erinditüüp1 muutuja) {
...
catch (Erinditüüp_n muutuja) {
finally {
Võtmesõna try järel olev põhiblokk täidetakse n.-ö. silumisrezhiimis. Kui selle bloki sees (s.h. meetodites, mille poole otseselt või kaudselt pöördutakse) tekib mingi eriolukord, siis suunatakse juhtimine esimesse niisugusesse püünisesse, mis vastab tekkinud erindi tüübile ning seejärel katsendidirektiivist välja. Seega on mõtet järjestada püünised nii, et spetsiifilisemad erindiklassid töödeldaks eespool. Kui esineb ka epiloog võtmesõna finally järel, siis see täidetakse igal juhul (isegi siis, kui püünis sisaldab naasmisdirektiivi).
Püünise päises esinev muutuja on formaalne parameeter, mis lubab viidata tekkinud erindile.
Näit.
Näit.
public Object nextElement()
throws
java.util.NoSuchElementException {
if
(votaJargmine() == null)
throw new
class MinuErind extends Exception {
public MinuErind () {
super();
}
public MinuErind (String s) {
super (s);
}
}
import java.io.*;
public class Erind {
public static void main (String[] args) {
int n = 0;
int m = 0;
while (true) {
try {
BufferedReader sisse = new BufferedReader
(new InputStreamReader (System.in));
System.out.println ("V2ljumiseks vajutage ctrl-C");
System.out.print ("Laste arv: ");
String s = sisse.readLine();
n = Integer.parseInt (s);
if (n<0)
throw new IllegalArgumentException (String.valueOf (n));
System.out.print ("6unte arv: ");
s = sisse.readLine();
m = Integer.parseInt (s);
if (m<0)
throw new IllegalArgumentException (String.valueOf (m));
System.out.println ("Igale lapsele "
+ String.valueOf (m/n) + " 6una ja "
+ String.valueOf (m%n) + " j22b yle");
}
catch (ArithmeticException e) {
System.out.println ("Aritmeetikakatkestus: " + e.toString());
}
catch (Exception muu) {
System.out.println ("Probleem: " + muu.toString());
}
finally { // see t2idetakse igal juhul
System.out.println ("n = " + n + " m = " + m);
}
} // while
} // main
} // Erind
/** A small example about catching NumberFormatException.
* @author Jaanus Poial
* @version 0.2
*/
public class ExceptionUsage {
/** Main method gets an integer parameter from the command line.
* If the parameter is not a number or if it is not in between 1 and 99
* an IllegalArgumentException is thrown.
*/
public static void main (String[] args) {
int n = 0;
try {
n = Integer.parseInt (args[0]); // throws NumberFormatException
} catch (Exception e) {
// n remains zero and a new exception is thrown
}
if (n<1 || n>99)
throw new IllegalArgumentException
("\nCommand line parameter has to be a number in between 1 and 99 ");
System.out.println("Parameter n = " + String.valueOf (n));
} // main
} // ExceptionUsage