笔记(十六):异常高级

throw关键字

throws关键字表示一个方法中可能发生的异常类型
一个方法表明方法中可能抛出的异常类型后,调用它的方法可以处理这些可能发生的异常
方式如下:

publi void dosome() throws IOException,NullPointerException{
}

其中dosome是方法名,IOException,NullPointerException是可能发生的异常类型

异常的分类

Throwable:
-Error:硬件中出现的异常
-Exception:程序级别的错误
-check异常(检查时异常)(随时随地检查)(必须要用try-catch块处理)
-RuntiomeException(运行时异常)(不会随时随地检查)(不一定要处理)(因为太常见了,如果每一次都要进行try-catch块处理,就显得太繁琐了)
在这里插入图片描述

子类重写父类方法时throws规则

package com.tedu.exception;

import java.io.IOException;

/**
 * 重写的时候,子类抛出的异常范围要小于等于父类的异常范围
 * @author Wildmess
 *
 */
public class ThrowsOverrideDemo {
	public static void main(String[] args) {

	}
	
	public void doSome() throws IOException,RuntimeException{
		//
//		String str = null;
//		System.out.println(str.length());
	}
}

class Son extends ThrowsOverrideDemo{
	//子类异常范围等于父类中的异常范围
//	public void doSome() throws IOException,RuntimeException{
//		
//	}
	
	//子类异常范围小于父类中的异常范围
//	public void doSome() throws IOException{
//		
//	}
	
//		public void doSome() throws RuntimeException{
//			
//		}
	
//		public void doSome() {
//		
//		}
	
	//子类异常范围大于父类中的异常范围,直接红线报错
//	public void doSome() throws Exception{
//		
//	}
	
	//子类抛出父类中没有声明的异常,直接红线,不允许
//	public void doSome() throws SQLException{
//		
//	}
}

自定义异常类

有时候我们自己编写的程序需要一些异常,但是这种异常在JavaAPI中没有,那么就需要我们自己定义一个异常类,在需要时声明或抛出
通常情况下,需要注意到下面几点:
1.定义好类名,做到见名知意;
2.需要继承Exception(直接或间接都可以)
3.定义序列化版本号(避免出现警告)
4.重写Exception定义的所有构造方法

package com.tedu.exception;
/**
 * 自定义年龄不合法异常类
 * 
 * @author Wildmess
 *
 */
public class IllegaAgeException extends Exception{

	private static final long serialVersionUID = 1L;

	public IllegaAgeException() {
		super();
	}

	public IllegaAgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
	}

	public IllegaAgeException(String message, Throwable cause) {
		super(message, cause);
	}

	public IllegaAgeException(String message) {
		super(message);
	}

	public IllegaAgeException(Throwable cause) {
		super(cause);
	}
}

使用自定义异常类

package com.tedu.exception;


public class Person {
	private String name;
	private int age;
	private char gender;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) throws IllegaAgeException {
		if(age<0 || age>150) {
			/*
			 * 根据业务需要,可以在age值不符合要求时
			 * 主动抛出异常,表示程序中这样的赋值不被允许
			 * throw关键字 后面实例化一个异常对象,处理发生这个类型的异常
			 * 当前方法会在运行throw后终止,类似于return
			 */
			throw new IllegaAgeException("年龄不合法!");
		}
		this.age = age;
	}
	public char getGender() {
		return gender;
	}
	public void setGender(char gender) {
		this.gender = gender;
	}
}

测试类中去处理年龄赋值发生的异常

package com.tedu.exception;
/**
 * 使用Person类演示自定义异常的使用、抛出、处理
 * @author Wildmess
 *
 */
public class ThrowDemo {
	public static void main(String[] args) {
		Person p = new Person();
		try {
			p.setAge(500);
			System.out.println("当前年龄:" + p.getAge() + "岁");
		} catch (IllegaAgeException e) {
			e.printStackTrace();
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值