设为首页 加入收藏

TOP

第7章:异常处理(一)
2023-07-26 08:17:16 】 浏览:87
Tags:常处理

第7章:异常处理

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

1.1 异常引出: 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是考代码能够避免的(如客户输入数据的格式、读取文件是否存在、网络是否始终保持通畅等)。

1.2 异常概念:

异常: 在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)

1.3 异常事件分类:

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

  1. Error: Java虚拟机无法解决的严重问题。如JVM系统内部错误、资源耗尽等严重情况、StackOverflowError(栈溢出,如无限递归函数)和OOM(OutOfMemoryError,堆溢出,存储空间太大)。一般不编写针对性的代码进行处理。
  2. Exception: 其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。如空指针访问、试图读取不存在的文件、网络连接中断、数组角标越界。

1.4 异常体系结构:

对于异常体系结构是一个继承关系
java.lang.Throwable
	|-----java.lang.Error:一般不编写针对性的代码处理
    |-----java.lang.Exception:可以进行异常的处理
        |-----编译时异常(checked,非受检异常)
        	|-----IOException
        		|-----FileNotFoundException
        	|-----ClassNotFoundException
        	|----- …………
        |-----运行时异常(unchecked,受检异常)
			|-----NullPointerException
        	|-----ArrayIndexOutOfBoundsException
        	|-----ClassCastException
        	|-----NumberFormatException
        	|-----InputMismatchException
        	|-----ArithmeticException
编译时异常:执行javac.exe命令时,出现的异常,不让过编译。
运行时异常:执行java.ext命令时,可能出现的异常。

1.5 异常处理概述:

使用过多的if-else分支去处理异常,会导致程序的代码加长、臃肿、可读性差,因此我们此阿勇异常处理机制。

Java异常处理机制: 是将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁、优雅、并易于维护。

1.6 Java异常处理的方式:

  1. try-catch-finally
  2. throws + 异常类型

1.7 异常处理:抓抛模型

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

关于异常对象的产生:1、系统自动生成异常对象;2、手动的生成一个异常对象,并抛出(throw)

过程二:“抓”:可以理解为异常的处理方式:1、try-catch-finally 2、throws

2、常见异常

2.1 常见异常举例:

package ExceptionTest;



import java.util.Date;
import java.util.Scanner;

import org.junit.Test;

public class ExceptionTest {
	//**********以下是编译时异常*****************
	//在编译的时候就打叉了,无法进行编译,即javac,无法生成字节码文件
	
	
	//**********以下是运行时异常*****************
	//可以执行,可以生成对应的字节码文件
	//当进行运行时,即java时,会出现问题
	//NullPointerException —— 空指针
	@Test
	public void test1(){
		//例子1:
		//int[] arr = null;
		//arr[1] = 10;
		
		//例子2
		String str = "abc";
		str = null;
		System.out.println(str.charAt(0));
	}
	
	//ArrayIndexOutOfBoundsException ——数组角标越界
	@Test
	public void test2(){
		int[] arr = new int[10];
		System.out.println(arr[10]);
	}
	
	//ClassCastException —— 类型转换异常
	@Test
	public void test3(){
		Object obj = new Date();
		String str = (String)obj;
	}
	
	//NumberFormatException —— 数值格式异常
	@Test
	public void test4(){
		String str = "abc";
		int num = Integer.parseInt(str);
	}
	
	//InputMismatchException —— 输入类型不匹配
	@Test
	public void test5(){
		Scanner scan = new Scanner(System.in);
		int sc = scan.nextInt();	//输入“abc”
		System.out.println(sc);
	}
	
	//ArithmetticException —— 算术异常
	@Test
	public void test6(){
		int a = 2;
		int b = 0;
		System.out.println(a / b);
	}
	
}

3、异常处理机制一:try-catch-finally

3.1:try-catch-finally的使用

try{
	//可能出现异常的代码(可能出现,不一定是一定会出现的)   
}catch(异常类型1 变量名1){
 	//处理异常方式1   
}catch(异常类型2 变量名2){
 	//处理异常方式2  
}catch(异常类型3 变量名3){
 	//处理异常方式3   
}
……
finally{
    //一定会执行的代码(即不管有无异常出现都会执行)
}

/*
try-catch的说明:
1、使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配。
2、一旦try中的异常类型匹配到某一个catch时,就进入catch中进行异常的处理。一旦处理完成,就跳出当前的try-catch结构(在没有写finally的情况),继续执行其后的代码。
3、catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓。catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面(因为不然父类先执行,子类后执行!应该从小到大去判断),否则报错。
4、常用的异常处理对象的方式:a、String getM
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇《分布式技术原理与算法解析》学.. 下一篇京东一面:MySQL 中的 distinct ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目