异常2

来源:互联网 发布:程序员的数学pdf百度云 编辑:程序博客网 时间:2024/06/05 00:29
class AgeTooSmallException extends Exception{
  public AgeTooSmallException(){
  
  }
  public AgeTooSmallException(String msg){
    super(msg);
  }


}


class AgeTooBigException extends Exception{
  public AgeTooBigException(){
  
  }
  public AgeTooBigException(String msg){
    super(msg);
  }
}


class ExceptionDemo3{
  public static void main(String[] args)  //1. throws AgeTooSmallException, AgeTooBigException{
    Person p = new Person();
    try{    
      p.setAge(100); 
    }
    catch (Exception e){
      print("有问题");     
    }


    catch(AgeTooBigException e){  //编译错误 不可达 异常越具体越细节 往前放 上下调换顺序才可以
    //如果之间没有继承关系 那就无所谓了不存在交叉情况
      print("年龄太大了");
    }
    print("over");


  }
}
------------------------------
可以有多个catch语句,catch顺序需要注意
子类异常要先行catch,否则代码不可达 编译也无法通过
--------------------------------
Triangle(int a, int b, int c)非法编程 无法构造三角形 自定义异常 
构造函数可以抛出异常 通过构造函数定义异常信息
InvalidEdgeException()
-----------------------------------------
RuntimeException声明运行时异常不需要在方法的定义中
--------------------------
class AgeTooBigException extends RuntimeException{ //定义成运行时异常
  public AgeTooBigException(){
  
  }
  public AgeTooBigException(String msg){
    super(msg);
  }
}


class ExceptionDemo3{
  public static void main(String[] args)throws AgeTooSmallException{//, AgeTooBigException{
    //
    Person p = new Person();
    try{    
      p.setAge(100); 
    }
    catch (Exception e){
      print("有问题");     
    }


    catch(AgeTooBigException e){  //编译错误 不可达 异常越具体越细节 往前放 上下调换顺序才可以
    //如果之间没有继承关系 那就无所谓了不存在交叉情况
      print("年龄太大了");
    }
    print("over");


  }
}
 
class Person{
  private int age;
  public int getAge(){
    return age;
  }


  public void setAge(int age) throws AgeTooSmallException{ //因为RuntimeException 不需要抛出了, AgeTooBigException{
    if(age<0){
      throw new AgeTooSmallException("too young"); 
    if(age>200){
      throw new AgeTooBigException("too old");  
   }
    this.age=age;
    this.age = age;
  }
}
--------------------------------------------
class Student extends Person throws /*InvalidAgeException,*/ AgeTooSmallException{  
//student 没加TooSmall异常时候 setAge 无法覆盖 Person里面的
//因为toobig 异常是runtime 所以不需要机上 但是 AgeTooSmall不是rumtime要加上
//但是加上TooSmall还是错误 因为InvildAgeException父类没有定义 子类不能加上新的异常
//只能在抛原来异常的基础上细化 方法在重写时 不能声明抛出新的异常类型 只能原来异常类型体系(异常子类)
//比如父类 异常 保护国家动物 子类 保护大熊猫 
// 让非法年龄异常 继承 toosmall异常
  public void setAge(int age){
    if(age<6 || age>15){
      throw new InvalidAgeException();
    }
    //this.age=age;  //age是private 所以编译失败
    //super.setAge(age);//还是编译错误 AgeTooSmall 不能识别 必须加上异常
    print("设置年龄");
  }
}


//class InvalidAgeException extends Exception{
class InvalidAgeException extends AgeTooSmallException{
  private String info;
  public InvalidAgeException(String info){
    this.info = info;
  }


  public void outInfo()
    print(info);


  }
}
--------------------------------------------------------
try里面创建的对象 try外面是看不见的
想用某个对象 一定要放在外面
--------------------------------------------------
异常被一个捕获了 就不会在另一个catch捕获了 
有点像switch  但是switch要加break;更确切说像if else
还有catch顺序很关键 要从小到大


运行时异常 不要try catch 也不需要 抛出异常throws 
--------------------------------------------------



原创粉丝点击