提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
1.异常的概述和异常的体系结构
异常概述: 在Java语言中,将程序执行中发生的不正常情况称为“异常” 。 (开发过程中的语法错误和逻辑错误不是异常)
Java程序在执行过程中所发生的异常事件可分为两类:
①Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源 耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性 的代码进行处理。
②Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使 用针对性的代码进行处理。
异常体系结构:
编译时异常、运行时异常:
JVM异常处理方式:
1. 立刻终止程序
2. 在控制台打印了异常的信息
a. 异常的类型 -> java.lang.ArithmeticException
b. 异常的产生原因 -> / by zero
c. 异常产生的代码位置 -> at f_exception_jvm.Demo.main(Demo.java:7)
d. 异常产生的线程 -> Exception in thread "main"
e. 以红色字体打印 -> System.err
f. 开启了新的线程进行错误信息的打印
3. JVM会在堆内存中创建一个此异常类型的对象
常见的异常:
java.lang.RuntimeException
ClassCastException
ArrayIndexOutOfBoundsException
NullPointerException
ArithmeticException
NumberFormatException
InputMismatchException
。。。
java.io.IOExeption
FileNotFoundException
EOFException
java.lang.ClassNotFoundException
java.lang.InterruptedException
java.io.FileNotFoundException
java.sql.SQLExceptio
2.异常处理的方式
方式一:通过throws关键字来向上抛出异常
定义格式:[权限修饰符] 返回值类型 方法名 throws 异常类名(参数列表){}
注意:
这个throws格式是跟在方法的括号后面的
编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案, 在方法上进行显示声明,将来谁调用这个方法谁处理
运行时异常因为在运行时才会发生,所以在方法后面可以不写,运行时出现异常默认交给jvm处理
方式二:通过try catch方式来捕获异常
定义格式:
try{
// 可能出现异常的代码块
}catch(异常类名 变量名){
// 异常处理
}finally{
// 无论异常是否处理该代码块都执行
}
执行流程 :
1. try中有异常,catch捕获到
a . 在try中遇到异常代码,立刻终止try中代码执行
b . 进入到catch中执行异常的解决方案
c . 执行try..catch后方的其他代码
2. try中无异常
a. 正常执行try中所有代码
b. 执行try..catch后方的其他代码 //不执行catch中的解决方案
3. try中有异常,catch没有捕获到
a. 立刻把异常交付给JVM处理
b. 按照JVM处理异常的方式处理异常 //看不到try..catch后方的其他代码
4. try中有异常,catch捕获到,catch中有异常
a . 在try中遇到异常代码,立刻终止try中代码执行
b . 进入到catch中执行异常的解决方案
c. 遇到catch中异常,因为没有人处理,JVM介入了
d. 按照JVM处理异常的方式处理异常 //看不到catch异常后方的代码,也看不到
try..catch后方的其他代码
注意事项 :
1. 一个try中可以写多个catch,但是只能捕获一个异常 // 哪个异常先出来
2. 可以先捕获子类型异常,再捕获父类型异常 // 不可以先捕获父类型异常再捕获子类型异常
3. 捕获父类型异常,子类型异常也一并被捕获了 //多态
4. 不可以在一个catch中捕获多个异常
throw关键字:抛出一个异常
格式 :
throw new 异常();
这个格式是在方法内的,表示当前代码手动抛出一个异常,下面的代码不用再执行了
Throwable成员方法
getMessage() : 返回此throwable详细字符串信息
toString() : 返回简短的描述
printStrackTrace() : 将错误信息打印到控制台
throw与throws区别
throws : 抛出异常
位置 : 方法的声明上,形参的后面
作用 : 把异常抛给调用者处理
格式 :
权限修饰符 状态修饰符 返回值类型 方法名(形式参数列表) throws 异常的类型{
//方法体
}
throw : 暴露异常
位置 : 方法内(某个条件下)
作用 : 把创建的异常对象暴露给jvm
格式 :
if(某个条件){
throw new 异常类型("异常的错误信息");
}
3.自定义异常
概述: 当Java中没有满足我们需求的异常,我们就可以自己定义一个异常。
自定义异常类的过程:
a、创建一个类,并继承一个异常类
b、提供有参、无参构造
使用方式:
通过throw关键字进行抛出
/**
* 自定义异常类
* 步骤 :
* 1.自定义一个异常类,继承一个异常。
* 2.提供一个空参和一个有参构造
* 3.通过throw关键字调用
*/
public class Demo01 {
public static void main(String[] args) throws MyException {
// 判断假如一个人的年龄是否为负数,若是触发年龄异常
int age = -10;
isAge(age);
}
public static void isAge(int age) throws MyException {
if (age<0){
throw new MyException("年龄异常");
}
}
}
// 1.定义一个异常类,继承一个异常
class MyException extends Exception{
public MyException() {
}
public MyException(String message) {
super(message);
}
}
本文含有隐藏内容,请 开通VIP 后查看