一、异常
异常是什么?
程序在运行的过程,出现了一些突发状况,造成程序无法继续运行。
- 异常发生的图解过程:
2.异常体系
Java异常处理的五个关键字:try、catch、finally、throw、throws
java中处理异常的两种方式:
1)声明异常:
2)捕获异常:
throw和throws的区别?
throw:抛出异常,用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。
throws:声明异常,运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).
下面是关于异常的一道面试题,具体的解析过程可以debug来看。值得注意的是最后x的值是2,但是输出的是1
public class TryCatchFinallyDemo06 {
public static void main(String[] args) {
//调用方法
int x = show(0);
System.out.println("x = " + x);//
}
private static int show(int n) {
try {
//可能发生异常代码
//判断n
if(n == 0){
//抛异常
throw new Exception("n不能等于0");
}
System.out.println("try......");
n++;
//返回数据
return n;
} catch (Exception e) {
System.out.println("哈哈抓住你了。。");
n++;
return n;//return 的n开辟了一个临时空间
} finally {
System.out.println("我是必须执行的");
n++;
// return n;
}
}
}
运行结果:x=1
二、自定义异常
package HomeWork.Demo08;
/*
请使用代码实现
每一个学生(Student)都有学号,姓名和分数,分数永远不能为负数
如果老师给学生赋值一个负数,抛出一个自定异常
1.创建Student类的javabean
在有参构造的参数列表后声明一个异常
在方法体中throw new GradeException("成绩越界异常");
2.创建GradeException类
写上有参数构造,无参构造,有参构造方法体中写上super(message)
3.在测试类中选中可能出现异常的代码,
ctrl+alt+T生成捕获异常代码
*/
public class Student {
private String num;//学号
private String name;//姓名
private double grade;//姓名
public String getNum() {return num;}
public void setNum(String num) {this.num = num;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public double getGrade() {return grade;}
public void setGrade(double grade) {this.grade = grade;}
public Student(String num, String name, double grade) throws GradeException{
if(grade<0){
throw new GradeException("成绩越界异常");
}
this.num = num;this.name = name; this.grade = grade;
}
public void show(){
System.out.println(getName()+"的成绩:"+getGrade());
}
}
public class GradeException extends Throwable {
public GradeException() {
}
public GradeException(String message) {
super(message);
}
}
public class Test {
public static void main(String[] args) {
try {
Student s = new Student("001", "labek", -80);
s.show();
} catch (GradeException e) {
e.printStackTrace();
}
}
}