当前位置: 首页 > 编程笔记 >

在java中,程序员如何手动抛出异常呢?

公孙巴英
2023-03-14
本文向大家介绍在java中,程序员如何手动抛出异常呢?,包括了在java中,程序员如何手动抛出异常呢?的使用技巧和注意事项,需要的朋友参考一下

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

示例

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程序引发NullPointerException

public 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 AgeDoesnotMatchException 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.<init>(Student.java:18)
   at Student.main(Student.java:39)
 类似资料:
  • rank ▲ ✰ vote url 69 352 48 520 url 手动抛出异常 我想故意制造一个错误,所以我可以转到excepy:语句 我怎么做? 不能在Pythonic了; raise Exception("I know python!") 想得到更多信息,看这里

  • 问题内容: 如何在Python中引发异常,以便以后可以通过except块将其捕获? 问题答案: 在你的消息中要具体,例如: 不要引发通用异常 避免提出泛型。要捕获它,你必须捕获将其子类化的所有其他更具体的异常。 问题1:隐藏错误 例如: 问题2:无法抓住 而且更具体的捕获不会捕获一般异常: 最佳做法:raise声明 而是使用在语义上适合你的的最特定的构造函数。 这也方便地允许将任意数量的参数传递给

  • @apiResponse似乎也没有更正响应类型。 如本问题所述,如何在swagger Codegen中处理多个响应/返回类型(204为空,400为非空等)? 我可以这样扔 但是有没有更好的方法来做到这一点呢?我只想将.getResponseBody()作为对象而不是字符串返回。 非常感谢。

  • 在你可以捕获异常之前,一些代码必须抛出一个异常。任何代码都可能会抛出异常:您的代码,来自其他人编写的包(例如Java平台附带的包)或Java运行时环境的代码。无论是什么引发的异常,它总是通过 throw 语句抛出。 您可能已经注意到,Java平台提供了许多异常类。所有类都是Throwable类的后代,并且都允许程序区分在程序执行期间可能发生的各种类型的异常。 您还可以创建自己的异常类来表示在您编写

  • 问题内容: 我的示例代码如下: 我的要求是,在捕获到异常之后,我要处理数组的其余元素。我怎样才能做到这一点? 问题答案: 您的代码应如下所示:

  • 我的程序从控制台获取表示日期的输入,即。我会相应地存储所有数据 在这个try-catch块中,我检查变量“m”是否是正确的月份,关于日期,介于1和12之间。 如果“m”不是数字,则抛出。 我希望能够在if条件中抛出异常并终止显示抛出的错误和与之关联的消息的程序。