Throwing

Datatyper och undantag i Java

Jim White

Java Developer

Hanteringsalternativ

  • Kontrollerade undantag kräver "hantering"
    • Att "hantera" körtidsundantag är valfritt
  • Två alternativ för "hantering"
    • Använd try och catch för att fånga upp Exception och åtgärda problemet
    • "Kasta" undantaget
  • Try/catch är den rekommenderade metoden för att hantera undantag
    • Inte alltid möjligt – ibland är det bättre att centralisera undantagshanteringen
Datatyper och undantag i Java

Nyckelordet throws

  • Använd throws på en metod för att skicka undantaget tillbaka till anropande metod
    • I stället för att hantera undantaget i metoden
    • Kallas "kasta ett undantag" eller "passa vidare"
    • Ansvaret för hanteringen förs över till anroparen
  • Använd en kommaseparerad lista med undantagstyper efter throws
    • Anger vilka undantagstyper den anropande metoden kan förvänta sig
public static void someMethod() throws IndexOutOfBoundsException, 
NegativeArraySizeException, NullPointerException {
  // method code
}
Datatyper och undantag i Java
Throws-exempel

Vanlig try-catch för att hantera ett Exception

public static void main(String[] args) {
  someMethod();
}
public static void someMethod(){
  try {
    ArrayList<String> games
      = new ArrayList<String>();
    games.add("Monopoly");
    games.add("Chess");
    games.get(3);
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "Oops - trying to get non-existent item");
  }
}

Throws för att hantera ett Exception

public static void main(String[] args) {
  try {
    someMethod();
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "someMethod tried to get non-existent item");
  }
}
public static void someMethod()
      throws IndexOutOfBoundsException {
  ArrayList<String> games
    = new ArrayList<String>();
  games.add("Monopoly");
  games.add("Chess");
  games.get(3);
}
Datatyper och undantag i Java

När ska throws användas?

  • Att "passa vidare" eller kasta ett undantag bör undvikas
    • Bättre praxis är oftast att hantera undantag med try-catch där de uppstår
  • Skäl att kasta i stället för try-catch:
    • Metoden där undantaget inträffar kanske inte vet hur den ska återhämta sig
    • Centraliserad hantering minskar redundant try/catch-kod

Att kasta ett undantag används typiskt med anpassade undantag

1 Photo from https://unsplash.com/@philipparosetite
Datatyper och undantag i Java

Fånga och kasta vidare

  • Ett Exception kan kastas vidare
    • En anropande metod använder också throws i stället för try/catch
  • Om undantaget kastas vidare från main avslutas programmet

Undantag kan kastas vidare till anropande metoder

Datatyper och undantag i Java

Exempel på vidare kastning

public class RethrowExample {
    public static void main(String[] args) {
        try {
            method1(0);
        } catch (ArithmeticException e) {
            System.out.println("Oops - tried a bad quotient");
        }
    }
    public static void method1(int divisor) throws ArithmeticException {
        method2(divisor);
    }
    public static void method2 (int divisor) throws ArithmeticException {
        int z = 5/divisor;
        System.out.println(z);
    }
}
Datatyper och undantag i Java

Nu kör vi en övning!

Datatyper och undantag i Java

Preparing Video For Download...