Throwable是Java中专门模拟所有异常和错误的类,所有异常类都继承这个祖类
它的直接子类除RunTime Exception(运行时异常)其他都是编译时异常
是系统内部错误,比如栈内存溢出,虚拟机错误,这种情况jvm会终止程序,不需要我们操作
编译时与运行时
当异常不处理时,会终止程序运行,下面代码不执行
这里引入一个鲁棒性的概念,就是系统健壮性
相当于if(){}else{},只不过这里用在了异常,判断条件是是否发生异常,如果发生异常那么就执行catch里面的语句。
作用:这样做就不会碰到异常就结束程序声明周期了。
catch也可以写多个,那么此时就相当于if(){}else if(){}else if(){}…,格式如下:
/*
* try{
* 可能出现异常的代码;
* }catch(异常类型1 变量){
* 处理措施;
* }catch(异常类型2 变量){
* 处理措施;
* }catch(异常类型3 变量){
* 处理措施;
* }
* catch 语句可以根据代码的异常写多个
*/
注意:
1.7版本:
自1.7版本之后,try{}catch{}又增加里两个新特性。
一个就是多个catch语句,输出语句相同,那么可以用一个catch同时捕捉,之间用|隔开。
一个就是自动关闭资源。格式:try(开启资源语句位置){}catch{}。
传统关闭资源写法:
// 传统关闭资源写法
FileInputStream fis = null;
try {
fis = new FileInputStream("地址如:D:/123.txt");
// TODO 数据操作
System.out.println(fis.read());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
// 关闭资源 名.class
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
新特性写法:
try (FileInputStream fis1 = new FileInputStream("地址如:D:/123.txt");) {
// TODO 操作
// fis1.read()读取
System.out.println(fis1.read() + "---");
} catch (Exception e) {
e.printStackTrace();
}
又叫做抛异常。
用于不想处理或者没办法处理(通常在类库中)的时候,把错误信息交给调用人员。
并不会不会处理异常,只是一种提醒机制,告诉调用人员这里可能有问题
如果上家提醒了你,要么你就使用try…catch…解决,要么你就提醒下家。
public class Exception_04 {
public static void main(String[] args) {
// 还能抛,但是没实际用处
try {
m1();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("--------");
}
public static void m1() throws FileNotFoundException {
m2();
}
public static void m2() throws FileNotFoundException {
m3();
}
@SuppressWarnings("resource")
public static void m3() throws FileNotFoundException {
new FileInputStream("23");
}
}
又叫做异常原点。
常用于自定义一个异常,就是自己定义一个异常,常在写项目中用。
规定:
public class UserService {
public void m1(String name) throws NameLengthException {
if (name.length() < 6) {
//定义一个密码不能少于6位的异常
throw new NameLengthException("密码不能少于六位");
}
System.out.println("登陆成功");
}
}
public class NameLengthException extends Exception {
public NameLengthException() {
}
public NameLengthException(String s) {
super(s);
}
}