例外是程序执行期间发生的问题(运行时错误)。发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行。

示例import java.util.Scanner;

public class ExceptionExample {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter first number: ");
int a = sc.nextInt();
System.out.println("Enter second number: ");
int b = sc.nextInt();
int c = a/b;
System.out.println("The result is: "+c);
}
}

输出结果Enter first number:

100

Enter second number:

0

Exception in thread "main" java.lang.ArithmeticException: / by zero

at ExceptionExample.main(ExceptionExample.java:10)

手动抛出异常

您可以使用throw关键字显式引发用户定义的异常或预定义的异常。

用户定义和预定义的异常有两种类型,每种异常由一个类表示,并且继承Throwable类。

要显式抛出异常,您需要实例化它的类并使用throw关键字抛出其对象。

示例

以下Java程序引发NullPointerExceptionpublic class ExceptionExample {
public static void main(String[] args) {
System.out.println("Hello");
NullPointerException nullPointer = new NullPointerException();
throw nullPointer;
}
}

输出结果Hello

Exception in thread "main" java.lang.NullPointerException

at MyPackage.ExceptionExample.main(ExceptionExample.java:6)

每当显式抛出异常时,都需要确保带有throw关键字的行是程序的最后一行。这是因为在此之后编写的任何代码都是无法访问的代码,并且如果您在此行下方仍然有代码片段,则会生成编译时错误。

示例public class ExceptionExample {

public static void main(String[] args) {
System.out.println("Hello");
NullPointerException nullPointer = new NullPointerException();
throw nullPointer;
System.out.println("How are you");
}
}

编译时错误D:\>javac ExceptionExample.java

ExceptionExample.java:6: error: unreachable statement

System.out.println("How are you");

^

1 error

用户定义的例外

通常throw关键字通常用于引发用户定义的异常。每当我们需要定义自己的异常时,就需要定义扩展Throwable类的类,并覆盖所需的方法。

实例化此类,并在需要异常的任何地方使用throw关键字将其抛出。

示例

在下面的Java程序中,我们将创建一个名为AgeDoesnotMatchException的自定义异常类。public class Age

DoesnotMatchException extends Exception{
AgeDoesnotMatchException(String msg){
super(msg);
}
}

另一个类Student包含两个私有变量名称age和一个初始化实例变量的参数化构造函数。

作为主要方法,我们接受用户的姓名和年龄值,并通过传递接受的值来初始化Student类。

在Student类的构造函数中,我们创建了一个异常AgeDoesnotMatchException的对象,并在年龄值介于17到24之间时引发了异常(使用throws)。public class Student extends RuntimeException {

private String name;
private int age;
public Student(String name, int age){
try {
if (age<17||age>24) {
String msg = "Age is not between 17 and 24";
AgeDoesnotMatchException ex = new AgeDoesnotMatchException(msg);
throw ex;
}
}catch(AgeDoesnotMatchException e) {
e.printStackTrace();
}
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 Student: ");
String name = sc.next();
System.out.println("Enter the age of the Student should be 17 to 24 (including 17 and 24): ");
int age = sc.nextInt();
Student obj = new Student(name, age);
obj.display();
}
}

输出结果

在执行此程序时,您需要从键盘传递名称和年龄值。如果给定的年龄值不在17到24之间,则发生异常,如下所示-Enter the name of the Student:

Krishna

Enter the age of the Student should be 17 to 24 (including 17 and 24):

14

AgeDoesnotMatchException: Age is not between 17 and 24

Name of the Student: Krishna'

Age of the Student: 14

at Student.(Student.java:18)

at Student.main(Student.java:39)