Demo12_异常的自定义

package test03_1;

public class Demo12_异常的自定义 {

public static void main(String[] args) {
 Person p = new Person("zhausj",-21);
 System.out.println(p);
}

}

@SuppressWarnings(“serial”)
/*
* 自定义异常 描述Person的年龄值非法
* 只要本项目的年龄出现非法值就会发生异常
*/
class NoAgeException extends RuntimeException

/*
void show(){
//为什么继承Exception和继承RuntimeException差距那么大
//1.如果函数抛出Exception。那么编译失败,因为编译器在检查语法时发生了错误
//2.该程序已经出现了问题,Java认为这个程序本身存在问题,需要捕获和声明出来
throw new Exception();

throw new RuntimeException();
       为什么抛出RuntimeException,不需要捕获和声明呢?
不是功能本身发生的错误,而是因为比如调用者传递参数错误而导致的功能运行失败
这事也是问题,需要通过异常来体现,但是这个异常不用声明。
声明的目的是为了让调用者来进行处理
不声明的目的是为了不让调用者进行处理,就是为了让程序停止,使调用者看到现象,并进行代码的更正  

}

异常分类

1.编译时异常 编译器会检测的异常
2.运行时异常 编译器不会监测的异常 不需要声明,可以声明,就是让调用者给出处理方式
常见runtime异常
ArrayIndexOutOfBoundsException
IllegalArgumentException
NullPointerException
ClassCastException
*/
{
//为什么要定义构造函数 因为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)
{
// System.out.println(“年龄错误”);
// return;//终止初始化

        //throw new IllegalArgumentException("buzhengchang");
        throw new NoAgeException("assdasd");
    }
    this.name = name;
    this.age = age;
}
//定义Person对象对应的字符串表现形式。覆盖Object中的toString方法
public String toString()
{
    return "Person[name="+name+",age="+age+"]";
}

}

猜你喜欢

转载自blog.csdn.net/mingxu_W/article/details/81561066
今日推荐