3

异常和集合类


一.异常概述

异常就是Java程序在运行过程中出现的错误。一般被分为两大类:编译时异常和运行时异常。

体系:
Throwable

 ---Error
       ---Exception
            ---RuntimeException

编译时异常:
image

运行时异常:
image

二.异常处理
1.throw和throws

throw:用在函数内,用于抛出异常对象
throws:用在函数上,用于抛出异常类,可抛出多个

Tips:

1.当函数内用throw抛出异常,未进行try处理时,必须在函数上声明(RuntimeException除外),当调用此函数的时候,需用try处理。

2.如果函数内抛出了异常,处理方法可以是throws可以是try

image

2.try...catch...finally语句块处理

语法格式:(假设错误是除零)

try{  
             //可能出现异常的代码块  
             FileputStream in = new FileputStream(path);  
             //一旦出现异常,下面的代码不会再执行  
             System.out,println();  
                          }catch(Exception e){
                  //by zero
                  e.getMessage();
                  
                  //异常名称:异常信息
                  e.toString();
                  
                  //异常名称,异常信息,异常位置
                  e.printStackTrace();   
                          }finally{
                  //一定会执行的代码
                  }
    }
3.自定义异常

自定义异常

语法格式:

public class 异常类名 extends Exception{
         有参构造
}

public class ScoreException extends Exception{
       ScoreException(String message)
       {
                  super(message);
        }
}

实例:

ScoreException.java:
public class ScoreException extends Exception{ 
        ScoreException(String message) 
        {
               super(message);
        }
}

Teacher.java:
public class Teacher {
           public void checkScore(int score) throws ScoreException{
                 if(score<0||score>100) {
                     throw new ScoreException("你的分数有误!");                     
                 }else {
                     System.out.println("分数正常");
                 }
           }
}

TeacherTest.java:
public class TeacherTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入分数:");
        int score = sc.nextInt();
        
        Teacher t = new Teacher();
        try {
            t.checkScore(score);
        } catch (ScoreException e) {            
            e.printStackTrace();
        }
    }

}

image
image

4.异常处理原则

1.当捕获到的异常,本功能处理不了,应该在catch中继续抛出

try
{
      throw new AException();
}
catch(AException e)
{
       throw e;
}

2.子类在重写父类抛出异常的方法时,要么不抛出异常,要么抛出与父类方法相同的异常或该异常的子类。如果被重写的父类方法只抛出受检异常,则子类重写的方法可以抛出非受检异常。例如,父类方法抛出了一个受检异常IOException,重写该方法时不能抛出Exception,对于受检异常而言,只能抛出IOException及其子类异常,也可以抛出非受检异常。

//正确
 class A { 
      public void fun() throws Exception {}  
 }  
 class B extends A {      
      public void fun() throws IOException,RuntimeException {            
     } 
 }
 
 //错误
 class A {      
      public void fun() throws RuntimeException {}     
  }  
 class B extends A {      
      public void fun() throws IOException, RuntimeException {            
  } 
}
Tip:

RuntimeException和它的子类以及Error和它的子类都是非受检异常。


悠悠我心
7 声望1 粉丝