JavaSE之异常处理

目录

1.什么是异常

2.异常分类

3.常见的异常类型(面试的时候常问到)

4.异常处理方式

4.1.Java处理异常的5个关键词:

4.2.异常处理方式

4.3.异常处理原则

5.程序调试


1.什么是异常

异常就是非正常情况导致程序的执行流程发生改变。

2.异常分类

Java异常继承图如下(自己画出来):

说明:

  • Error:错误,用代码处理不了,一般是虚拟机出现了问题
  • Exception:异常,用代码可以处理
  • 运行时异常:RuntimeException及其子类,开发过程中遇到的最多。编译可以通过,在运行期出现问题导致程序中断。
  • 非运行时异常(受检异常):Exception及其部分子类。编译期出现的问题,这个必须处理否则编译不通过。

3.常见的异常类型(面试的时候常问到)

Excepiton异常层次结构的根类
常见异常类型说明
ArithmeticException算术错误情形,比如零作为除数
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException尝试访问null对象的成员(空指针异常)
ClassNotFoundException不能加载所需的类
InputMismatchException欲得到的数据类型与实际输入类型不匹配
IIIegalArgumentException方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException数字格式化异常,如把“abc”转换成数字

4.异常处理方式

4.1.Java处理异常的5个关键词:

  • try:执行可能产生异常的代码
  • catch:捕获处理异常
  • finally:无论是否发生异常,代码总能执行
  • throws:声明方法可能要抛出的各种异常
  • throw:手动抛出异常

4.2.异常处理方式

1)try-catch

语法:

try{
//可能会出现异常的代码
}catch(异常类类型 对象名){
//处理异常
}

说明:

  • 没有异常:try执行,catch不执行
  • 异常类型匹配:try执行,catch执行
  • 异常类型不匹配:try执行,catch不执行

2)多重catch处理

编写顺序(从上到下):

  • 由普通异常到特殊异常;
  • 由子类异常到父类异常。

3)try-catch-finally

语法:

try{
//可能会出现异常的代码
}catch(异常类类型 对象名){
//处理异常
}finally{
//一定会执行的代码,不管前面是什么异常,还是使用return关键词
}

说明:

  • System.exit(0):关闭虚拟机,这是唯一一种情况finally块不执行的情况。
  • 几种组合方式
    • try-catch
    • try-finally
    • try-catch-finally

 

示例:

import java.util.InputMismatchException;
import java.util.Scanner;
public class TestExcepiton3 {
	public void a(){
		Scanner input = new Scanner(System.in);
		int n1,n2,n3;
		System.out.println("输入两个数字:");
		try {
			n1 = input.nextInt();
			n2 = input.nextInt();
			n3 = n1 / n2;
			System.out.println(n3);
		} catch (ArithmeticException e) {
			System.out.println(("出错了,请与管理员联系"));
		}catch (InputMismatchException e) {
			System.out.println(e);//展示异常对象的描述信息
			System.out.println(e.getMessage());//异常的消息
			e.printStackTrace();//堆栈轨迹信息
		}catch (Exception e) {
			System.out.println(e);
		}finally{
			System.out.println("其他代码……");
		}
	}
	public static void main(String[] args) {
		new TestExcepiton3().a();
	}
}

4)throws关键词声明异常

通过throws关键词可以抛出多个异常,多个异常之间用逗号隔开,结果会把异常抛给调用者。调用者的处理方式:

  • 受检异常:调用者必须处理
  • 运行异常:调用者非必须处理

5)throw关键词抛出异常

手动抛出异常,如果抛出的是运行时异常,可以不用throws声明,但若是受检异常,则必须throws声明。

6)自定义异常类

如何自定义异常类?

  • 继承系统定义的异常类;
  • 重写父类的方法。
    • public String getMessage();
    • public void printStackTrace();
    • public String toString();

示例:

class AgeException extends RuntimeException{
	String smessage;
	public AgeException(String smessage) {
		this.smessage = smessage;
	}
	@Override
	public String getMessage() {
		return "getMessage:" + smessage;
	}
	@Override
	public void printStackTrace() {
		System.out.println("printStackTrace:" + smessage);
	}
	@Override
	public String toString() {
		return "toString:" + smessage;
	}
}
class Person{
	private String sex;
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		/*if (sex.equals("男") && sex.equals("女")) {
			this.sex = sex;
		} else {
			throw new Exception("输入的不符合要求,必须输入男或女");
		}*/
		if (sex.equals("男") && sex.equals("女")) {
			this.sex = sex;
		} else {
			throw new AgeException("输入的不符合要求,必须输入男或女");
		}
	}
}
public class TestPerson {
	public static void main(String[] args) {
		Person p = new Person();
		try {
			p.setSex("lala");
		} catch (AgeException e) {
			e.printStackTrace();
			System.out.println(e);
			System.out.println(e.getMessage());
		}
	}
}

4.3.异常处理原则

  • 只用于处理非正常的情况;
  • 避免过大的try;
  • 使用多重catch;
  • 不要忽略catch块中的异常;
  • 改正代码;
  • 文档声明。

5.程序调试

程序调试步骤如下:

  • 分析错误,设置断点;
  • 启动调试(debug);
  • 单步运行(F5单步跳入,F6单步跳过);
  • 观察变量;
  • 发现问题;
  • 修正代码,重新运行;
  • 解决问题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值