2

私はいくつかのコードを持っています:

public static void a() throws NumberFormatException {
        return;
    }

    public static void b() throws InterruptedException{
        return;
    }

    public static void main(String[] args) {

        a();
        b();

    }

また、Eclipse は、関数呼び出し b() に try/catch を囲む必要があると言っていますが、a() 呼び出しでそれを行う必要はありません。なんで?呼び出されたときに関数 make を try と catch で囲むようにするにはどうすればよいですか?

4

9 に答える 9

6

InterruptedExceptionチェックされた例外であり、チェックされていない例外であるためですNumberFormatException

チェックされた例外の場合、コンパイラはそれらをtry-catchブロックで囲むか、で宣言することを強制しますがthrows、チェックされない例外の場合、try-catchブロックは必須ではありません。

関数a()がスローするためNumberFormatException(チェックされていない例外) コンパイラは、関数呼び出しを で囲むことを強制しませんtry-catch

関数b()がスローInterruptedExceptionされると (チェック例外)、コンパイラは、関数呼び出しを で囲むか、try-catchまたは で宣言することを強制しますthrows

于 2013-04-16T09:07:22.197 に答える
2

NumberFormatExceptionチェックされた例外ではありません (つまり、基本クラスとして java.lang.RuntimeException があるため)。これは、開発者が処理しないことを選択した場合、開発者が処理することを強制されないことを意味します (処理するかどうかは開発者の選択です)。例外が発生した場合は、JVM によって処理されます。

as InterruptedException(つまり、基本クラスとして java.lang.Exception があるため) はチェック済み例外です。つまり、開発者は、try-catch ブロックを使用するか、Throws 句で例外を宣言することによって、毎回それを処理する必要があります。

このを見てください。

于 2013-04-16T09:07:29.430 に答える
1

NumberFormatException() は未チェックの例外 InterruptedException がチェックされているため、チェック済みの例外を try-catch で回避する必要がありますが、try-catch をチェックする必要はありません。その場合、すべてのメソッドに try-catch があります。

于 2013-04-16T09:08:38.483 に答える
1

これはNumberFormatExceptionextendsのためです。RuntimeExceptionつまり、unchecked例外です。WhileInterruptedExceptionchecked例外です。ブロックでキャッチするtry...catchか、メソッドに追加throwsする必要がありますmain()

于 2013-04-16T09:07:43.377 に答える
0

public class InterruptedException は、スレッドが待機中、スリープ中、または他の方法で占有されていて、アクティビティの前または最中にスレッドが中断されたときにスローされる Exception を拡張します。メソッドは、現在のスレッドが中断されたかどうかをテストし、中断された場合はすぐにこの例外をスローしたい場合があります。

ただし、最初のケースでは、 NumberFormatException はチェックされていないことを確認しません。

于 2013-04-16T09:09:23.530 に答える