繁体   English   中英

Java static 初始值设定项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM