[英]Java static initializers
我正在通过解决一些黑客等级问题来学习 java。 下面的代码是关于学习 static 初始化块。 异常被抛出并被捕获,但程序继续运行,我不确定为什么。
java
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
//Write your code here
public static int B;
public static int H;
public static boolean flag;
public static Scanner sc;
static {
try{
sc = new Scanner(System.in);
flag = true;
B = sc.nextInt();
H = sc.nextInt();
if(B < 0 || H < 0){
throw new Exception("Breadth and height must be positive");
}
}catch (Exception e){
System.out.println(e.getMessage());
}
}
public static void main(String[] args){
if(flag){
int area=B*H;
System.out.print(area);
}
}//end of main
}//end of class
输入:-1、2
预期 output:java.lang.Exception:宽度和高度必须为正
actual output:宽度和高度必须为正-2
异常被正确捕获,因此没有理由终止程序。 如果需要,您可以通过添加System.exit(1);
手动终止。
此代码块捕获您的错误并显示消息。 在您的情况下,它的“宽度和高度必须为正 -2”
}catch (Exception e){
System.out.println(e.getMessage());
}
这将修复它:
}catch (Exception e){
System.out.println(e.getMessage());
System.exit(1);
}
但是你应该这样做:
移除 try catch。 然后你必须将 Exception 更改为 RuntimeException
static {
sc = new Scanner(System.in);
flag = true;
B = sc.nextInt();
H = sc.nextInt();
if (B < 0 || H < 0) {
throw new RuntimeException("Breadth and height must be positive");
}
}
第二个选项的Output:
1
-2
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: Breadth and height must be positive
at Main.<clinit>(Main.java:18)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.