Fel och undantag

Datatyper och undantag i Java

Jim White

Java Developer

Undantag vs. fel

  • Error är ett allvarligt problem
  • Applikationer kan inte hantera eller återhämta sig från fel
    • Fel gör att applikationen "kraschar" eller stannar
    • Exempel: minnesbrist är ett fel i Java
  • Applikationer kan hantera och återhämta sig från undantag
    • Att försöka nå element utanför arrayens storlek är ett undantag.
Datatyper och undantag i Java
Exempelfel
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Datatyper och undantag i Java

Två typer av undantag

Kontrollerat undantag Körtidsundantag ("okontrollerat")
Kräver hantering Ja Nej
Allmän orsak Saker utanför vår kontroll Våra programmeringsmisstag
Återhämtning Ofta möjlig om förväntad Vanligtvis omöjlig
Återhämtningsmekanism try/catch eller throws Bäst att koda noggrant för att undvika dem
Exempelundantag Filen hittades inte Arrayindex utanför gräns
Datatyper och undantag i Java

Kontrollerade och körtidsundantag

  • Underklasser till Exception som inte också är underklasser till RuntimeException är kontrollerade undantag
    • Måste hanteras
    • Ex: filen hittades inte (FileNotFoundException)
  • RuntimeException är superklass för alla okontrollerade undantag
    • Kräver ingen hantering
    • Ex: åtkomst till ett arrayindex som inte finns (IndexOutOfBoundsException)
    • Ex: försök att dividera med noll (ArithmeticException)
Datatyper och undantag i Java

RuntimeException

Underklass till RuntimeException Beskrivning av när det kastas
ArithmeticException Felaktig aritmetik, t.ex. division med 0
IndexOutOfBoundsException Index för array, String m.m. är utanför giltigt område
NegativeArraySizeException Försök att skapa en array med negativ storlek
int y = 5/0; // ArithmeticException causing code
int[] list = new int[-1];  //NegativeArraySizeException causing code
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 Se https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Datatyper och undantag i Java

"Kontrollerat" undantag

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
must be caught or declared to be thrown
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 Se https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Datatyper och undantag i Java

Nu kör vi en övning!

Datatyper och undantag i Java

Preparing Video For Download...