java异常常见格式
try(
// 创建一些Socket连接 IO输出流...
){
// 可能会出现错误 通常是访问外部文件 链接网页
}catch(Exception ex){
// catch 根据 异常类型进行匹配来捕捉 相应类型的异常
// catch到了一个其实并没有checked Exception ,java程序会报错,因为java明确知道这个异常不会发生
}
/*
还有一种处理错误的方法 就是 向上抛出异常,在方法签名里添加 throws xx异常
*/
平时处理的异常通常是 Exception
针对于 Error 异常,在代码中是无法处理的,比如常见的 内存不足,磁盘空间访问失败等等。
throwable是所有 异常的父类
包含 Error 和 Exception
而 Error 和RuntimeException 是 checked Exception的父类
按照 处理方式不同又分为2种checked 和 unchecked
checked Exception 是必须要用 以上2种 方法来处理的异常
而 unchecked Exception 是可以不用异常处理的
但是运行时会 抛出异常
比如
String str = null;
null.toLowercase();
// 此时抛出了 nullpointerException
自定义异常
java给我们封装了常见的异常类,如果业务上有需要,可以创建自己的异常类,把类型,错误信息和出错时的调用栈抛出。
public class MyRuntimeException extends RuntimeException{
//可以用 IDE 自动生成
public MyRuntimeException (){}
public MyRuntimeException (String message){
super(message);
}
public MyRuntimeException (String message, Throwable cause){
super(massage,cause);
}
public MyRuntimeException (Throwable cause){
super(cause);
}
}
// 封装好 上面的类
public void callThrowRTException(){
try{
// 下列会抛出 nullpointerException
Object n = null;
n.toString();
}catch(Exception ex){
// 捕捉到 异常之后 抛出 自定义的异常类
throw new MyRuntimeException(" 执行callThrowRTException 出错",ex);
}
}
完整形式 Try - catch - finally
3 种形式
try {
}catch{
}finally{
finally 里 最好不要写 return 语句。
若写了有return 则会把 try,catch的语句覆盖掉,相当于无视try ,catch中的return。
}
try{
}catch(**ClassNotFoundException** e){
}catch(**IOException** e){
}
// 简化 版本:
try{
}catch(ClassNotFoundException | IOException e){
}
catch 的类型中不能有多种可能,不然会报错
比如 catch了Exception 就不能catch ClassNotFoundException
在 try ,catch 中有return 变量值A,finally中在对 变量A进行赋值,此时赋值是无效的。
注意 事项
不能把 异常当做 凌波微步 ,充当方法之间的跳转手段。
因为异常捕捉 非常消耗 资源。