栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-11-12 Java 异常概述 throws try..catch finally(final、finally、finalize的区别)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-11-12 Java 异常概述 throws try..catch finally(final、finally、finalize的区别)

异常处理机制:让程序更健壮,服务器不会因为遇到异常而宕机!

int a=10;
int b =0;
int c=a/b;

有异常发生其实是底层new了一个异常对象,打印出来了。

Java的异常处理机制

UML图如下所示:

左分之Error不可以处理,都是直接return的,退出jvm虚拟机 ,右分之Exception是可以处理的
所有RuntimeExpection的直接子类是运行时异常
所有Exception的直接子类是编译时异常(编译时异常又称为受检异常/受控异常:CheckedException)
·编译时异常不是在编译阶段发生的,编译时异常是表示必须在编写程序的时候预先对这种异常处理,如果不处理,编译器报错
·运行时异常(运行时异常又称为非受检异常/非受控异常:UncheckedException)在编写程序阶段可以处理也可以不处理
所有异常都是发生在运行阶段的(因为要new异常对象)

·编译时异常与运行时异常的区别?
编译时异常发生的概率比较高
运行时异常发生的概率比较低

java语言中对异常的处理包括两种方式:
·第一种方式:在方法声明的位置上,使用throws关键字,抛给上一级(抛别的异常不行,只能抛此异常或者其父类异常)
·第二种方式:使用try…catch语句进行异常的捕捉(main方法中建议使用)
`注意:Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道了这个异常,只有一个结果:终止Java程序的执行。

throws用法:
在方法声明的位置上使用了throws ClassNotFoundException
这个代码表示doSome()方法执行过程中,有可能会出现ClassNotFoundException异常
这个异常父类是Exception,所以ClassNotFoundException属于编译时异常


try catch 语法:

e引用保存的内存地址是那个new出来异常对象的内存地址。
try…catch把异常捕获后,继续执行catch语句块后面的代码。(catch可以写多个,写多个的时候遵循从上到下,从小到大原则)
注意:只要异常没有捕捉,采用上报的方式,此方法的后续代码不会执行。
另外注意:try语句块中的某一行出现异常,该行后面的代码不会执行。
在jdk8中新特性可以在异常中加“|”来catch多个异常。
方法选择:如果需要调用者处理,则上报;否则Try Catch;

异常对象有两个非常重要的方法:
获取异常简单的描述信息:
String msg = exception.getMessage();
打印异常追踪的堆栈信息:
exception.printStackTrace();一般使用这个


运行结果:

查看异常信息,应该从上往下看跳过SUN公司的代码,看自己的第一行代码。
//解决异常的两种方式:

  1.在方法声明上继续throws  2.try{}... catch(){}
    public static void main(String[] args) throws ClassNotFoundException{
        try {
            m1();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    private static void m1() throws FileNotFoundException {
        m2();
    }

    private static void m2() throws FileNotFoundException {
        m3();
    }

    private static void m3() throws FileNotFoundException {
        new FileInputStream("E:\得邦照明公司\2021.11.8-11.12\11.12")
    }

关于try… catch中的finally子句:
在finally子句中的代码是最后执行的,并且是一定会执行的,即使try语句块中的代码出现了异常。
`finally子句必须和try一起出现,不能单独编写。(try 也不能单独使用)

流使用完需要关闭,因为流是占用资源的,而try中出现异常有可能会导致关闭流的语句无法执行,所以需要finally语句(需要注意:将声明变量放在try语句块外面,这样才可以在finally中使用。)


注意 退出jvm虚拟机 finally语句块就不执行了

注意一个面试题:

最后得出i是100,通过反编译(.class文件---->.java文件)之后效果如下:

它底层改了代码使得语法规矩还能行得通。

final、finally、finalize的区别
1.final是关键字 赋值一次就不能再改变
2.finally 也是关键字,和try联用,一定会执行的语句块
3.finalize()是Object类中 的一个方法。作为方法名出现,是标识符
此方法是jvm的GC垃圾回收器负责调用
重点掌握:
自定义异常:throw 手动抛出异常
语句:throw new FileNotFoundException(“异常信息”)
1.编写一个类继承 Exception或者RuntimeException
2.提供两个构造方法,一个无参数的,一个带有String参数的
在实际开发中应用可以自定义异常解决如栈满时再压栈提示异常 不终止程序。
在方法覆盖中,重写之后的方法不能比重写之前的方法抛出更多(更宽泛)的异常,可以更少。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489092.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号