异常
影响程序正常执行的事件分为2大类,错误(Error)和异常(Exception)
出现错误后程序员要么改动源吗要么改动机器配置,无法用程序解决
1.1.异常的分类
- Java异常体系 Throwable时Exception(RuntimeException和其他子类)和Error的直接父类
- 异常也分为2类:运行时异常和非运行时异常
- 运行时异常可以不处理编译也能通过;但是非运行时异常一定要处理编译才能通过
1.2.异常的处理
1.2.1. try…catch…finally
-
try块
一般用来监视有可能产生异常的代码部分;当出现异常的时候会跳出try语句块,也就是说出现异常的语句后面 的代码都不会执行了
-
catch 块
捕捉异常
当异常产生后,catch块捕捉异常,并在其中对异常进行处理。catch小括号中的类型和异常类型匹配的时候,能够捕获到异常了,程序正常执行;否则的化程序异常退出;
-
finally块
是无论如何都会执行了,不管有没有报错,不管有没有抓到异常,也不管有没有return语句都会执行的;不能单独存在;文件的释放,连接池的关闭
try { System.out.println(args[0]); } catch (NullPointerException e) { // 记录到日志 做处理 e.printStackTrace(); System.out.println("抓到异常了 !!!!"); return; } finally { //释放资源的 System.out.println("一定会执行的代码块"); }
-
多重catch块
在try块中的代码段将有可能产生多种不同类型的异常,而我们又需要针对不同的异常类型进行不同的处理方式,那么我们就可以使用多重catch块,来分别捕获不同类型的异常。
类型的顺序是小类型在上面,大类型在下面
public static void main(String[] args) { System.out.println(args.length); try { int a = Integer.parseInt(args[0]); } catch (ArrayIndexOutOfBoundsException e) { e.printStackTrace(); } catch (NumberFormatException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } System.out.println("+++++++"); }
1.2.2.throw和throws关键字,把异常对象抛出去
- throw
- 运行时异常对象是JVM创建的,由JVM抛出
- throw用于自主抛出异常,程序遇到throw后 后面的代码不再执行
public static void method(int a, int b) throws Exception {
if (b == 0) {
// 把这个异常对象抛出去
throw new Exception("用户自己抛出的异常");
} else {
System.out.println(a / b);
}
System.out.println("+++++++++");
}
- throws
- 用于方法声明处,表示此方法有可能抛出的异常
- 如果某个方法中的代码有可能引发异常,可以使用try/catch块进行处理,这种处理方式称为“内部处理”;
- 如果不方便在方法内部进行处理,也可以将异常(非运行时异常)往方法外部传递,这就要使用到关键字throws;throws用于将方法内部产生的异常抛给上层调用;
1.2.3.用户自定义异常类型
1.定义一个异常类型直接继承异常体系中的任何类,编写一个无参构造和一个有参构造
public class CustomException extends Exception {
public CustomException() {
}
public CustomException(String message) {
super(message);
}
}
2,使用
public class ExceptionDemo {
public static void main(String[] args) {
try {
div(10, 0);
} catch (CustomException e) {
// e.getMessage是获取异常信息
System.out.println(e.getMessage());
// e.printStackTrace() 打印详细的堆栈报错信息
e.printStackTrace();
}
System.out.println("14===line");
}
public static void div(int a, int b) throws CustomException {
if (b == 0) {
throw new CustomException("除数不能为0");
}
}
}
1.3.面试题-4种引用类型
引用(reference)的值代表的是某块内存地址的起始值 ,通常把这个称为引用;为了GC回收空间,
-
强引用(有用必需品)
当空间不足的时候,JVM宁可报错(OOM)也不会回收这些引用引用的对象;
-
软引用(有用非必需)
软引用引用着的对象是有用的但是非必需,所以当内存不足的时候会进行回收此引用引用着的对象
-
弱引用(非必需)
弱引用引用着的对象都是一些非必需对象,当下次GC 进行回收的时候会回收此引用引用着的对象;活不到下一次GC
-
虚引用
虚引用又称 幻影引用/幽灵引用,不影响对象的生命;只是用在当GC回收对象的时候接受系统通知
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/192960.html