evansyangs evansyangs
首页
分类
标签
归档
GitHub (opens new window)

Evan Yang

摸鱼小能手
首页
分类
标签
归档
GitHub (opens new window)
  • Java入门系列
  • 初探JAVA

  • 再探Java

  • 深入Java

    • 深入Java
    • 异常与异常处理
      • 1. 异常简介
      • 2. Java中使用try..catch..finally实现异常处理
      • 3. Java中的异常抛出以及自定义异常
      • 4. Java中的异常链
      • 5. 实际应用中的经验总结
    • Java中的字符串
    • Java中必须了解的常用类
    • Java中的集合框架(上)
    • Java中的集合框架(中)
    • Java中的集合框架(下)
目录

异常与异常处理

  • 异常简介:异常处理的作用、Java异常体系结构简介
  • 处理异常:try-catch以及try-catch-finally、抛出异常、自定义异常、异常链
  • 这篇博客有助于加深对Java中的异常理解 (opens new window)

# 1. 异常简介

异常:有异于常态,和正常情况不一样,有错误出现。阻止当前方法或作用域,称之为异常。

  • Throwable: (1). Error:虚拟机错误(VirtualMachineError)、线程死锁(ThreadDeath) (2). Exception: a. 非检查异常(RuntimeException):空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、类型转换异常(ClassCastException)、算术异常(ArithmeticExceptior) b. 检查异常(CheckException):文件异常(IOException)、SQL异常(SQLException)

# 2. Java中使用try..catch..finally实现异常处理

处理异常 try-catch以及try-catch-finally

try{
    //一些会抛出异常的方法
}catch(Exception e){
    //处理该异常代码块
}catch(Exception2 e){
    //处理Exception2代码块
}...(n个catch块)...{
}finally{
    //最终将要执行的一些代码
}
1
2
3
4
5
6
7
8
9
10

# 3. Java中的异常抛出以及自定义异常

  • 异常抛出 throw —— 将产生的异常抛出(动作) throws —— 声明将要抛出何种类型的异常(声明)
public void 方法名(参数列表)
    throws 异常列表{
    //调用会抛出异常的方法或者:
    throw new Exception();
    }
1
2
3
4
5
  • 自定义异常
class 自定义异常类 extends 异常类型{

}
1
2
3

例:“喝大了”异常

public class DrunkException extends Exception{
	public DrunkException(){
	}
	public DrunkException(String message){
		super(message);
	}
}
1
2
3
4
5
6
7

# 4. Java中的异常链

public class ChainTest {
	/*
	 * test1():抛出“喝大了”异常
	 * test2():调用test1(),捕获“喝大了异常”,并且包装成运行时异常,继续抛出
	 * main方法中,调用test2(),尝试捕获test2()方法抛出的异常
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ChainTest ct = new ChainTest();
		try {
			ct.test2();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void test1() throws DrunkException{
		// TODO Auto-generated method stub
		throw new DrunkException("喝车别开酒");
	}
	
	public void test2() {
		try {
			test1();
		} catch (Exception e) {
			// TODO: handle exception
			RuntimeException newExc = new RuntimeException(e);
		//	newExc.initCause(e);
			throw newExc;
		}
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 5. 实际应用中的经验总结

  1. 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
  2. 在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
  3. 对于不确定的代码,也可以加上try-catch,处理潜在的异常
  4. 尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
  5. 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  6. 尽量添加finally语句块去释放占用的资源
编辑 (opens new window)
#Java
上次更新: 2021/02/16, 14:20:12
深入Java
Java中的字符串

← 深入Java Java中的字符串→

最近更新
01
Dell7472黑苹果
03-27
02
上手HackMD
04-13
03
Windows Terminal设置
03-14
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Evan Yang
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式