异常总结


添加异常是为了提高代码的健壮性

自定义异常

class NoAgeException extends RuntimeException
{
	/*
	为什么要定义构造函数,看到Java中的异常描述类中有提供对问题对象的初始化方法。
	*/
	NoAgeException()
	{
	super();
	}
	NoAgeException(String message)
	{
	super(message);
	}
}
class Person{
	private String name;
	private int age;
	Person(String name,int age)	{
		//加入逻辑判断。
		if(age<0 || age>200){
			throw new NoAgeException(age+",年龄数值非法");
		}
		this.name = name;
		this.age = age;
	}
	//定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。
	public String toString(){
		return "Person[name="+name+",age="+age+"]";
	}
}
class ExceptionDemo{
	public static void main(String[] args) 	{
		Person p = new Person("xiaoming",-20);
		System.out.println(p);
	}
}

异常的分类

Exception异常

在函数内抛出Exception,编译失败,因为编译器再检查语法时发生了错误,该程序已经出现问题,Java认为这个程序本身出现了问题,需要捕获或者声明出来(你要么把问题处理,要么把问题标识出来让调用知道)。

RuntimeException异常

为什么抛出RuntimeException,不需要捕获,不要声明呢?不是功能本身发生的异常,而是因为比如调用者传递参数错误而导致功能运行失败。这也是问题,需要通过异常来体现,但是这个异常不要声明出来的。

声明和捕获

声明:将问题表示出来,报告给调用者,如果函数内通过throw抛出了异常,而没有捕获,那么必须通过throws进行声明,让调用者去处理
捕获:Java中对异常有专门的语句进行捕获

try
{
	//需要被检测的语句。
}
catch(异常类 变量)//参数。
{
	//异常的处理语句。
}
finally
{
	//一定会被执行的语句。
}

声明和捕获的应用

class NoAgeException extends RuntimeException{
	NoAgeException()	{
		super();
	}

	NoAgeException(String message)	{
		super(message);
	}
}
class Person{
	private String name;
	private int age;
	Person(String name,int age)//throws NoAgeException	{
		//加入逻辑判断。
		if(age<0 || age>200)		{
			throw new NoAgeException(age+",年龄数值非法");
		}
		this.name = name;
		this.age = age;
	}
	//定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。
	public String toString()	{
		return "Person[name="+name+",age="+age+"]";
	}
}
class ExceptionDemo{
	public static void main(String[] args) {
		try
		{
			Person p = new Person("xiaoming",20);
			System.out.println(p);
		}
		catch (NoAgeException ex){
			System.out.println("异常啦");
		}
		System.out.println("over");
	}
}

继承Exception,必须要throws声明,一声明就告知调用者进行捕获,一旦问题处理了调用者的程序会继续执行。

继承RuntimeExcpetion,不需要throws声明的,这时调用是不可能编写捕获代码的,因为调用根本就不知道有问题。一旦发生NoAgeException,调用者程序会停掉,并有jvm将信息显示到屏幕,让调用者看到问题,修正代码。

throw和throws区别

throw和throws的区别

  • throw用在函数内。throws用在函数上。
  • thorw抛出的是异常对象。throws用于进行异常类的声明,后面异常类可以有多个,用逗号隔开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值