Подтвердить что ты не робот

Java: класс исключения?

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

В настоящее время я использую 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);
    }
}
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

У вас есть статический блок кода, который генерирует исключение? Если вам действительно нужно сделать это, бросьте 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);        
    }


}

Ответ 4

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

Ответ 5

Вы не можете выбросить исключение в определении класса. Вы должны выбросить свое исключение в определение метода или использовать блок try-catch.