首页 > 代码库 > 异常(一)

异常(一)

1、异常概述:

异常(不正常)的体系: 

Throwable

    Error:通常出现重大问题,如运行的类不存在或者内存溢出等;不编写针对代码进行处理;

    Exception:在运行时出现的一起情况,可以通过try,catch,finally处理。

Exception和Error的子类名几乎都是以父类名作为后缀(除了Error类的ThreadDeath)。

详述

先来看一个异常的例子:除法运算4除以0(正常情况下除数不可为0)

package exceptionDemo;class Demo{	int div(int a,int b){		return a/b;	}}public class ExceptionDemo1 {	public static void main(String[] args){		Demo d=new Demo();		int x=d.div(4,0);		System.out.println("x="+x);		System.out.println("over");	}}

结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero	at exceptionDemo.Demo.div(ExceptionDemo1.java:4)	at exceptionDemo.ExceptionDemo1.main(ExceptionDemo1.java:10)

可以看到出现了ArithmeticException(运算异常),没有出现运算结果,也没有打印over,说明程序出现异常时就结束了。

异常是程序在运行时(注意是运行而不是编译,div(4,0)编译没有问题)出现不正常情况。要知道,问题也是现实生活中一个具体的事物,可以通过java类的方式对其进行描述,并将其封装成对象。异常其实就是java对不正常情况进行描述后的对象体现

对于问题又划分为两类:

一种是严重的问题,java通过Error类进行描述,如运行的类不存(运行java haha,出现java.lang.NoClassDefFoundError)或者内存溢出(byte[] arr=new byte[1024*1024*600],需要占用1024*1024*600的内存,很容易超出虚拟机所管理的内存范围,从而出现java.lang.OutOfMemoryError),一般不编写针对性代码对其进行处理(已超出虚拟机的能力范围);

一种是非严重的问题,java通过Exception类进行描述,可以使用针对性的处理方式进行处理。

(想想一下疾病的可治愈:癌症;不可治愈:感冒发烧)

无论是Error还是Exception又有一些共性内容,如不正常情况的信息、引发原因等,可以向上抽取为Throwable.(可抛的)

 

详情查看JAVA API文档,(sun公司被甲骨文收购)文档地址https://docs.oracle.com/javase/8/docs/api/

Throwable(JAVA语言中所有错误或异常的父类,有自身的构造函数和getCause(),getMessage(),toString()等方法)

技术分享

-----Error     技术分享

-----Exception

技术分享

2、异常的处理

 java提供了下面特有的语句进行处理

try{需要被检测的容易出现问题的代码;}catch(异常类 变量){处理异常的代码;(处理方式)}finally{一定会执行的语句;}

a、

先介绍前两部分try、catch ,以上面的代码为例

	try{		int x=d.div(4,0);		System.out.println("x="+x);		}		catch(Exception e){			System.out.print("over");		}

在进行div(4,0)运算时,会抛出一个new ArithmeticException()对象,try可以检测到这个对象(若没有try语句,检测不到异常对象,主函数也无法处理该异常,虚拟机会进行默认处理,调用了默认异常处理机制,导致程序停止),并将之交给catch(捕获),此时

Exception e=new ArithmeticException(),然后是执行catch里的语句,即System.out.print("over")。

注意:System.out.println("x="+x)并没有执行,因为在div(4,0)处发生异常,进行了程序的跳转。

注意:已知Exception e=new ArithmeticException()(父类的引用接收子类对象),对捕获到的异常对象存在一些常见的操作方法:

        String getMessage()    作用:获取异常信息,应用:System.out.print(e.getMessage()),输出:/zero;

        String toString()    作用:打印异常对象的字符串表示形式 ,应用:System.out.print(e.toString)或System.out.print(e),输           出:java.lang.ArithmeticException: /zero(比getMessage()更全面,异常名字:异常信息);

        printStackTrace()    作用:打印堆栈中的跟踪信息,应用:因其无返回值,所以不要放在输出语句中输      出System.out.print(e.printStackTrace())

        

异常(一)