【05章Java异常处理】一篇短文教你玩转Java异常处理

❤写在前面
❤博客主页:努力的小鳴人
❤系列专栏:JavaSE超详总结😋
❤欢迎小伙伴们,点赞👍关注🔎收藏🍔一起学习!
❤如有错误的地方,还请小伙伴们指正!🌹

🔥系列传送门
【附章2Java面向对象编程】盘点关键字详解 this、super、final
【04章Java面向对象编程(下)】面向对象编程的必杀技
【04章Java面向对象编程(中)】解密 继承性和多态性
【04章Java面向对象编程(上)】万事万物皆对象的初体验【全站热榜第二】
【附章1Java数组中常见算法】图文并茂详解十大排序算法让您回味无穷
【03章Java数组】程序员必看数组详解
【02章Java基本语法】详细讲解让你重新认识Java基本语法和流程流程控制
【01章Java语言概述】Java学了很久了吧,快回来熟悉熟悉吧(详细)


一、异常的概述

在代码的运行过程中很多问题不是靠代码就能够避免的
Java把异常当做对象来处理,并定义了一个基类 java.lang.Throwable 作为所有异常的超类

👌异常

程序员通常只能处理Exception,而对Error无能为力

  1. 定义:在Java语言中,将程序执行中发生的不正常情况称为“异常”
  2. 分类:
    ErrorJava虚拟机无法解决的严重问题,如:JVM系统内部错误、资源耗尽等严重情况。
    Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使
    用针对性的代码进行处理
    ,例空指针访问、数组角标越界
  3. Java把异常当做对象来处理,并定义了一个基类 java.lang.Throwable 作为所有异常的超类
    在这里插入图片描述

👌运行时异常

  1. 指编译器不要求强制处置的异常。一般指编程时的逻辑错误,是程序员应该积极避免其出现的异常
  2. java.lang.RuntimeException 类及它的子类都是运行时异常

👌编译时异常

  1. 指编译器要求必须处置的异常,程序在运行时由于外界因素造成的一般性异常
  2. 编译器要求Java程序必须捕获或声明所有编译时异常

二、常见异常

  1. java.lang.RuntimeException
    ●ClassCastException:类转换异常
    ●ArrayIndexOutOfBoundsException:数组索引超出范围异常
    ●NullPointerException:空指针异常
    ●ArithmeticException:算术异常
    ●NumberFormatException:数字格式异常
    ●InputMismatchException:输入不匹配异常
  2. java.io.IOExeption
    ●FileNotFoundException:文件未找到异常
    ●EOFException:文件结束异常
  3. java.lang.ClassNotFoundException
    :类未找到异常
  4. java.lang.InterruptedException
    :中断异常
  5. java.io.FileNotFoundException
    :文件未找到异常
  6. java.sql.SQLException
    :SQL异常

三、try-catch-finally

异常处理机制一
Java提供的是异常处理的抓抛模型

  1. try捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块中
  2. catch (Exceptiontype e):在catch语句块中是对异常对象进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象
  3. finally:捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理
  4. 不论在try代码块中是否发生了异常事件,catch语句是否执行,catch语句是否有异常,catch语句中是否有return,finally块中的语句都会被执行

finally语句和catch语句是任选的
在这里插入图片描述
代码如下:

public class DivideZero {
		int x;
		public static void main(String[] args) {
		int y;
		DivideZero c = new DivideZero();
		try {
		y = 3 / c.x;
		} catch (ArithmeticException e) {
		System.out.println("divide by zero error!");
		}
		System.out.println("program ends ok!");
	}
}

运行结果:

java DivideZero
divide by zero error!
program ends ok!

四、throws

异常处理机制二

  1. 声明抛出异常是Java中处理异常的第二种方式
    ●如果一个方法中的语句执行时可能生成某种异常,但是不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
    在方法声明中用 throws 语句可以声明抛出异常的列表throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类

声明抛出异常举例:

import java.io.*;
public class ThrowsTest {
	public static void main(String[] args) {
		ThrowsTest t = new ThrowsTest();
		try {
		t.readFile();
		} catch (IOException e) {
		e.printStackTrace();
	}
}
	public void readFile() throws IOException {
		FileInputStream in = new FileInputStream("atguigushk.txt");
		int b;
		b = in.read();
		while (b != -1) {
		System.out.print((char) b);
		b = in.read();
		}
		in.close();
	}
}

👌重写方法声明抛出异常的原则

重写方法不能抛出比被重写方法范围更大的异常类型

在多态的情况下举例:

public class A {
		public void methodA() throws IOException {
		……
	} 
}
public class B1 extends A {
		public void methodA() throws FileNotFoundException {
		……
	}
}
public class B2 extends A {
		public void methodA() throws Exception { //报错
		……
	}
}

五、throw

手动抛出异常
Java异常类对象也可根据需要使用人工创建并抛出

  1. 首先要生成异常类对象,然后通过throw语句实现抛出操作提交给Java运行环境
    IOException e = new IOException();
    throw e;
  2. 可以抛出的异常必须是Throwable或其子类的实例
    下面的语句在编译时将会产生语法错误:throw new String(“want to throw”);

六、自定义异常类

一般地,用户自定义异常类都是 RuntimeException 的子类

  1. 自定义异常类需要:
    ●编写几个重载的构造器
    ●提供serialVersionUID
    ●通过throw抛出
  2. 自定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型
  3. 用户自己的异常类必须继承现有的异常类
    举例:
public class ReturnExceptionDemo {
		static void methodA() {
		try {
		System.out.println("进入方法A");
		throw new RuntimeException("制造异常");
		}finally {
		System.out.println("用A方法的finally");
	}
}
		static void methodB() {
		try {
		System.out.println("进入方法B");
		return;
		} finally {
		System.out.println("调用B方法的finally");
	}
}
	public static void main(String[] args) {
		try {
		methodA();
		} catch (Exception e) {
		System.out.println(e.getMessage());
		}
		methodB();
	}
}

运行结果:

进入方法AA方法的finally
制造异常
进入方法B
调用B方法的finally

🎁总结:Java异常处理可以让程序具有更好的容错性,是程序更加健壮,也提供了处理程序运行时出现的任何意外或异常情况的方法
👌 作者算是一名Java初学者,文章如有错误,欢迎评论私信指正,一起学习~~
😊如果文章对小伙伴们来说有用的话,点赞👍关注🔎收藏🍔就是我的最大动力!
🚩不积跬步,无以至千里书接下回,欢迎再见🌹

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 29
    评论
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小鳴人

鳴人将永远记住您的恩惠

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值