第一章 异常

定义:

        指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序

Throwable分类:

        i.     无法处理的错误:Error

        ii.    可以处理的异常

                a)       必须处理的异常(检查checked异常):是Exception的子类但不是RuntimeException的子类

                b)       可处理可不处理的异常(运行异常):是RuntimeException的子类

 

处理异常的方式:

           1.捕捉异常:try{···}  catch (  ) {···} [ finally{···} ]

           2.声明异常:throws 异常

异常信息

                     // 异常自定义处理信息:错误标准输出

                     System.err.println("除数为0!!!");

                     // 打印堆栈信息

                     e.printStackTrace();

                     // 异常描述信息

                     e.getMessage();

import java.util.InputMismatchException;
import java.util.Scanner;

/*
 * 此程序是简单计算两个数的商,但是程序会有异常:
 * 异常一:接收整数时输入了非整数
 * 异常二:除数为0
 */
public class D1 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		// try 里面存放可能会有异常出现的代码
		try {
			/*
			 * 一、未产生异常:try块代码正常执行,catch内代码不执行,再必定执行finally内代码
			 * 二、产生异常:try块执行产生异常,进入catch匹配异常,执行完之后再执行finally内代码
			 * 三、产生异常,catch未匹配到异常类型:程序中断
			 */
			System.out.println("请输入被除数:");
			int num1 = input.nextInt();
			System.out.println("请输入除数:");
			int num2 = input.nextInt();
			System.out.println(num1 + "/" + num2 + "=" + (num1 / num2));
		} catch (ArithmeticException e) {
			// 异常自定义处理信息:错误标准输出
			System.err.println("除数为0!!!");
			// 打印堆栈信息
			e.printStackTrace();
			// 异常描述信息
			System.out.println(e.getMessage());
		} catch (InputMismatchException e) {
			System.out.println("输入有误!!!");
		} catch (Exception e) {
			System.out.println("未按照指定操作进行!!!");
		} finally {
			System.out.println("欢迎关注墨渐生微!!!");
		}

		System.out.println("程序结束!!!");
	}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 * 处理异常方式二:声明异常
 * throws 异常
 */
public class D2 {
	public static void main(String[] args) throws ParseException {
		String date  = "2008-08-08 8:8:8";
		SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		/*
		 * ParseException异常是checked异常:Exception的子类但不是RuntimeException的子类
		 * 必须处理的异常!!!
		 */
		Date time = dateformat.parse(date);
	}
}

 

常见异常类型:

         Excption    :异常层次结构的父类

         ArithmeticException:  算术错误异常

         ArrayIndexOutOfBoundsException:   数组越界异常

         NullPointerException:  空指针异常

         ClassNotFoundException:  不能加载所需类

         IllegalArgumentException:  方法接收到非法参数

         ClassCastException:   对象强制类型转换出错

         NumberFormatException:   数字格式转换异常

 

自定义异常

      继承Throwable类或者Exception类或者RuntimeException


/*
 * 自定义异常
 * 继承Exception类
 * SexException异常为checked异常,必须处理!!!
 */
public class SexException extends Exception{
	// 调用父类的有参构造方法
	public SexException() {
		// 参数为异常描述信息
		super("性别必须是男、女");
	}
}

 

手动抛出异常:throw

/*
 * 手动抛出异常
 */
public class Student {
	public String name;
	private String sex ;
	public int age;
	
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) throws SexException {
		if(sex.equals("男")|| sex.equals("女")){
		this.sex = sex;
		}else{
			/*
			 * throw new 异常类型();
			 * 抛出一个自定义的性别异常!!!
			 */
			throw new SexException();
		}
	}	
}

 

注意问题:

         finally {···} 一定会执行;唯一不执行,中断虚拟机( System.exit(-1) );

         先捕获子类异常,再捕获父类异常,顺序不可颠倒;

         重写方法抛出异常范围不能大于被重写方法抛出异常的范围;

         throw:抛出异常,必须是Throwable的子类;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值