异常指的是程序在执行过程中,出现的非正常的情况,如果不处理最终会导致jvm的非正常停止。
异常的抛出机制:
Java把不同的异常用不同的类表示,一旦出现某种异常,就创建该异常类型的对象,并且抛出(throw)。然后程序员可以捕获(catch)到这个异常对象,并处理;如果没有捕获(catch)到这个异常对象,那么这个异常对象将会导致程序终止。
对待异常:
对于程序出现的异常,一般有两种解决办法:
①遇到错误就终止程序的运行。
②程序员在编写程序时,就充分考虑到各种可能发生的异常和错误,极力预防和避免。实在无法避免的,要编写相应的代码进行异常的检测、以及异常的处理,保证代码的健壮性。
异常的体系结构:
①Throwable:
java.lang.Throwable类是Java程序执行过程中发生的异常事件对应的类的根父类。
Throwable中常用的方法:
·public void printStackTrace( ):打印异常的详细信息。
包含了异常的类型、异常的原因、异常出现的位置、在开发和调试阶段都得使用printStackTrace。
·public String getMessage( ):获取发生异常的原因。
②Error和Exception
Throwable可以分为两类:Error和Exception。分别对应着java.lang.Error和java.lang.Exception两个类。
Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。
例如:StackOverflowError(栈内存溢出)和OutOfMemoryError(堆内存溢出,简称OOM)。
Exception(异常):其他因程序错误或偶然的外在因素导致的一般性问题,需要使用针对性的代码进行处理,使程序继续运行。否则一旦程序发生异常,程序也会挂掉。例如:
·空指针访问
·试图读取不存在的文件-
·网络连接中断
·数组角标越界
根据异常可能出现的阶段,可以将异常分为:
·编译时异常(也称为,受检异常)(不是RuntimeException的其他的……Exception都是编译时异常)
常见的有:
ClassNotFoundException、FileNotFound、IOException
·运行时异常(也称为非受检异常)(RuntimeException)
常见的运行时异常和演示如下:
import java.util.Date;
import java.util.Scanner;public class ErrorTest
{public static void main(String[] args){//举例1:死递归,栈内存溢出的错误 (Exception in thread "main" java.lang.StackOverflowError)//main(args);//举例2:OutOfMemoryError//byte[] arr = new byte[1024*1024*100];//假设堆空间最大为10mb,此处为100mb
// int[] arr = new int[10];
// System.out.println(arr[10]); //ArrayIndexOutOfBoundsExceptionErrorTest ee = new ErrorTest();String str = new String();//ee.test1();//ee.test2();
// ee.test3(str);
// ee.test4();ee.test5();}public void test1(){String str = "aaa";int i = Integer.parseInt(str); //NumberFormatExceptionSystem.out.println(i);}public void test2(){Scanner scan = new Scanner(System.in);int num = scan.nextInt();//若输入abc //InputMismatchExceptionSystem.out.println(num);}public void test3(Object o){Date dd = (Date) o;//类转换异常 //ClassCastException}public void test4(){int[] arr = new int[2];arr = null;//空指针访问异常System.out.println(arr[0]); //NullPointerException}public void test5(){int num = 10;int a = num/0;//分母不能为零 //ArithmeticExceptionSystem.out.println(a);//算术异常}}