Java异常处理
异常分为两种:
Throwable类是所有异常或错误的超类。
Throwable有两个重要的子类:Exception(异常)和 Error(错误)。
Exception又分为两大类:一种是编译时异常,又称检查异常(checked Exception),
另一种是运行时异常,又称非检查异常(Unchecked Exception)。
检查异常:程序在编译时所出现的异常,一旦发出声明,必须解决。
非检查异常:程序在编译时没有进行提示的异常,可以处理也可以不处理。
一、编译时异常(checked Exception)
编译时异常是JVM在运行时发生的非程序的故障,程序无法处理的错误,表示程序在编译过程中出现的严重问题。
如:IOException 、SQLException … …
二、运行时异常(Unchecked Exception)
在程序编译时未被检查出的异常被称之为运行时异常。
JDK7及以后关闭资源方式:try-with-resource
try (一个类(接口)实现了AutoCloseable接口,就可以放入try with resource里面) {
}catch (Exception e) {
e.printStackTrace();
}
// 例:
try (Scanner scan = new Scanner(System.in);) {
System.out.println("请输入一个正整数:");
int num = scan.nextInt();
prime.doPrime(num);
}catch (ArithmeticException e) {
e.printStackTrace();
}
Java异常处理
throw与thtows关键字
throws:用于在方法上声明异常;而throw则是在在代码块中通过new关键字来抛出异常的。
异常捕获
try、catch、finally、throw、throws的用法:
throw:一般自己声明的异常。
throws:只能用与方法声明中,用来声明某个方法可能会出现异常。
try : 存放容易出现异常的代码。
catch:抓住try块中的异常,并处理。
finally:不管是否发生异常都会执行,工作中用来清理对象占用的内存。
try-catch 语句
一般我们在代码容易出现异常的情况下使用try{}catch{}关键字来捕获异常。
语法如下:
try{
// 可能发生异常的代码
} catch(Execption e) {
// 异常的处理语句
}
catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
如果代码可能出现多个异常,那么需要使用多重捕获块来捕获可能发生的异常。
语法如下:
try{
// 可能发生异常的代码
}catch(异常类型1 异常的变量名1){
// 异常的处理语句1
}catch(异常类型2 异常的变量名2){
// 异常的处理语句2
}catch(异常类型3 异常的变量名3){
// 异常的处理语句3
} ...
如果try里面的代码出现异常,这会依次(从上到下)与catch进行匹配。
注意:多重catch的时候子类异常类型放在前面,父类异常类型放在后面。
try-catch-finally 语句
检测异常,并传递给 catch 处理,并在 finally 中进行资源释放。
try{
// 可能发生异常的代码
}catch(异常类型1 异常的变量名1){
// 异常的处理语句1
}catch(异常类型2 异常的变量名2){
// 异常的处理语句2
}finally{
// 无论try中代码是否发生异常,finally中的代码始终会被执行。
}
自定义异常
语法格式:
class 自定义异常名 extends Exception或RuntimeException {
public 自定义异常名() {
// 默认调用父类无参构造方法
}
public 自定义异常名(String str) {
// 调用父类具有异常信息的构造方法
super(str);
}
}
- 如果发现代码中出现的异常在Java异常类中没有的,则需要自定义异常。
- 所有异常都必须是 Throwable 的子类。
- 如果希望写一个检查性异常类,则需要继承 Exception 类。
- 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
常见的运行时异常:
NullPointerException :空指针异常
ArrayIndexOutOfBoundsException :数组下标越界异常
ArithmeticException :算术异常
ClassCastException :类型转换异常
InputMismatchException :输入不匹配异常
RuntimException :运行时异常
常见的Error异常:
StackOverflowError :栈内存溢出错误,栈内存已经满了
OutOfMemoryError :JVM内存过小、程序不严密,产生了过多的垃圾。
Error与Exception的区别???
可以参考:https://www.cnblogs.com/lcl-dcr/p/7653274.html
Throwable类是所有异常或错误的超类。
Throwable有两个重要的子类:Exception(异常)和 Error(错误)。
Exception又分为两大类:一种是编译时异常,又称检查异常(checked Exception),
另一种是运行时异常,又称非检查异常(Unchecked Exception)。
检查异常:程序在编译时所出现的异常,一旦发出声明,必须解决。
非检查异常:程序在编译时没有进行提示的异常,可以处理也可以不处理。
一、编译时异常(checked Exception)
编译时异常是JVM在运行时发生的非程序的故障,程序无法处理的错误,表示程序在编译过程中出现的严重问题。
如:IOException 、SQLException … …
二、运行时异常(Unchecked Exception)
在程序编译时未被检查出的异常被称之为运行时异常。
JDK7及以后关闭资源方式:try-with-resource
try (一个类(接口)实现了AutoCloseable接口,就可以放入try with resource里面) {
}catch (Exception e) {
e.printStackTrace();
}
// 例:
try (Scanner scan = new Scanner(System.in);) {
System.out.println("请输入一个正整数:");
int num = scan.nextInt();
prime.doPrime(num);
}catch (ArithmeticException e) {
e.printStackTrace();
}
Java异常处理
throw与thtows关键字
throws:用于在方法上声明异常;而throw则是在在代码块中通过new关键字来抛出异常的。
异常捕获
try、catch、finally、throw、throws的用法:
throw:一般自己声明的异常。
throws:只能用与方法声明中,用来声明某个方法可能会出现异常。
try : 存放容易出现异常的代码。
catch:抓住try块中的异常,并处理。
finally:不管是否发生异常都会执行,工作中用来清理对象占用的内存。
try-catch 语句
一般我们在代码容易出现异常的情况下使用try{}catch{}关键字来捕获异常。
语法如下:
try{
// 可能发生异常的代码
} catch(Execption e) {
// 异常的处理语句
}
catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
如果代码可能出现多个异常,那么需要使用多重捕获块来捕获可能发生的异常。
语法如下:
try{
// 可能发生异常的代码
}catch(异常类型1 异常的变量名1){
// 异常的处理语句1
}catch(异常类型2 异常的变量名2){
// 异常的处理语句2
}catch(异常类型3 异常的变量名3){
// 异常的处理语句3
} ...
如果try里面的代码出现异常,这会依次(从上到下)与catch进行匹配。
注意:多重catch的时候子类异常类型放在前面,父类异常类型放在后面。
try-catch-finally 语句
检测异常,并传递给 catch 处理,并在 finally 中进行资源释放。
try{
// 可能发生异常的代码
}catch(异常类型1 异常的变量名1){
// 异常的处理语句1
}catch(异常类型2 异常的变量名2){
// 异常的处理语句2
}finally{
// 无论try中代码是否发生异常,finally中的代码始终会被执行。
}
自定义异常
语法格式:
class 自定义异常名 extends Exception或RuntimeException {
public 自定义异常名() {
// 默认调用父类无参构造方法
}
public 自定义异常名(String str) {
// 调用父类具有异常信息的构造方法
super(str);
}
}
- 如果发现代码中出现的异常在Java异常类中没有的,则需要自定义异常。
- 所有异常都必须是 Throwable 的子类。
- 如果希望写一个检查性异常类,则需要继承 Exception 类。
- 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
常见的运行时异常:
NullPointerException :空指针异常
ArrayIndexOutOfBoundsException :数组下标越界异常
ArithmeticException :算术异常
ClassCastException :类型转换异常
InputMismatchException :输入不匹配异常
RuntimException :运行时异常
常见的Error异常:
StackOverflowError :栈内存溢出错误,栈内存已经满了
OutOfMemoryError :JVM内存过小、程序不严密,产生了过多的垃圾。
Error与Exception的区别???
可以参考:https://www.cnblogs.com/lcl-dcr/p/7653274.html
原文地址:https://www.cnblogs.com/lyang-a/p/11490037.html
- 在C++中反射调用.NET(三) 使用非泛型集合的委托方法C++中的列表对象list C++传递集合数据给.NET创建泛型List实例反射静态方法反射调用索引器当委托遇到协变和逆变C++/CLI
- 如何使用树莓派自制网络监视器
- 利用雅虎小型企业服务平台的目录遍历漏洞查看客户的信用卡信息
- 【自然框架】QuickPager asp.net 分页控件的Ajax分页方式。
- 骑行在华盛顿 针对320万次共享单车骑行数据的分析
- 【自然框架】QuickPagerSQL——专门生成分页用的SQL的类库
- 【数据科学】数据科学中的 Spark 入门
- 【自然框架】QuickPager分页控件的单独的源码 V2.0.4.2。
- 用 iPhoneX 的 FaceID 刷脸解锁真的靠谱吗?
- 【自然框架】用CMS的栏目举例,聊一聊从“一层”到“三层”的变化
- java如何自定义鼠标指针
- 面向对象最重要的是“抽象”,三层最重要的也是“抽象”,没有抽象就不是真正的面向对象、三层。
- 唯一不变的就是一直在变”--“数据”的华丽“变身术”
- 借用 疯狂秀才 的页面,修改了一下自然框架后台管理的页面。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- IOC容器实现
- Docker安装mysql
- 【LeeCode 面试题】二叉树的前序遍历,中序遍历,后序遍历递归和迭代的两种实现方式
- MySQL笔记汇总
- 【DB笔试面试856】在Oracle中,如何判定实例是否运行?
- 【DB笔试面试857】在Oracle中,若一个主机上有多个Oracle实例,则如何确定哪些共享内存段属于想要清掉的实例的内存段?
- vue + flask实现邮件密码找回功能
- PicGo + Gitee 构建免费云图床
- python scipy.stats计算单样本假设检验(1 sample test)
- python scipy.stats计算双独立样本假设检验(2 sample independent test)
- 深入理解JS的事件循环
- C语言必背的18个经典程序。
- 打卡群刷题总结0811——从中序与后序遍历序列构造二叉树
- Docker服务开放了这个端口,服务器分分钟变肉机!
- Oracle私网mtu滚动修改实施方案