当前位置: 首页 > 知识库问答 >
问题:

Java静态初始值设定项

申博厚
2023-03-14

我通过解决一些黑客等级问题来学习java。下面的代码是关于学习静态初始值设定项块的。例外情况是thown和Capture,但程序仍在运行,我不确定原因。

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

预期输出:java.lang.例外:宽度和高度必须为正

实际输出:宽度和高度必须为正-2

共有1个答案

越嘉茂
2023-03-14

异常被正确捕获,因此没有理由终止程序。如果需要,可以通过添加系统手动终止。出口(1)

 类似资料:
  • 问题内容: 我对某些文件有引用(在的选项卡中进行配置)。我可以访问和实例化那些文件中包含的类,因此它们包含在类路径中。 我希望这些类将自己注册到全局静态注册表中,因此我向所有这些类添加了一个静态初始化程序块: 我有几个此类都应该注册到的类(这只是一个带有a的类)。但是,每当我访问时,它都不包含任何值。 我读到静态初始值设定项是在首次加载该类时执行的,并且由于我没有在代码中的任何地方直接引用这些类,

  • 问题内容: 据我了解,“静态初始化块”用于设置静态字段的值(如果无法在一行中完成的话)。 但是我不明白为什么我们需要为此设置一个特殊的块。例如,我们将字段声明为静态(无值分配)。然后编写几行代码,生成并为上面声明的静态字段分配一个值。 为什么我们需要在这样一个特殊的块这样的行:? 问题答案: 在非静态块: 每次构造类的实例时被调用。在静态块只被调用一次,当类本身初始化,无论该类型的有多少对象创建。

  • 我有一个场景,我需要从未知来源加载类并实例化它们以进行模拟——我不需要运行代码,但方法和属性必须在结果实例中。我还需要类的名称保持不变,以便将其实例分配给其他已加载类的该类型的字段。有时类实例化由于而失败,使类处于无效状态,无法恢复。我不知道哪个类会事先失败。 考虑一下这一点: 以下是我想到的: 使用ByteBuddy-fails with NoClassDefFoundError创建失败类的子类

  • 问题内容: 我正在尝试发现初始化发生的顺序,或者更确切地说,为什么要按此顺序进行初始化的原因。给定代码: 输出: 但是,将的声明移动到初始化块之前会产生: 而且我完全不知道为什么会以这种顺序发生。此外,如果我在的声明中消除了关键字,则init块和构造函数均不会触发。谁能帮我这个忙吗? 问题答案: 我认为您只是缺少JLS的12.4.2节,其中包括: 接下来,以文本顺序执行类的类变量初始化器和静态初始

  • 问题内容: 如何在Java中初始化类的私有静态成员。 尝试以下操作: 但是在创建类A的第二个对象然后调用f1()时,我得到了空指针异常。 问题答案: 初始化静态成员的首选方法是(如上所述) 或者对于更复杂的初始化代码,您可以使用静态初始化程序块:

  • 我想将一些对象实例绑定到使用Javassist创建的类。该对象是从某个源读取的,数据是预先未知的。 但当我检查API时,Javassist似乎创建了一个真正的字节码,它以“调用这个”或“实例化那个”或“使用这个常量”的形式存储初始化。 有没有办法让Javassist向运行时给定的现有实例添加一个初始化的静态字段?