Try și Catch

Tipuri de date și excepții în Java

Jim White

Java Developer

Probleme în Java

  • Pot apărea probleme în aplicații
    • Din cauza datelor de intrare incorecte
    • Din cauza erorilor de programare
    • Din cauza circumstanțelor neprevăzute
  • Problemele se numesc excepții
    • Întrerup fluxul normal de execuție
  • Java aruncă excepții
Tipuri de date și excepții în Java

Exemplu de excepție

public static void main(String[] args) {
    ArrayList<String> allStars = new ArrayList<String>();
    allStars.add("Mays");
    allStars.add("Aaron");
    allStars.add("Ruth");
    String last = allStars.get(3); // This will cause an exception
    System.out.println(last);
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 3 out of 
bounds for length 3
Tipuri de date și excepții în Java

Try

  • Încadrați codul care poate genera excepții într-un bloc try
    • „Încearcă acest cod și, dacă apare o problemă, transmite-o blocului catch"
try {
    // Statements to be executed and watched for exceptions
}
Tipuri de date și excepții în Java

Catch

  • Plasați un bloc catch după try
    • Acționează ca un handler pentru gestionarea excepțiilor
    • Excepția prinsă este transmisă ca parametru în acest bloc
  • Blocurile try/catch sunt obligatorii pentru anumite tipuri de excepții
    • Opționale pentru altele
try {
    // Statements to be executed and watched for exceptions
} catch (<Exception type> <variable name>) {
    // Statements to execute if an exception has occurred
}
Tipuri de date și excepții în Java

Prinderea IndexOutOfBoundsException

try {
  ArrayList<String> allStars = new ArrayList<String>();
  allStars.add("Mays");
  allStars.add("Aaron");
  allStars.add("Ruth");
  String last = allStars.get(3); // Accessing an element that isn't there
  System.out.println(last);
} catch (IndexOutOfBoundsException e) {
  System.out.println("Oops - wrong index");
}
Oops - wrong index
Tipuri de date și excepții în Java

Multiple Catch

  • Utilizați mai multe blocuri catch pentru a gestiona diferite tipuri de excepții
  • Fiecare catch are propriul tip de excepție și variabilă
  • Când apare o excepție, Java verifică blocurile catch în ordine până găsește o potrivire
try {
    ArrayList<String> nums 
      = new ArrayList<String>();
    nums.add("one");
    String last = nums.get(0);
    Integer.valueOf(last);
    System.out.println(last);
} catch (IndexOutOfBoundsException eIndex) {
    System.out.println("Oops - wrong index");
} catch (NumberFormatException eValueOf) {
    System.out.println(
      "Oops - String not a number");
}
Oops - String not a number
Tipuri de date și excepții în Java

Catch „All"

  • Utilizați catch (Exception variable){ } pentru a prinde orice excepție
    • Gestionează orice excepție neprinse de celelalte blocuri catch
try {
    // Code to try
} catch (IndexOutOfBoundsException eIndex) {
    System.out.println("Oops - wrong index");
} catch (NumberFormatException eValueOf) {
    System.out.println("Oops - String not a number");
} catch (Exception e) { // Handles all exceptions except the two above
    System.out.println("Something unplanned happened");
}
Tipuri de date și excepții în Java

Finally

  • Codul din blocul finally se execută întotdeauna
// When exception happens
try {
    Integer.valueOf("one");
} catch (NumberFormatException eValueOf) {
    System.out.println("Oops");
} finally {
    System.out.println("Doing cleanup");
}
Oops
Doing cleanup

 

// When no exception gets thrown
try {
    Integer.valueOf("1");
} catch (NumberFormatException eValueOf) {
    System.out.println("Oops");
} finally {
    System.out.println("Doing cleanup");
}
Doing cleanup
Tipuri de date și excepții în Java

Obiectul Exception

  • Obiectul Exception transmis în blocul catch conține informații utile
  • Utilizați metodele obiectului pentru a afla mai multe despre eroare
    • .getMessage() pentru a obține cauza în format lizibil
    • .getClass() pentru a obține clasa sau tipul excepției
    • .printStackTrace() pentru a afișa stiva de apeluri (diapozitivul următor)
public class ExceptionExample {

    public static void main(String[] args) {
        try {
            Integer.valueOf("one");
        } catch (NumberFormatException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}
Tipuri de date și excepții în Java

Stiva de apeluri a excepției

  • Stiva de apeluri înregistrează fluxul de execuție până la problemă
    • Mai jos: rezultatul din exemplul anterior – inclusiv stiva de apeluri afișată
For input string: "one"
java.lang.NumberFormatException: For input string: "one"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    at java.base/java.lang.Integer.parseInt(Integer.java:661)
    at java.base/java.lang.Integer.valueOf(Integer.java:988)
    at foo/exceptions.ExceptionExample.main(ExceptionExample.java:7)
Tipuri de date și excepții în Java

Passons à la pratique !

Tipuri de date și excepții în Java

Preparing Video For Download...