学习笔记分享---异常

异常

   不是错误,异常是不正常事件!有可能会发生有可能不会发生!!


1.异常和错误区别:

  错误:程序员无法通过代码处理。例如:内存溢出

  异常:有可能会发生的情况,程序员可以通过程序进行处理,让程序即使遇到异常也可以继续执行。例如:除数为0,

2.异常体系:
  Throwable   Exception类、Error类

2.1 Exception(运行期异常)

   程序运行时抛出的异常,一般都是由于程序设计的漏洞,一旦发生,直接由虚拟机终止正在运行的程序:
  数学异常
  数组下标越界异常
  输入不匹配异常
  空指针异常NullPointer
  …
以上这些异常,都是RuntimeException的子类

2.2 编译期异常
    除去运行期异常都是编译异常:
      IOException
      SQLException

在这里插入图片描述
异常与说明
在这里插入图片描述

3.异常处理机制
  当异常发生的时候,我们要进行一些操作,可以让让程序能够继续向下执行,因此我们需要进行异常处理。
    try  catch  finally  throws  throw

3.1语法和使用

	try{
		//可能会发生异常的代码块
	}catch(异常捕获){
		//异常发生时处理的代码
	}finally{
		//无论是否发生异常,都会执行的代码
}
Scanner input = new Scanner(System.in);
	try{
			System.out.print("请输入一个整数:");
	int num1 = input.nextInt();
			System.out.print("请输入一个整数:");
	int num2 = input.nextInt();
	int result = num1 / num2;
			System.out.println("结果:" + result);
	}catch(ArithmeticException ex){//异常捕获
			System.out.println("除数不能0");
	}finally{
			System.out.println("程序结束");
}
			System.out.println("程序是否终止");

注意:
 必须有try ; catch可以有1个或者多个; finally最多1个,可以没有!

3.2 catch捕获多个异常

Scanner input = new Scanner(System.in);
	try{
			System.out.print("请输入一个整数:");
	int num1 = input.nextInt();
			System.out.print("请输入一个整数:");
	int num2 = input.nextInt();
	int result = num1 / num2;
			System.out.println("结果:" + result);
	}catch(ArithmeticException ex){//异常捕获
			System.out.println("除数不能0");
	}catch (InputMismatchException ex) {
			System.out.println("输入不匹配");
	}catch (Exception ex) {
			System.out.println("异常发生");
	}finally{
			System.out.println("程序结束");
}
			System.out.println("程序是否终止");

注意:
1.多个catch排列-先子类后父类,同类无先后。
 2.发生异常按照顺序逐个匹配,只执行第一个匹配的异常

3.finally块无论是否发生都要执行的语句
4.finally遇到return也正常执行

	Scanner input = new Scanner(System.in);
	try{
		System.out.print("请输入一个整数:");
	int num1 = input.nextInt();
		System.out.print("请输入一个整数:");
	int num2 = input.nextInt();
	int result = num1 / num2;
		System.out.println("结果:" + result);
		return;
	}catch (Exception ex) {
		System.out.println("异常发生");
	}finally{
		System.out.println("程序结束");
}
		System.out.println("程序是否终止");
/*
* 请输入一个整数:9
请输入一个整数:5
结果:1
程序结束
请输入一个整数:9
请输入一个整数:0
异常发生
程序结束
程序是否终止
*/

5.finally遇到System.exit(0)不会执行

Scanner input = new Scanner(System.in);
	try{
			System.out.print("请输入一个整数:");
	int num1 = input.nextInt();
			System.out.print("请输入一个整数:");
	int num2 = input.nextInt();
	int result = num1 / num2;
			System.out.println("结果:" + result);
			System.exit(0);
	}catch (Exception ex) {
			System.out.println("异常发生");
	}finally{
			System.out.println("程序结束");
}
	System.out.println("程序是否终止");
/*
* 请输入一个整数:9
请输入一个整数:3
结果:3
*/

总结:
 finally只有遇到System.exti(0)才会不执行
!!

4.处理异常方式

  4.1 自定义控制台输出

	System.out.print("输入不匹配");

  4.2 打印堆栈信息

.....
	catch (Exception ex) {
		ex.printStackTrace();
	}
.....

堆栈信息:异常类型 异常内容字符串  异常位置

  4.3 输出错误信息

.....
	catch (Exception ex) {
		System.out.println(ex.getMessage());/// by zero
}
.....

  4.4 throws
定义方法上,方法体中如果发生异常,那么由调用者去处理。
在这里插入图片描述
在这里插入图片描述总结:
 1.任何方法都可以使用throws(抽象方法可以)。
 2.子类覆盖父类的方法,子类方法不能声明抛出比父类范围大的异常类型。
 3.throws可以声明多种异常类型,用逗号分隔。

  4.5 throw

(1)语句抛出异常

	String str="abc";
	if(str.equals("abc")){
			throw new NumberFormatException();
	}else{
			System.out.println(str);
}
	System.out.println("程序终止");

(2)自定义异常

public class Student {
private String stuNo;
private String stuName;
private String sex;
	public String getStuNo() {
		return stuNo;
	}
	public void setStuNo(String stuNo) {
		this.stuNo = stuNo;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) throws Exception{
		if(sex.equals("男")||sex.equals("女")){
				this.sex=sex;
		}else{
//自定义异常
	throw new Exception("性别只能是男或者女");
	}
}
@Override
public String toString() {
		return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", sex=" +
sex + "]";
}
}

自定义异常,定义异常名字内容

第一:建立SexException类
在这里插入图片描述
第二:使用异常进行操作
在这里插入图片描述第三:调用处理异常方法

public static void main(String[] args) {
	Student stu=new Student();
	stu.setStuNo("1001");
	stu.setStuName("小红");
		try {
			stu.setSex("好");
	} catch (Exception e) {
			e.printStackTrace();
}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值