Laborator 8. Programare Orientata Obiect: Crearea Unei Exceptii. Aruncarea Exceptiei. Prinderea Si Tratarea Exceptiei
Laborator 8. Programare Orientata Obiect: Crearea Unei Exceptii. Aruncarea Exceptiei. Prinderea Si Tratarea Exceptiei
2. Se doreste crearea unei exceptii proprii care sa fie insotita de un mesaj. Creati o clasa de tip exceptie
cu un atribut de tip String. Scrieti un constructor pentru aceasta clasa care sa preia un argument de
tip String cu care sa se initializeze atributul din clasa exceptie. Scrieti o metoda a clasei de tip
exceptie care sa afiseze stringul agregat. Creati un cod de tip try-catch in care sa demonstrati
functionalitatea creata.
3. Utilizarea logging
import java.util.logging.*;
import java.io.*;
class LoggingException extends Exception {
//asociem un obiect logger cu clasa Exceptie curenta
private static Logger logger = Logger.getLogger("LoggingException");
public LoggingException() { // constructor - se va executa ori de cate ori apare o exceptie
StringWriter trace = new StringWriter();
printStackTrace(new PrintWriter(trace));
logger.severe(trace.toString());
}
}
public class LoggingExceptions {
public static void main(String[] args) {
try {
throw new LoggingException(); //se executa constructorul exceptiei
//executia sare la catch
} catch(LoggingException e) {
System.err.println("Caught " + e);
}
}}
4. Rearuncarea unei exceptii
public class Rethrowing {
public static void f() throws Exception {
System.out.println("originating the exception in f()");
throw new Exception("thrown from f()");
}
public static void g() throws Exception {
try {
f();
} catch(Exception e) {
System.out.println("Inside g(),e.printStackTrace()");
e.printStackTrace(System.out);
throw e; //rearuncarea exceptiei
}
}
public static void h() throws Exception {
try {
f();
} catch(Exception e) {
System.out.println("Inside h(),e.printStackTrace()");
e.printStackTrace(System.out);
throw (Exception)e.fillInStackTrace();
}
}
public static void main(String[] args) {
try {
g();
} catch(Exception e) {
System.out.println("main: printStackTrace()");
e.printStackTrace(System.out);
}
try {
h();
} catch(Exception e) {
System.out.println("main: printStackTrace()");
e.printStackTrace(System.out);
}
}
}
5. Inlantuirea exceptiilor
class DynamicFieldsException extends Exception {}
//se seteaza o exceptia de tip cauza care a determinat aruncarea exceptiei dfe
dfe.initCause(new NullPointerException()); throw dfe;
}
//daca valoarea nu e null
//se atribuie valoarea campului
int fieldNumber = hasField(id);
if(fieldNumber == -1) //daca atributul nu exista se creaza
fieldNumber = makeField(id);