Java 中的 Exception 实例是已检查异常还是未检查异常?


异常是在程序执行期间发生的错误(运行时错误)。当发生异常时,程序会突然终止,异常行之后的代码将不会执行。

Java中有两种类型的异常。

  • 未检查异常 - 未检查异常是在执行时发生的异常。这些也称为运行时异常。这些包括编程错误,例如逻辑错误或API的不正确使用。运行时异常在编译时会被忽略。
  • 已检查异常 - 已检查异常是在编译时发生的异常,这些也称为编译时异常。这些异常在编译时不能被简单地忽略;程序员应该处理这些异常。

异常层次结构

在Java中,所有异常都是java.lang.Throwable类的子类。

Throwable和Exception类的所有实例都是已检查异常,RuntimeException类的实例是运行时异常。

例如,如果您通过扩展Exception类来创建一个用户定义的异常,则会在编译时抛出此异常。

示例

import java.util.Scanner;
class NotProperNameException extends Exception {
   NotProperNameException(String msg){
      super(msg);
   }
}
public class CustomCheckedException{
   private String name;
   private int age;
   public static boolean containsAlphabet(String name) {
      for (int i = 0; i < name.length(); i++) {
         char ch = name.charAt(i);
         if (!(ch >= 'a' && ch <= 'z')) {
            return false;
         }
      }
      return true;
   }
   public CustomCheckedException(String name, int age){
      if(!containsAlphabet(name)&&name!=null) {
         String msg = "Improper name (Should contain only characters between a to z (all small))";
         NotProperNameException exName = new NotProperNameException(msg);
         throw exName;
      }
      this.name = name;
      this.age = age;
   }
   public void display(){
      System.out.println("Name of the Student: "+this.name );
      System.out.println("Age of the Student: "+this.age );
   }
   public static void main(String args[]) {
      Scanner sc= new Scanner(System.in);
      System.out.println("Enter the name of the person: ");
      String name = sc.next();
      System.out.println("Enter the age of the person: ");
      int age = sc.nextInt();
      CustomCheckedException obj = new CustomCheckedException(name, age);
      obj.display();
   }
}

编译时异常

编译时,上述程序会生成以下异常。

CustomCheckedException.java:24: error: unreported exception NotProperNameException; must be caught or declared to be thrown
   throw exName;
   ^
1 error

更新于:2019年8月7日

523 次查看

启动您的职业生涯

完成课程获得认证

开始学习
广告