我有DirReader和Search类。搜索使用DirReader。我希望搜索知道DirReader何时抛出异常。那我怎么能让课程抛出异常?
目前,我使用initCorrect -dummy var。异常风格的方法可能更合适。
简化示例错误
$ javac ExceptionStatic.java
ExceptionStatic.java:4: '{' expected
public class ExceptionStatic throws Exception{
^
1 error
代码
import java.util.*;
import java.io.*;
// THIS PART NEEDS TO BE FIXED:
public class ExceptionStatic throws Exception{
private static boolean initCorrect = false;
public static String hello;
static{
try{
hello = "hallo";
//some other conditionals in real code
if( true) throw new Exception();
initCorrect=true;
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
if(initCorrect)
System.out.println(hello);
}
}
答案 0 :(得分:29)
throws
关键字不能在类级别应用,只能在方法级别应用。
答案 1 :(得分:4)
你有一个抛出异常的静态代码块?如果你真的需要这样做,请抛出RuntimeException
- 否则将你的逻辑移动到与DirReader或Search类相关联的方法中,并让这些方法抛出相应的Exception
。
以下是您可以开始的示例:
public class test {
static {
try {
method1();
} catch (InterruptedException e) {
throw new RuntimeException();
}
}
protected static void method1() throws InterruptedException {
Thread.sleep(1000);
}
}
答案 2 :(得分:4)
类初始值设定项(“静态块”)以检查的异常终止是一个编译时错误。
如果类初始化程序抛出未检查的异常,则初始化该类的第一次尝试将引发ExceptionInInitializeError
。任何后续尝试使用该类都将导致NoClassDefFoundError
。如果你真的想要使用异常,可以在初始化器中抛出类似RuntimeException
的内容。
但是,在正确初始化类时问题设置中显示的方法实际上可能对许多应用程序来说更好。更具体地说,除非您希望整个程序在初始化失败时终止,否则请使用标志。只需从类声明中删除“throws”子句,因为这不是合法的语法。
答案 3 :(得分:3)
类不能抛出异常。只有方法可能会抛出异常。避免使用基类Exception
类。抛出一个特定的异常,比如IllegalStateException或者扩展Exception
并创建你自己的异常。
答案 4 :(得分:0)
您不能在类定义中引发异常。您应该在方法定义中抛出异常或使用try-catch块。