Undantagspropagering
Svep för att visa menyn
När ett Java-program körs kan undantag kastas från djupa nivåer inom en serie av metodanrop.
Undantagspropagering är processen där ett undantag förflyttas uppåt i anropsstacken tills det antingen fångas av ett matchande catch-block eller, om det inte hanteras, orsakar att programmet avslutas.
throws-nyckelordet används i metoddeklarationer för att ange att en metod kan kasta ett eller flera kontrollerade undantag. Detta innebär att metoden inte hanterar undantaget själv, utan överlåter ansvaret för hanteringen till de metoder som anropar den.
Om en metod inte fångar ett undantag med ett try-catch-block, skickas undantaget vidare till den metod som anropade den. Detta fortsätter uppåt i anropskedjan av metoder. Om ingen av metoderna i anropsstacken hanterar undantaget, når det till slut Java Virtual Machine (JVM), som avslutar programmet och skriver ut en stackspårning. Denna mekanism gör det möjligt att centralisera undantagshantering på en högre nivå i applikationen, istället för att hantera varje möjligt undantag där det kan uppstå.
Main.java
1234567891011121314151617181920package com.example; import java.io.IOException; public class Main { public static void main(String[] args) { try { readFile(); System.out.println("File read successfully."); } catch (IOException e) { System.out.println("Caught exception: " + e.getMessage()); } } // This method declares that it throws IOException public static void readFile() throws IOException { // Simulate an error when reading a file throw new IOException("Unable to read file."); } }
I programmet ovan deklarerar metoden readFile att den kan kasta ett IOException med hjälp av throws-nyckelordet. När readFile anropas från main hanterar den inte undantaget själv. Istället, om ett IOException uppstår, skickas det vidare till main-metoden. main-metoden innehåller ett try-catch-block som fångar IOException och hanterar det genom att skriva ut ett meddelande.
Detta visar hur undantaget färdas från den punkt där det kastas, genom anropsstacken, tills det slutligen fångas och hanteras av ett lämpligt catch-block. Om main-metoden inte hade fångat undantaget, skulle det ha propagerat vidare och JVM skulle avsluta programmet efter att ha skrivit ut stackspårningen.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal