11、异常 Exception

异常 Exception

什么是异常?

异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。
(1)编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。
(2)运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。
(3)逻辑错误是因为程序没有按照预期的逻辑顺序执行。异常也就是指程序运行时发生错误,而异常处理就是对这些错误进行处理和控制。

所有的异常都有一个父类,那就是Exception,Exception是所有异常的父类。

Exception

异常分类

五个关键字

try: 可能产生异常的代码

catch: 捕获异常,和处理异常

finally: 无论有没有异常,都会执行,一般把关闭资源放在这,遇到System.exit(0);会直接退出虚拟机,不会执行。。。finallly里面的代码。遇到return 会先执行finally里面的代码,在执行return返回结果

throws:声明的异常给调用者去处理,自己不处理

throw:制造异常,当Exception exp = new Exception();,exp只是一个引用,当throw exp 后就变成异常了

public class Test{
	main{
		try{//可能产生异常的代码
			int n = 10/0;
		}catch(ArithMatchMath e ){//匹配异常信息
			e.printStrack();
		}finally{//都会执行这里
			sout("关闭资源");
		}
	}
	public static void test() throws Exception{
		Exception exp = new Exception();
		throw exp;//产生异常
	}
}
异 常 类 型 说 明
Exception 异常层次结构的父类
ArithmeticException 算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException 数组下标越界
NullPointerException 尝试访问 null 对象成员
ClassNotFoundException 不能加载所需的类
IllegalArgumentException 方法接收到非法参数
ClassCastException 对象强制类型转换出错
NumberFormatException 数字格式转换异常,如把"abc"转换成数字

多个catch

try{
	sout();
}catch(异常类型1){
	//解决方式1
}catch(异常类型2){
	//解决方式2
}catch(Exception e){//无法预知的异常,防止程序崩溃
	//解决方式e
}

自定义异常

需要继承Exception 类,可以重写getMessage()来些自己的异常信息

package demo;

public class UserException extends Exception{

	public UserException() {
		super();
		// TODO Auto-generated constructor stub
	}

	public UserException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}
	@Override
	public String getMessage() {
		return super.getMessage();
	}
}
/*******************************/

package demo;

public class User {
	private String name;
	private int age;
	private String sex;
	
	public User(String name, int age, String sex) {
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) throws UserException {
		if(age>0&&age<=100) {
			this.age = age;
		}else {
			UserException ue = new UserException("年龄要在1~100之间");
			throw ue;
		}
		
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) throws UserException {
		if("男".equals(sex)||"女".equals(sex)) {
			this.sex = sex;
		}else {
			UserException ue = new UserException("性别必须是男或者女");
			throw ue;
		}
		
	}
	
}
/*******************************/
package demo;

public class Test {
	public static void main(String[] args) {
		User user = new User();
		try {
			user.setAge(100);
			user.setSex("aa");
			
		} catch (UserException e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			System.out.println(e.getMessage());
		}
	}
}

posted @ 2022-03-17 20:02  站着说话不腰疼  阅读(146)  评论(0)    收藏  举报