在Throwable中有两个子类
1.Error类
2.Exception类
在Error类中还存在很多的子类,Error异常代码严重错误,比如JVM内部出现错误,一般这种错误程序是不法处理的
具体类的详细信息请查阅java se帮助文档
在开发中不要使用Throwable类,因为它的继承体系太大了,这些异常我不需要要全部只记住,只是在发生异常的时候,查阅帮助文档即可,但是在Exception中出先的异常我们能做出处理,就要尽量的做出处理。
捕获异常:
try{
可能发生异常的代码
比如:Inti=1/0;
}
catch( Exception e){
捕获到的异常,在这里我们可以做出异常处理,当捕获到一个异常,也就意味这创建了一个异常对象
}finaly{
无论什么时候都会执行,在这里如果是操作数据库,常常就会在这里关闭数据库
}
声明异常:
可以在方法上使用throws关键字来声明异常和抛出异常,仅仅只是声明异常,而对异常不做出处理,并且throws可以抛出多个异常,如果在外面调用方法的时候,必须使用try catch来捕获异常,和继续使用throws关键字,继续往上抛,直到抛给虚拟机,JVM会给我们做出异常的处理、
抛出异常:
throw关键字也是来异常的但是throws和throw的区别在于throw需要结合try catch联合已使用,当捕获到异常信息,需要用throw关键子,来抛出异常信息,其实也可以不联合使用try catch语法,但是必须要创建一个对象,因为一个异常就代表一个对象。需要手动创建一个Exception对象
ExceptionàRuntimeException类:
在Integer中的parseInt方法是这样声明的
public static intparseInt(String s) throws NumberFormatException,在这里java开发者,声明了一个异常。
但是我们在使用Integer.parseInt();方法的时候并没有捕获异常或者抛出异常,程序还是正常的运行,由此证明只有是需要是RuntimeException异常就不需要声明异常或者抛出异常.
异常链
try {
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
在铺货异常的时候应该按照,由小到大的方式捕获这样才可以更好的进行处理,比如时Sql 异常,这些异常信息是不可以向外暴漏的,所以要尽量的处理有可能发生的异常,而对于Sql 异常属于管理员能看见的信息,所以在使用的时候,要多异常进行记录,对于用户可以做出友好的提示,throw new Exception("数据库连接异常,请联系管理员");而对于异常信息将使用异常记录的方法, 而对于Exception 这样的异常,属于未知异常所以在处理的时候不会一下子很快的找到出错点。
帮助文档的解释:
RuntimeException是那些可能在Java虚拟机正常运行期间抛出的异常的超类。
可能在执行方法期间抛出但未被捕获的RuntimeException的任何子类都无需在 throws子句中进行声明。
常见异常:
1.ArithmeticException当出现异常的运算条件时,抛出此异常。比如除以0
2. ArrayIndexOutOfBoundsException非法越界、比如数组
3. ArrayStoreException数组类型不匹配
4. ClassCastException类型转换错误
5. IndexOutOfBoundsException索引越界
6. NullPointeException空指针异常
7. StringIndexOutBounds字符串索引越界
8. UnsupportedOperationException操作错误, 如下
String []listAarr = new String[2];
List list = Arrays.asList(listAarr);
list.add("sss");
9.CalssNotFoundException找不到指定类
10.NotSuchMethodException找不到指定的方法,在JSP常常出现