Java编程之异常处理

写在前面:Java基础系列文章

Java基础要点笔记1(尚硅谷)
Java基础要点笔记2面向对象(尚硅谷)
Java编程之异常处理
Java编程之多线程
Java编程之常用类
Java编程之枚举类&注解
Java编程之Java集合
Java编程之泛型
Java编程之IO流
Java编程之网络编程
Java编程之反射机制
Java编程之Java8&9&10&11新特性
十大排序算法
关于设计模式

一、异常概述与异常体系结构

java程序在执行过程中所发生的异常事件可分为两类:

  1. Error: Java虚拟机无法解决的严重问题。如JVM系统内部错误、资源耗尽等严重情况,比如StackOverflowError和OOM。一般不编写针对性的代码进行处理;
  2. Exception: 其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理,例如空指针访问、试图读取不存在的文件、网络连接中断、数组角标越界。
public static void main(String[] args){
	// 1.栈溢出:java.lang.StackOverflowError
	main(args) ;
	// 2.堆溢出:java.lang.OutofMemoryErroy
	Integer[] arr = new Integer[1024*1024*1024] ;
}

捕获错误最理想的是在编译期间,但是有的错误只有在运行时才会发生,比如:除数为0、数组下标越界等,所以又分为编译时异常(蓝色)和运行时异常(红色)。
在这里插入图片描述
面试题:常见的异常举例
关于异常

二、异常处理方式

过程一: “抛”:程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此对象抛出,一旦抛出对象以后,其后的代码就不再执行了。

过程二: “抓”:可以理解为异常的处理方式:① try-catch-finally ② throws + 异常类型

2.1 try-catch-finally

try {
	// 可能出现异常的代码
}catch(异常类型1 变量名1){
	// 处理异常的方式1
}catch(异常类型2 变量名2){
	// 处理异常的方式2
}
...
finally{
	// 一定会执行的代码 
}

在这里插入图片描述
如果发生了异常,那么在异常上面的语句都是可以正常执行的:

public static void test1() {
		String str = "abc" ;
		try {
			System.out.println("1111");   // 正常输出
			int num = Integer.parseInt(str) ;
			System.out.println("2222");
		}catch(NumberFormatException e) {   // 数值转换异常
			e.printStackTrace();
		}
		System.out.println("3333");   // 正常输出
	}

体会1:try-catch-finally处编译时异常,是程序在编译时就不再报错,但是运行时仍可能报错。相当于把一个编译时可能出现的异常,延迟到运行时出现。
体会2:开发中由于运行时异常很常见,一般不做try-catch处理,对于编译时异常一定要考虑异常处理。

finally

try-catch-finally可以嵌套,也就是finally里面还可以有try-catch-finally.

2.2 throws + 异常类型

在这里插入图片描述

2.3 开发中如何选择哪种方式处理异常

在这里插入图片描述

解释:关于3.1,因为在调用方法的形参可能是父类对象,但是传进去的是子类的对象,这时候catch的异常,是父类中抛出的异常,如果子类中的异常还大,会catch不住。

2.3 关于异常对象的产生

① 系统自动生成的异常对象
② 手动的生成一个异常对象,并抛出(throw)

手动抛出的运行时异常,不一定要显示处理,但是有编译时异常就一定要捕获。

2.3 用户自定义异常

在这里插入图片描述

2.3 总结

在这里插入图片描述
面试题:throw和throws的区别
简单回答就是:throw表示抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。throws属于异常处理的一种方式,声明在方法的声明处。

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值