Java异常

                        第1章 异常

1.1 异常概念

Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。

1.2 异常分类

异常的根类是Throwable,其下有两个子类:ErrorException,平常所说的异常指Exception

严重错误Error,无法通过处理的错误

编译时异常Exception,编译时无法编译通过。如日期格式化异常

运行时异常RuntimeException,是Exception的子类,运行时可能会报错,可以不处理。如数学异常

1.3 异常基本操作

创建异常对象(JDK已定义的异常会自动创建对象,自定义异常需要手动创建)

抛出异常(JDK已有定义的异常会自动抛出异常,自定义异常需要手动抛出)

l 处理异常:

捕获处理,将异常获取,使用try/catch做分支处理

try{

需要检测的异常;

}  catch(异常对象) {

异常处理代码

可以调用异常的方法

通常我们只使用一个方法:printStackTrace打印异常信息

}

声明抛出处理,出现异常后不处理,声明抛出给调用者处理。

方法声明上加throws  异常类名

 

注意:异常处理,指处理的一种可能性,即有了异常处理的代码,不一定会产生异常。如果没有产生异常,则代码正常执行,如果产生了异常,则中断当前执行代码,执行异常处理代码。


捕获异常try…catch…finally

捕获:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理

捕获异常格式:

try {

//需要被检测的语句。

}

catch(异常类 变量) { //参数。

//异常的处理语句。

}

finally {

//一定会被执行的语句。

}

try:该代码块中编写可能产生异常的代码。

catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理。

finally有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。

演示如下:



声明异常throws

声明:将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理(稍后讲解该方式),那么必须通过throws进行声明,让调用者去处理。

声明异常格式:

修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2 {   }


例题


请使用代码实现
每一个学生(Student)都有学号,姓名和分数,分数永远不能为为负数
如果试图给学生赋值一个负数,抛出一个自定异常


public class Student {
	private String name;
	private int score;
	private String id;
	public Student(String name, int score, String id) throws StudentException {
		super();
		this.name = name;
		if (score < 0) {
			throw new StudentException("成绩不合法");
		}
		this.score = score;
		this.id = id;
	}
	public Student() {
		super();
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
}

public class StudentException extends Exception{


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

	public StudentException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}
	
}


package Exercise01;


/*请使用代码实现
每一个学生(Student)都有学号,姓名和分数,分数永远不能为为负数
如果试图给学生赋值一个负数,抛出一个自定异常*/


public class Test {
	public static void main(String[] args) {
		try {
			Student  stu= new Student("小明", -11, "ID001");
		} catch (StudentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//输出平台输出:
		/*   Exercise01.StudentException: 成绩不合法
	                at Exercise01.Student.<init>(Student.java:11)
	                at Exercise01.Test.main(Test.java:10)  */
	    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值