我想在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();
}
}
答案 0 :(得分:2)
如果查看Scanner.nextInt()的文档,可以看到它会抛出自己的InputMismatchException
。因此,在到达throw代码之前抛出此Exception,并且来自Exception的消息将来自nextInt()
调用本身。
答案 1 :(得分:0)
从scan.nextInt();
行抛出异常。所以它没有达到抛出条款。因此消息未初始化
答案 2 :(得分:0)
所以
如果您提供数字作为输入,您的catch语句将打印出messgae。
如果你将字符串作为数字scan.nextInt()
传递,将抛出异常,控件将直接转移到catch块,这就是你得到null的原因。它永远不会执行你的throw new InputMismatchException("value must contain only number");
,线。
你可以写下面的内容。
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来打印你的错误信息。