package com.exception.demo01;
/**
* @ClassName: Demo01
* @Author: 南冥有猫不须铭
* @Date: 2021/4/27-0:48
* @Description: Error和Exception
*/
public class Demo01 {
public static void main(String[] args) {
new Demo01().a(); //new一个匿名内部类 //*Error
System.out.println(11/0); //ArithmeticException
}
//错误(Error) 递归循环依赖
public void a(){
b();
}
public void b(){
a();
}
}
package com.exception.demo01;
/**
* @ClassName: Test
* @Author: 南冥有猫不须铭
* @Date: 2021/4/27-23:57
* @Description: 捕获和抛出异常
*/
public class Test {
public static void main(String[] args) {
try { // 一般情况下遇到异常,程序会停止,加了try、catch捕获之后,程序会正常地继续执行下去
new Test().test(1,0);
} catch (ArithmeticException e) {
e.printStackTrace();
}
}
//假设这个方法中,处理不了这个异常。 在方法上抛出异常(throws)
public void test(int a,int b) throws ArithmeticException{
if(b==0){ //throw throws
throw new ArithmeticException();//主动地抛出异常,一般在方法中使用(throw)
}
System.out.println(a/b);
}
/*
//假设要捕获多个异常: 从小到大!
try { //try 监控区域 (代码块) try中的代码出现异常,捕获区域就会去捕获异常
//System.out.println(a/b); // ArithmeticException异常 ---> "程序出现异常,变量b不能为0"
//new Test().a(); // *Error错误
}catch(Error e){ //catch(想要捕获的异常类型 _) 捕获异常,若出现异常,执行代码块中内容
System.out.println("Error");
}catch (Exception e){
System.out.println("Exception");
}catch (Throwable t){ // Throwable ---> 最大的异常(包括Error和Exception) 写catch捕获异常时,要把最大的异常放在最下面(小的异常在上面,层层递进)
System.out.println("Throwable");
} finally { //finally 处理善后工作 (无论程序出不出异常,都要执行finally中的内容)
System.out.println("finally");
}
*/
//finally 可以不要,但try 、catch 一定要有
//finally:假设一些IO流,或者和资源相关的东西,关闭操作 放在finally中(善后)
/*
public void a(){ //互相调用 错误
b();
}
public void b(){
a();
}
*/
}
package com.exception.demo01;
/**
* @ClassName: Test2
* @Author: 南冥有猫不须铭
* @Date: 2021/4/28-1:34
* @Description: 捕获和抛出异常
*/
public class Test2 {
public static void main(String[] args) {
int a = 1;
int b = 0;
//快捷键:(选中代码后)Ctrl + Alt + t ---> 选择对应的方法(try/catch/finally),自动包裹代码
try {
System.out.println(a/b);
} catch (Exception e) {
System.exit(1); // 可以自己加逻辑判断,让程序结束
e.printStackTrace(); //打印错误的栈信息
} finally {
}
}
}