如何抛出Customized InputMismatchException java?

时间:2016-02-15 17:43:43

标签: java

我想在InputMismatchException上添加消息Value must contain only numbers

下面的代码编译好了,但是catch块没有显示来自throw block参数的消息。

不写Exception课程,是不可能这样做,还是我写错了。

我从print语句中得到null

import java.util.InputMismatchException;
import java.util.Scanner;

public class X {

    public void getInt() throws Exception{   
        Scanner scan = new Scanner(System.in);
        try {
            System.out.println("Enter a number");
            scan.nextInt();
            throw new InputMismatchException("value must contain only number");
        } catch (InputMismatchException e) {
            System.out.println(e.getMessage()); \\ Expected "value must contain number
        }
    }

    public static void main(String[]arsgs) throws Exception{
        X x = new X();
        x.getInt();
    }
}

6 个答案:

答案 0 :(得分:2)

如果查看Scanner.nextInt()的文档,可以看到它会抛出自己的InputMismatchException。因此,在到达throw代码之前抛出此Exception,并且来自Exception的消息将来自nextInt()调用本身。

答案 1 :(得分:0)

scan.nextInt();行抛出异常。所以它没有达到抛出条款。因此消息未初始化

答案 2 :(得分:0)

所以

  1. 如果您提供数字作为输入,您的catch语句将打印出messgae。

  2. 如果你将字符串作为数字scan.nextInt()传递,将抛出异常,控件将直接转移到catch块,这就是你得到null的原因。它永远不会执行你的throw new InputMismatchException("value must contain only number");,线。

  3. 你可以写下面的内容。

    try {
            System.out.println("Enter a number");
            scan.nextInt();
        } catch (InputMismatchException e) {
            e.printStackTrace();
        }
    

答案 3 :(得分:0)

如果您输入了有效的scan.nextInt()次通行证,则会向您的自定义InputMismatchException发送预期消息。
但是如果你输入其他内容,例如一封信,scan.nextInt();会抛出InputMismatchException本身没有自定义消息。这就是getMessage()返回null的原因。
您需要从nextInt捕获异常并抛出您自己的异常。

try{
    System.out.println("Enter a number");
    scan.nextInt();               
}catch (InputMismatchException e){
    throw new InputMismatchException("value must contain only number");
}

答案 4 :(得分:0)

尝试将throw new InputMismatchException放入捕获中,如下所示:

   }catch (InputMismatchException e){
      throw new InputMismatchException("value must contain only number");
  // System.out.println(e.getMessage()); // Expected "value must contain number

您可以收到错误消息。

答案 5 :(得分:0)

<强>首先,

当用户输入除数字以外的任何内容时,您希望使用自定义消息引发异常。这就是您的目标..为此您可以创建新的CustomException,也可以在捕获异常时打印它...

<强>其次, 您正试图致电

throw new InputMismatchException("value must contain only number");

哪个不会给你预期的结果,因为扫描仪类会抛出InputMismatchException而不是你的班级。

因此,Scanner类抛出的InputMismatchException不包含您所需的错误消息..

要获得预期的输出,试试这个..

import java.util.InputMismatchException;
import java.util.Scanner;
public class X {

public void getInt() throws Exception
{   
   Scanner scan = new Scanner(System.in);
   System.out.println("Enter a number");
   handleException();
}
public static void main(String[]arsgs) throws Exception{
    X x = new X();
    x.getInt();
}

public void handleException()
{
    try
    {
       Scanner scan = new Scanner(System.in);
       scan.nextInt();
    }
    catch(InputMismatchException e)
    {
        System.out.println("value must contain only number");
    }        
}
}

这样做的好处是你可以随时调用这个方法来获取所需的错误信息。这几乎与你想要的类似,即你想要InputMismatchException来打印你的错误信息。