Java: бросающий исключение класс?

У меня есть классы DirReader и Поиск. Поиск использует DirReader. Я хочу, чтобы поиск знал, когда DirReader выдает исключение. Таким образом, как у меня может быть исключение выдачи класса?

В настоящее время я использую initCorrect - фиктивный 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);
    }
}
12
задан hhh 13 April 2010 в 07:43
поделиться

4 ответа

Это ошибка времени компиляции, когда инициализатор класса ("статический блок") завершает работу с проверенным исключением.

Если инициализатор класса выдает исключение unchecked , первая попытка инициализировать класс вызовет ExceptionInInitializeError .Любые последующие попытки использовать класс вызовут NoClassDefFoundError . Если вы действительно хотите использовать исключение, бросьте что-то вроде RuntimeException в инициализаторе.

Однако подход, показанный в вопросе - установка флага при правильной инициализации класса - на самом деле может быть лучшим для многих приложений. Более конкретно, я бы сказал, что если вы не хотите, чтобы вся программа завершалась при сбое инициализации, используйте флаг. Просто удалите предложение "throws" из объявления класса, потому что это недопустимый синтаксис.

4
ответ дан 26 October 2019 в 04:24
поделиться

Ключевое слово throws не может применяться на уровне класса, только на уровне метода.

31
ответ дан 26 October 2019 в 04:24
поделиться

У вас есть статический блок кода, который вызывает исключение? Если вам действительно нужно это сделать, создайте исключение RuntimeException - в противном случае переместите вашу логику в метод, связанный с классом DirReader или Search, и пусть эти методы генерируют соответствующее исключение .

Вот пример, с которого вы можете начать:

public class test { 


    static {
        try {
            method1();
        } catch (InterruptedException e) {
            throw new RuntimeException();
        }
    }

    protected static void method1() throws InterruptedException {        
        Thread.sleep(1000);        
    }


}
4
ответ дан 26 October 2019 в 04:24
поделиться

Классы не могут создавать исключения. Только методы могут вызывать исключения. Избегайте использования базового класса Exception . Вызовите конкретное исключение, например IllegalStateException, или расширьте Exception и создайте собственное.

3
ответ дан 26 October 2019 в 04:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: