Poikkeuksen Eteneminen
Pyyhkäise näyttääksesi valikon
Kun Java-ohjelma suoritetaan, poikkeuksia voi syntyä syvältä useiden metodikutsujen ketjusta.
Poikkeuksen eteneminen tarkoittaa prosessia, jossa poikkeus siirtyy kutsupinon läpi ylöspäin, kunnes se joko käsitellään sopivassa catch-lohossa tai, jos sitä ei käsitellä, ohjelma päättyy.
throws-avainsanaa käytetään metodin määrittelyssä osoittamaan, että metodi voi heittää yhden tai useamman tarkastetun poikkeuksen. Tämä tarkoittaa, että metodi ei käsittele poikkeusta itse, vaan siirtää vastuun poikkeuksen käsittelystä kutsuvalle metodille.
Jos metodi ei käsittele poikkeusta try-catch-lohkolla, poikkeus siirtyy kutsuvalle metodille. Tämä jatkuu metodikutsujen ketjussa ylöspäin. Jos mikään kutsupinon metodeista ei käsittele poikkeusta, se lopulta saavuttaa Java Virtual Machinen (JVM), joka lopettaa ohjelman suorituksen ja tulostaa pinon jäljityksen. Tämä mekanismi mahdollistaa poikkeusten käsittelyn keskittämisen sovelluksen ylemmälle tasolle sen sijaan, että jokainen mahdollinen poikkeus käsiteltäisiin siinä kohdassa, missä se voi ilmetä.
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."); } }
Yllä olevassa ohjelmassa readFile-metodi ilmoittaa, että se voi heittää IOException-poikkeuksen käyttämällä throws-avainsanaa. Kun readFile kutsutaan main-metodista, se ei käsittele poikkeusta itse. Sen sijaan, jos IOException tapahtuu, se siirtyy main-metodille. main-metodi sisältää try-catch-lohkon, joka ottaa kiinni IOException-poikkeuksen ja käsittelee sen tulostamalla viestin.
Tämä havainnollistaa, kuinka poikkeus kulkee siitä kohdasta, missä se heitetään, kutsupinon läpi, kunnes se lopulta otetaan kiinni ja käsitellään sopivassa catch-lohkossa. Jos main-metodi ei ottaisi poikkeusta kiinni, se leviäisi edelleen ja JVM lopettaisi ohjelman suorituksen tulostaen pinon jäljityksen.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme