异样
1. 异样的概述
异样是一些用来封装错误信息的对象. 它由异样的类型、提示信息、报错的行号提醒三局部组成
2. 异样的继承构造
Throwable: 顶级父类
--Error: 零碎谬误, 无奈修复
--Exception: 能够修复的谬误
--RunTimeException
--ClassCastException
--ClassNotFoundException
--...
3. 常见解决异样的两种形式
1). 捕捉异样(try catch)– 间接解决可能呈现的异样.
try{须要捕捉的代码}catch(异样类型 异样名){解决计划}
2). 申明异样 (throws)– 申明通知调用者可能的异样,裸露问题,调用者本人解决.
在可能会会产生异样的办法上增加代码:
throws 异样类型
例如:public static void main(String[] args) throws Exception{}
4.throw 和 throws 的区别
1).throw 是语句抛出一个异样
语法:throw 异样对象
throw e;
2).throws 是办法可能抛出异样的申明(用在申明办法时,示意该办法可能要抛出异样)
语法:(修饰符)(办法名)([参数列表])[throws(异样类)]{…}
public void doA(int a) throws Exception1,Exception3{…}
(1)、throws 呈现在办法函数头;而 throw 呈现在函数体。
(2)、throws 示意出现异常的一种可能性,并不一定会产生这些异样;throw 则是抛出了异样,执行 throw 则肯定抛出了某种异样。
(3)、两者都是消极解决异样的形式(这里的消极并不是说这种形式不好),只是抛出或者可能抛出异样,然而不会由函数去解决异样,真正的解决异样由函数的下层调用解决。
5. 什么状况下不会执行 finally 代码块
1). 虚拟机被终止 System.exit().
System.exit(0)的作用是停止以后正在运行的 Java 虚拟机。如果虚拟机被停止,程序也会被终止,所以在它前面的代码都不会被执行,即使是 finally 代码块也同样不会执行。
2).try 代码块有限循环.
这是因为业务逻辑的起因,始终在执行 try 代码块的业务并且永远无奈终止,try 代码块都没执行完,天然无奈执行 finally 代码块。
3). 在被停止的守护线程内.
Java 中的线程能够分为守护线程和用户线程。当程序中所有的用户线程都终止时,虚构机会 kill 所有的守护线程来终止程序。
当 try-finally 代码块存在于守护线程,而此守护线程因用户线程被销毁而终止时,该守护线程不会继续执行。
假如用户线程 (main 线程) 执行结束后,作为守护线程的 thread 对象中的 try 代码块还没有执行完结,当用户线程执行完结后,此时已不存在用户线程,虚构机会强制停止守护线程 thread,导致 finally 代码块不会被执行。
private static void demo() {Thread thread = new Thread(() -> {
try {System.out.println("执行 try 代码块,期待 2s,期待主线程执行完结...");
Thread.sleep(2000);
} catch (InterruptedException e) {e.printStackTrace();
} finally {System.out.println("开始执行 finally 代码块");
}
});
thread.setDaemon(true);
thread.start();}
// 控制台输入后果: 执行 try 代码块,期待 2s,期待主线程执行完结...
6. 常见的启动异样
1).
2).
3).
4).
5).
6).
7).
8).
9).