java 异常

Throwable类是整个Java异常体系的超类,都有的异常类都是派生自这个类。包含Error和Exception两个直接子类。数据库


Error类通常是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的致使的应用程序中断,仅靠程序自己没法恢复和预防,遇到这样的错误,建议让程序终止。
Exception是应用层面上最顶层的异常类,包含RuntimeException(运行时异常)和 Checked Exception(受检异常)。编程

 
RuntimeException是一种Unchecked Exception,即表示编译器不会检查程序是否对RuntimeException做了处理,在程序中没必要捕获RuntimException类型的异常,也没必要在方法体声明抛出RuntimeException类。通常来讲,RuntimeException发生的时候,表示程序中出现了编程错误,因此应该找出错误修改程序,而不是去捕获RuntimeException。网络

常见的Runtime异常:ide

ArithmeticException(算术异常)  1/0函数

ClassCastException (类转换异常)integer转换string异常指针

IllegalArgumentException (非法参数异常) 参数为int输出倒是stringcode

NullPointerException (空指针异常)blog


Checked Exception是相对于Unchecked Exception而言的,全部继承自Exception而且不是RuntimeException的异常都是Checked Exception。JAVA 语言规定必须对checked Exception做处理,编译器会对此做检查,要么在方法体中声明抛出checked Exception,要么使用catch语句捕获checked Exception进行处理,否则不能经过编译。继承

经常使用的Checked Exception有内存

IOException、

ClassNotFoundException 找到不到指定类

Java异常处理涉及到五个关键字,分别是:try、catch、finally、throw、throws。下面将骤一介绍,经过认识这五个关键字,掌握基本异常处理知识。

  • try       -- 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块以内,当try语句块内发生异常时,异常就被抛出。
  • catch   -- 用于捕获异常。catch用来捕获try语句块中发生的异常。
  • finally  -- finally语句块老是会被执行。它主要用于回收在try块里打开的物力资源(如数据库链接、网络链接和磁盘文件)。只有finally块执行完成以后,才会回来执行try或者catch块中的return或者throw语句,若是finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接中止。
  • throw   -- 用于抛出特定的异常。
  • throws -- 用在方法签名中,用于声明该方法可能抛出的异常。
多重catch编写注意:

catch异常控制的范围应该由小及大,若是把父类异常写到前面,会屏蔽后面的子类异常。由于一次只会有一个catch会被匹配到。

RuntimeException异常类包括运行时各类常见的异常,ArithmeticException类和ArrayIndexOutOfBoundsException类都是它的子类。所以,RuntimeException异常类的catch子句应该放在最后面,不然可能会屏蔽其后的特定异常处理或引发编译错误。

Throw: 写在函数方法内部的,抛出指定的异常。

 

Throws: 修饰函数头部

Throws抛出异常的规则:

若是想要抛出的是不受检查异常(unchecked exception),那么能够不使用throws关键字来声明要抛出的异常,编译仍能顺利经过,但在运行时会被系统抛出。好比你throws了RuntimeException,可是他是unchecked类型异常,引用时不须要用try catch包围起来。

public class ExceptionDemo2 {
	    static void throw1() throws RuntimeException {
	        System.out.println("Inside throw1 . ");
	        throw new RuntimeException("demo");
	    }
	    public static void main(String[] args){
	        throw1();
	    }
}


若是想要抛出的是检查异常(checked exception)。要么用try-catch语句捕获,要么用throws子句声明将它抛出,不然会致使编译错误。

public class ExceptionDemo2 {
	    static void throw1() throws IllegalAccessException {
	        System.out.println("Inside throw1 . ");
	        throw new IllegalAccessException("demo");
	    }
	    public static void main(String[] args){
	        try {
	            throw1();
	        }catch(IllegalAccessException e ){
	            System.out.println("Caught " + e);
	        }
	    }
}
相关文章
相关标签/搜索