天天看点

Java编程之异常处理写在前面:Java基础系列文章一、异常概述与异常体系结构二、异常处理方式

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

Java基础要点笔记1(尚硅谷)

Java基础要点笔记2面向对象(尚硅谷)

Java编程之异常处理

Java编程之多线程

Java编程之常用类

Java编程之枚举类&注解

Java编程之Java集合

Java编程之泛型

Java编程之IO流

Java编程之网络编程

Java编程之反射机制

Java编程之Java8&9&10&11新特性

十大排序算法

关于设计模式

Java基础

  • 写在前面:Java基础系列文章
  • 一、异常概述与异常体系结构
  • 二、异常处理方式
    • 2.1 try-catch-finally
    • 2.2 throws + 异常类型
    • 2.3 开发中如何选择哪种方式处理异常
    • 2.3 关于异常对象的产生
    • 2.3 用户自定义异常
    • 2.3 总结

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

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、数组下标越界等,所以又分为编译时异常(蓝色)和运行时异常(红色)。

Java编程之异常处理写在前面:Java基础系列文章一、异常概述与异常体系结构二、异常处理方式

面试题:常见的异常举例

Java编程之异常处理写在前面:Java基础系列文章一、异常概述与异常体系结构二、异常处理方式

二、异常处理方式

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

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

2.1 try-catch-finally

try {
	// 可能出现异常的代码
}catch(异常类型1 变量名1){
	// 处理异常的方式1
}catch(异常类型2 变量名2){
	// 处理异常的方式2
}
...
finally{
	// 一定会执行的代码 
}
           
Java编程之异常处理写在前面:Java基础系列文章一、异常概述与异常体系结构二、异常处理方式

如果发生了异常,那么在异常上面的语句都是可以正常执行的:

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处理,对于编译时异常一定要考虑异常处理。

Java编程之异常处理写在前面:Java基础系列文章一、异常概述与异常体系结构二、异常处理方式
try-catch-finally可以嵌套,也就是finally里面还可以有try-catch-finally.

2.2 throws + 异常类型

Java编程之异常处理写在前面:Java基础系列文章一、异常概述与异常体系结构二、异常处理方式

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

Java编程之异常处理写在前面:Java基础系列文章一、异常概述与异常体系结构二、异常处理方式
解释:关于3.1,因为在调用方法的形参可能是父类对象,但是传进去的是子类的对象,这时候catch的异常,是父类中抛出的异常,如果子类中的异常还大,会catch不住。

2.3 关于异常对象的产生

① 系统自动生成的异常对象

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

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

2.3 用户自定义异常

Java编程之异常处理写在前面:Java基础系列文章一、异常概述与异常体系结构二、异常处理方式

2.3 总结

Java编程之异常处理写在前面:Java基础系列文章一、异常概述与异常体系结构二、异常处理方式

面试题:throw和throws的区别

简单回答就是:throw表示抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。throws属于异常处理的一种方式,声明在方法的声明处。