又到了开心的写博客时间!
这次的内容就围绕异常处理这一块展开吧!
1.java Error类和Exception类的区别?
(1)Error是所有错误类的祖先类,Exception类是所有异常类的祖先类,二者是平行类,都是Trowable类的子类。
(2)error类不是程序需要捕获和进行处理的,当error发生的时候,程序便会终止;
exception类程序可以进行捕获和处理,当异常发生的时候,虚拟机系统会根据异常的类型,产生相应的异常对象,程序会应对这些异常对象进行相应的处理
2.异常处理的两种方式及区别?
处理异常的两种方式分别是抛出和捕获
(1)抛出:
隐式抛出:
b为0,处以一个为零的数便会出现除0异常;但是没有声明此处会出现异常,为隐式的抛出(所给例子较简单,异常很明显,但在实际应用情况下,当代码块较大较多的时候,就难以看出。只要是没有声明的,都算隐式抛出异常)
显式抛出:
则需将public static void main(String[] args)改为
public static void main(String[] args)throws ArithmeticException
(2)捕获:一般用try-catch-finally来捕获异常处理
语法结构为:
finally是这个语句块的统一出口,一般用于一些善后的操作,如释放资源,关闭文件等,是可选的部分,一旦选定,必定执行。
例如:
除零异常便被程序中catch语句捕获了,但是“a=s/b”后面的system语句无法执行,要希望system语句能执行,则需要异常嵌套捕获。
例如:
结果为:
两者的区别:
抛出异常是算法本身不处理这个异常,需要调用的时候处理该异常,只是提醒此处可能会有异常的产生。
捕获异常便是算法本身对该异常进行相应的处理。
3.runtime exception类中的算术异常,空指针异常,类转换异常,数组越界异常的抛出并捕获举例
(1)算术异常:常见包括除0异常,数值越界,对数真数小于0,开平方数小于0等等,除0异常见上面的例子。
(2)空指针异常:
x数组尚未分配内存空间,直接使用就会出现空指针异常
(3)类转换异常:当试图将对某个对象强制执行向下转型,但该对象又不可转换又不可转换为其子类的实例时将引发该异常
通常出现在强制类型转换的时候
例如:
父类的引用没有指向字类对象,强制类型转换便会出现类转换异常
(4)数组越界异常:
例如:
str为空数组,arg[1]发生越界;
4.自定义异常类
异常对象往往由系统自动产生,但是特殊情况下也可以自定义创建异常对象。
throw new 异常类
例如:
自定义一个异常为 c等于2
自定义异常对java系统来说不是异常,但是对于一些特定的应用程序来说就是异常,可以通过自定义异常实现功能的正常运行或者是流程的跳转。
内容不高深,还是希望对初学java的人有些帮助,若有错误,欢迎大家指正!