处理异常层次结构的Java程序
异常是由于程序员错误或机器错误导致程序正常执行流程受到干扰并终止程序而发生的事件。
异常处理:处理异常的过程称为异常处理。
异常的层次结构: Object类是Java所有类和throwable类继承的所有errors或Exceptions对象的父类。 throwable 类有两个子类 Errors 和 Exception。
错误类:这个类包含那些难以处理的错误。它们发生在程序运行时,例如 StackOverflowError、OutOfMemoryError 等。
- StackOverflowError :由于递归中的入站条件和在程序中使用无限循环而发生此错误。这个原因超出了栈内存,导致程序中出现StackOverflowError。
堆栈溢出错误:
Java
// Java Program to Handle the exception hierarchies
import java.io.*;
class GFG {
static void check(int n)
{
if (n == 0) {
return;
}
check(n + 1);
}
public static void main(String[] args) { check(3); }
}
Java
// Java Program to Handle the exception hierarchies
import java.io.*;
class GFG {
public static void main(String args[])
{
// this file does not exist in the location
try {
FileInputStream GFG
= new FileInputStream("C:/myfile.txt");
}
catch (Exception e) {
System.out.println("File not found");
}
}
}
Java
// Java Program to Handle the exception hierarchies
import java.io.*;
class GFG {
public static void main(String[] args)
{
int a[] = { 1, 2, 3, 4, 5 };
try {
System.out.println(
a[5]); // accessing the elements of the out
// of index of the array
}
catch (ArrayIndexOutOfBoundsException e) {
// executes when index out of bound occurs
System.out.println(
"Out of index please check your code");
}
}
}
Java
try {
// Code where exception can occur
}
catch (ExceptionA e1) {
// code that executes if Exception of A occurs
}
catch (ExceptionB e2) {
// code that executes if Exception of B occurs.
}
Java
import java.io.*;
class GFG {
public static void main (String[] args) {
try {
int number[] = new int[10];
number[10] = 30 / 0;
} catch (ArithmeticException e) {
System.out.println("Zero cannot divide any number");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Index out of size of the array");
}
}
}
异常类:
这个类包含了所有可以轻松处理的异常,它继承了两个子类,一个是Runtime Exception(unchecked Exception)和checked Exception。
1.Checked异常:这些异常是Exception类的子类。这些类型的异常发生在 javac 程序编译期间。这些异常可以由 try-catch 块处理,否则程序将给出编译错误。 ClassNotFoundException、IOException、SQLException 等是已检查异常的示例。
I/O 异常:该程序抛出 I/O 异常,因为 FileNotFoundException 是Java中的已检查异常。任何时候,我们想从文件系统中读取文件, Java都会强制我们处理文件不在给定位置的错误情况。
Assumption: consider myfile.txt file does not exit
执行:
Java
// Java Program to Handle the exception hierarchies
import java.io.*;
class GFG {
public static void main(String args[])
{
// this file does not exist in the location
try {
FileInputStream GFG
= new FileInputStream("C:/myfile.txt");
}
catch (Exception e) {
System.out.println("File not found");
}
}
}
File not found
2. 未经检查的异常:
这些类型的异常发生在程序运行期间。这些是编译器在编译时未检查的异常。在Java中 Error 和 RuntimeException 类下的异常是未经检查的异常,此异常是由于错误的编程而发生的。可以在 Try-Catch 块的帮助下处理 IndexoutOfBoundException、Nullpointer Exception 等运行时异常
(Array)IndexoutOfBoundException :由于访问大于等于数组长度大小的索引而发生此异常。发生此异常后,程序将自动终止。
执行:
Java
// Java Program to Handle the exception hierarchies
import java.io.*;
class GFG {
public static void main(String[] args)
{
int a[] = { 1, 2, 3, 4, 5 };
try {
System.out.println(
a[5]); // accessing the elements of the out
// of index of the array
}
catch (ArrayIndexOutOfBoundsException e) {
// executes when index out of bound occurs
System.out.println(
"Out of index please check your code");
}
}
}
Out of index please check your code
多个 Catch 块:有时在一个程序中,特定代码可以抛出多个 Exceptions 对象,这些对象可以在单个 try 块下使用多个 catch 块进行处理
格式:
Java
try {
// Code where exception can occur
}
catch (ExceptionA e1) {
// code that executes if Exception of A occurs
}
catch (ExceptionB e2) {
// code that executes if Exception of B occurs.
}
使用多个 catch 块处理 ArithmeticException 和 IndexoutOfBound Exception。
Java
import java.io.*;
class GFG {
public static void main (String[] args) {
try {
int number[] = new int[10];
number[10] = 30 / 0;
} catch (ArithmeticException e) {
System.out.println("Zero cannot divide any number");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Index out of size of the array");
}
}
}
Zero cannot divide any number