English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Come correggere l'eccezione nel thread main in Java?

Le eccezioni sono problemi che si verificano durante l'esecuzione del programma (errori a runtime). Quando si verifica un'eccezione, il programma si interrompe improvvisamente e il codice dopo la riga dell'eccezione non verrà mai eseguito.

Esempio

import java.util.Scanner;
public class ExceptionExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Inserisci il primo numero:");
      int a = sc.nextInt();
      System.out.println("Inserisci il secondo numero:");
      int b = sc.nextInt();
      int c = a / b;
      System.out.println("Il risultato è: " + c);
   }
}

Risultato di output

Inserisci il primo numero:
100
Inserisci il secondo numero:
0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at ExceptionExample

Tipi di eccezione

In Java ci sono due tipi di eccezioni

  • Eccezione controllata - Le eccezioni controllate sono le eccezioni che si verificano durante la compilazione. Queste sono anche chiamate eccezioni di compilazione. Queste eccezioni non possono essere ignorate semplicemente durante la compilazione. Gli sviluppatori devono prestare attenzione (gestire) queste eccezioni.

  • Eccezione non controllata - Le eccezioni non controllate sono le eccezioni che si verificano durante l'esecuzione. Queste sono anche chiamate eccezioni a runtime. Includono errori di programmazione, come errori logici o uso improprio dell'API. Le eccezioni a runtime vengono ignorate durante la compilazione.

Eccezione principale del thread

Il modo di visualizzazione delle eccezioni a runtime/degli eccezioni non controllate è“Eccezione principale del thread”,Ecco, ogni volta che si verifica un'eccezione a runtime, il messaggio inizia con quella riga.

Esempio

Nel seguente programma Java, abbiamo un array di dimensione 5 e proviamo ad accedere all'elemento numero 6, il che genererà un ArrayIndexOutOfBoundsException.

public class ExceptionExample {
   public static void main(String[] args) {
      //Crea un array di interi di dimensione 5
      int inpuArray[] = new int[5];
      //Riempimento dell'array
      inpuArray[0] = 41;
      inpuArray[1] = 98;
      inpuArray[2] = 43;
      inpuArray[3] = 26;
      inpuArray[4] = 79;
      //L'indice di accesso è maggiore della dimensione dell'array
      System.out.println(inpuArray[6]);
   }
}

Eccezione in esecuzione

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at MyPackage.ExceptionExample.main(ExceptionExample.java:14)

Esempio

Nell'esempio seguente, proviamo a creare un array utilizzando un numero negativo come valore di dimensione, il che genererà NegativeArraySizeException.

public class Test {
   public static void main(String[] args) {
      int[] intArray = new int[-5];
   }
}

Eccezione in esecuzione

Durante l'esecuzione, il programma genererà un'eccezione in esecuzione come segue.

Exception in thread "main" java.lang.NegativeArraySizeException
at myPackage.Test.main(Test.java:6)

Gestione delle eccezioni in esecuzione

È possibile gestire l'eccezione in esecuzione e evitare la terminazione anomala, ma Java non ha un programma di riparazione specifico per le eccezioni in esecuzione; dipende dall'eccezione e dal tipo di codice da modificare.

Ad esempio, se si deve correggere ArrayIndexOutOfBoundsException nel primo programma elencato, è necessario eliminare o modificare la riga che accede all'indice dell'array al di sopra della sua dimensione.

Esempio

public class ExceptionExample {
   public static void main(String[] args) {
      //Creazione di un array intero con dimensione 5
      int inpuArray[] = new int[5];
      //Riempimento dell'array
      inpuArray[0] = 41;
      inpuArray[1] = 98;
      inpuArray[2] = 43;
      inpuArray[3] = 26;
      inpuArray[4] = 79;
      //L'indice di accesso è maggiore della dimensione dell'array
      System.out.println(inpuArray[3]);
   }
}

Risultato di output

26