JavaSE第8章【异常】

本文详细介绍了Java中的异常处理,包括异常概述、异常体系、异常分类,重点讲解了异常的抛出机制(throw关键字)、异常处理(try...catch、finally、throws)以及自定义异常。学习目标包括理解异常的类型、处理方法和如何编写自定义异常类。内容涵盖常见的编译时和运行时异常,以及异常处理的最佳实践。
摘要由CSDN通过智能技术生成

JavaSE_【异常】

主要内容

  • 异常的体系结构
  • 常见异常
  • throw关键字(手动创建并抛出异常)
  • 异常处理机制一:try(掌握)
  • 异常处理机制二:throws(掌握)
  • 自定义异常

学习目标

  • 能够辨别程序中异常和错误的区别
  • 说出异常的分类
  • 说出虚拟机处理异常的方式
  • 可以编写代码演示OOM
  • 列出常见的5个运行时异常
  • 列出常见的5个编译时异常
  • 能够使用try…catch关键字处理异常
  • 能够使用throws关键字处理异常
  • 能够自定义异常类
  • 能够处理自定义异常类

第八章 异常

8.1 异常概述

引入异常

生活中的异常:

正常情况下,小王每日开车去上班,耗时大约30分钟

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G5TITD69-1621181699525)(imgs\wps4.jpg)]

但是,异常情况迟早要发生!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iFkpwBOA-1621181699528)(imgs\wps5.jpg)]

面对异常该怎么办呢?生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GbFarGiZ-1621181699530)(imgs\wps6.jpg)]

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

  • 异常 :指的是程序在执行过程中,出现的非正常的情况,如果不处理最终会导致JVM的非正常停止。

异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.

异常也不是指逻辑代码错误而没有得到想要的结果,例如:求a与b的和,你写成了a-b 除数为0的情况

对于异常,一般有两种解决方法:一是遇到错误就终止程序的运行。另一种方法是由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理。

Java中是如何表示不同的异常情况,又是如何让程序员得知,并处理异常的呢?

Java中把不同的异常用不同的类表示,一旦发生某种异常,就通过创建该异常类型的对象,并且抛出,然后程序员可以catch到这个异常对象,并处理,如果无法catch到这个异常对象,那么这个异常对象将会导致程序终止。

8.2 异常体系

异常的根类是java.lang.Throwable,其下有两个子类:java.lang.Errorjava.lang.Exception,平常所说的异常指java.lang.Exception

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ekkkjd1j-1621181699534)(imgs/异常的分类.png)]

Throwable体系:

  • Error:严重错误Error,无法通过处理的错误,只能事先避免,好比绝症。
    • 例如:StackOverflowError,OOM(OutOfMemoryError) 内存泄漏(Memory Leak) 。
    • 内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。
    • 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果 。
  • Exception:表示异常,其它因编程错误或偶然的外在因素导致的一般性问题,程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。好比感冒、阑尾炎。
    • 例如:空指针访问、试图读取不存在的文件、网络连接中断、数组角标越界

Throwable中的常用方法:

  • public void printStackTrace():打印异常的详细信息。

    包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrace。

  • public String getMessage():获取发生异常的原因。

    提示给用户的时候,就提示错误原因。

出现异常,不要紧张,把异常的简单类名,拷贝到API中去查。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-10aixduN-1621181699536)(imgs/简单的异常查看.bmp)]

8.3 异常分类

我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程序。

异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?

  • 编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如文件找不到异常)
  • 运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会被编译器检测到(不报错)。(如数组索引越界异常,类型转换异常)。程序员应该积极避免其出现的异常,而不是使用try…catch处理,因为这类异常很普遍,若都使用try…catch或throws处理可能会对程序的可读性和运行效率产生影响。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mKXAXHCD-1621181699537)(imgs/1562771528807.png)]

演示常见的错误和异常

1、VirtualMachineError

最常见的就是:StackOverflowError、OutOfMemoryError

	@Test
	public void test01(){
   
		//StackOverflowError
		digui();
	}
	
	public void digui(){
   
		digui();
	}
	@Test
	public void test02(){
   
		//OutOfMemoryError
		//方式一:
		int[] arr = new int[Integer.MAX_VALUE];
	}
	@Test
	public void test03(){
   
		//OutOfMemoryError
		//方式二:
		StringBuilder s = new StringBuilder();
		while(true){
   
			s.append("atguigu");
		}
	}
2、运行时异常
	@Test
	public void test01(){
   
	    //NullPointerException
		int[][] arr = new int[3][];
		System.out.println(arr[0].length);
	}
	
	@Test
	public void test02(){
   
		//ClassCastException
		Person p = new Man();
		Woman w = (Woman) p;
	}
	
	@Test
	public void test03(){
   
		//ArrayIndexOutOfBoundsException
		int[] arr = new int[5];
		for (int i = 1; i <= 5; i++) {
   
			System.out.println(arr[i]);
		}
	}
	
	@Test
	public void test04(){
   
		//InputMismatchException
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一个整数:");
		int num = input.nextInt();
	}
	
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值