网站首页 > 技术文章 正文
1、Java 中的异常处理机制的简单原理和应用?
答:当JAVA 程序违反了JAVA 的语义规则时,JAVA 虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2 种情况。一种是JAVA 类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null 的对象时会引发NullPointerException。另一种情况就是JAVA 允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw 关键字引发异常。所有的异常都是java.lang.Thowable 的子类。
2、error 和exception 有什么区别?
答:error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。
3、try {}里有一个return 语句,那么紧跟在这个try 后的finally {}里的code会不会被执行,什么时候被执行,在return 前还是后?
答:会执行,在return 前执行。
4、JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try 块中可以抛出异常吗?
答:Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java 中,每个异常都是一个对象,它是Throwable 类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java 的异常处理是通过5 个关键词来实现的:try、catch、throw、throws 和finally。一般情况下是用try 来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理;
try 用来指定一块预防所有“异常”的程序;
catch 子句紧跟在try 块后面,用来指定你想要捕捉的“异常”的类型;
throw 语句用来明确地抛出一个“异常”;
throws 用来标明一个成员函数可能抛出的各种“异常”;
Finally 为确保一段代码不管发生什么“异常”都被执行一段代码;
可以在一个成员函数调用的外面写一个try 语句,在这个成员函数内部写另一个try 语句保护其他代码。每当遇到一个try 语句,“异常”的框架就放到堆栈上面,直到所有的try 语句都完成。如果下一级的try 语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try 语句。
5、运行时异常与一般异常有何异同?
答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
6、给我一个你最常见到的runtime exception?
答:ArithmeticException, ArrayStoreException,
BufferOverflowException,BufferUnderflowException,
CannotRedoException, CannotUndoException,
ClassCastException, CMMException,
ConcurrentModificationException,DOMException,
EmptyStackException, IllegalArgumentException,
IllegalMonitorStateException, IllegalPathStateException,
IllegalStateException, ImagingOpException,
IndexOutOfBoundsException,
MissingResourceException,
NegativeArraySizeException,NoSuchElementException,
NullPointerException, ProfileDataException,
ProviderException, RasterFormatException,
SecurityException,SystemException,
UndeclaredThrowableException,
UnmodifiableSetException, UnsupportedOperationException
7、final, finally, finalize 的区别?
答:final:修饰符(关键字);如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承,因此一个类不能既被声明为abstract的,又被声明为final 的;将变量或方法声明为final,可以保证它们在使用中不被改变;被声明为final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改;被声明为final 的方法也同样只能使用,不能重载。finally:再异常处理时提供finally 块来执行任何清除操作;如果抛出一个异常,那么相匹配的catch 子句就会执行,然后控制就会进入finally 块(如果有的话)。
8、try-with-resources块
这个功能特性实在Java9中现在的,通过内置的支持,可以提高代码的简洁与高效,参考示例如下:
当您使用资源(如文件,SQL语句等)时,必须使用finally块并编写几行样板代码来关闭资源。 使用资源的典型代码如下所示:
AnyResource aRes; try { aRes = create the resource...; // Work with the resource here } finally { // Let us try to close the resource try { if (aRes != null) { aRes.close(); // Close the resource } } catch(Exception e) { e.printStackTrace(); } }
使用try-with-resources块,可以按如下方式编写前面的代码:
try (AnyResource aRes = create the resource...) { // Work with the resource here. The resource will be closed automatically. }
哇! 以前要有14行代码的代码模式,现在用try-with-resources块只要在三行代码中编写相同的逻辑。 当程序退出块时,try-with-resources块会自动关闭资源。 try-with-resource可以具有一个或多个catch块和/或finally块。
从表面上看,try-with-resources块就像前面的例子中一样简单。但是,它出现的一些细微之处,需要详细讨论。这个具体内容,我们另行篇幅讲解。
本次内容就先写到这里了。
猜你喜欢
- 2024-10-04 Netty:数据传输载体- ByteBuf 详解
- 2024-10-04 JDK源码阅读:ByteBuffer(jdk源码阅读顺序以及优先级)
- 2024-10-04 初级java程序员面试题 项目业务逻辑问题 培训班 基础题 开发
- 2024-10-04 好文推荐:从JVM模型谈十种内存溢出及解决方法
- 2024-10-04 「系列教程」手写RPC框架(2) BIO模型替换成NIO模型学习
- 2024-10-04 详解Java NIO中的Buffer、Channel 和 Selector
- 2024-10-04 Java常见的面试题(java面试常见问题与答案)
- 2024-10-04 「系列教程」手写RPC框架(2) NIO模型学习
- 2024-10-04 什么是缓冲区溢出攻击?(缓冲区溢出攻击代名词)
- 2024-10-04 java教程、JAVA学习 |JAVA面试题大全(高级)
- 10-02基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- 10-02Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- 10-02AWD-LSTM语言模型是如何实现的_lstm语言模型
- 10-02NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 10-02使用ONNX和Torchscript加快推理速度的测试
- 10-02tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- 10-02Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- 10-02Gateway_gateways
- 最近发表
-
- 基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- AWD-LSTM语言模型是如何实现的_lstm语言模型
- NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 使用ONNX和Torchscript加快推理速度的测试
- tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- Gateway_gateways
- Coze开源本地部署教程_开源canopen
- 扣子开源本地部署教程 丨Coze智能体小白喂饭级指南
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)