异常

2021.02.27
第21次记录
今天吴孟达竟然走了,童年的回忆啊

课堂笔记:
1 java的异常处理机制
1.1 异常在java中以类和对象的形式存在,异常的继承结构可以使用UML图来描述
UML图工具有:Rational Rose(收费的)、starUML等…
Object
Object下有Throwable(可抛出的)
Throwable下有两个分支:Error(不可处理,直接退出JVM)和Exception(可处理的)
Exception下有两个分支:
Exception的直接子类:编译时异常(要求程序员在编写程序阶段预先对这些异常进行处理)
RuntimeException:运行时异常(在编写程序阶段程序员可以预先处理,也可以不管)
1.2 编译时异常和运行时异常,都是发生在运行阶段,编译阶段异常是不会发生的。
编译时异常因为什么而得名?
因为编译时异常必须在编译阶段预先处理,如果不处理编译器报错,因此得名。
所有异常都是在运行阶段发生的。因为只有程序运行阶段才可以new对象,因为异常的发生就是new异常对象。
1.3 编译时异常和运行时异常的区别?
编译时异常一般发生的概率比较高,运行时异常一般发生的概率比较低。
1.4 编译时异常又叫受检异常、受控异常。
运行时异常又叫未受检异常(UnCheckedException)、非受控异常。
1.5 java语言中对异常处理有两种方式:
第一种:在方法声明的位置上,使用throws关键字,抛给上一级;
第二种:使用try…catch方式进行异常捕捉。
异常发生之后,如果我选择了上抛,抛给了我的调用者,
调用者需要对这个异常继续处理,那么调用者处理这个异常同样有两种处理方式。
1.6 注意:java中如果发生异常之后如果一直上抛,最终抛给了main方法,main方法继续
上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果。终止java程序的执行。
2.什么是UML?有什么用?
2.1 UML是一种统一建模语言。
一种图表式语言(画图用的)。
2.2 UML不只是java中使用。只要是面向对象的编程语言,都有UML。
一般画UML图的都是软件架构师或者是系统分析师。软件设计人员使用UML。
在UML图中可以描述类和类之间的关系,程序执行的流程,对象的状态等

代码演示1:

public class ExceptionText02 {
   //第一种方式
   /* public static void main(String[] args) throws ClassNotFoundException{
        doSome();
    }*/
    //第二种方式
   public static void main(String[] args) {
       try {
           doSome();
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       }
   }
    public static void doSome() throws ClassNotFoundException{
        System.out.println("dosome");
    }
}

输出结果:
dosome

代码演示2:

public class ExceptionText03 {
    public static void main(String[] args) {
        System.out.println("main begin");
        //这里一般不建议继续上抛给main()方法,因为一旦给了main方法就会继续抛给JVM,最后只能终止程序。
        //所以,一般main方法中的异常建议使用try...catch进行捕捉,main不继续上抛。
        //这里采用第二种方法:
        try {
            m1();
        } catch (FileNotFoundException e) {
            System.out.println("文件不存在,可能路径错误");
        }
        System.out.println("main over");
    }

    private static void m1() throws FileNotFoundException {
        System.out.println("m1 begin");
        m2();
        System.out.println("m1 over");
    }
    /*这抛IOException可以是因为,它是FileNotFoundException的父类。
    IOException包括FileNotFoundException。
    直接抛Exception也可以,因为Exception包括了所有的异常。
    throws也可以抛多个异常,中间用逗号隔开*/
    private static void m2() throws FileNotFoundException{
        System.out.println("m2 begin");
        m3();
        System.out.println("m2 over");
    }

    protected static void m3() throws FileNotFoundException{
        System.out.println("m3 begin");
        //创建一个输入流对象,该流指向一个文件
        //采用第一种方法:在方法声明的位置上上抛
        new FileInputStream("E:\\develop\\HelloWorld.java");
        System.out.println("m3 over");
    }
}

输出结果:
main begin
m1 begin
m2 begin
m3 begin
m3 over
m2 over
m1 over
main over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值