2016-11-24 1 views
1

は、私はJavaでチェックし、未チェックの例外についての記事を読んで、この記事/リンクがわかった。それだけでjavacのために開発されたハックの記事によると https://projectlombok.org/disableCheckedExceptions.htmlJavaでチェックされた例外を無効にできますか?

を。私は、ファイルを開くしようとしていますので、public static void main(String args[]) throws IOException を記述する必要があります。ここ

import java.io.*; 
class Example 
{ 
    public static void main(String args[]) throws IOException 
    { 
     FileInputStream fis = null; 
     fis = new FileInputStream("myfile.txt"); 
     int k; 

     while((k = fis.read()) != -1) 
     { 
      System.out.print((char)k); 
     } 
     fis.close();  
    } 
} 

は、以下のコードを考えてみましょう。ここでは "throws"節が必須です。それがなければ私は誤りを起こすでしょう。私が開いているファイルの存在について確信が持てたらどうなりますか?すなわち上記の場所の.myfile.txt。ある時点で、コードにはチェック例外はほとんど必要ないと感じることができます。

必要に応じてチェックされた例外を無効にする機能はJavaによって提供されていますか?

多くの研究をしても、私は適切な答えを見つけることができませんでした。

+0

あなたが考えるほどのsomethinであることを、確認されることはありませんソフトウェアを書くとき、それはあります。何か問題が生じた場合は、常に例外をスローする必要があります。どうしてあなたはそれらを無効にしたいのですが、すべてが正しければ、それは投げられるべきで、投げられるべきではないでしょう。 –

+2

今は確かかもしれませんが、そのファイルの場所が変更されるか、ディスク/ファイルシステムの破損のような)?どのようにJavaはその状況で反応する必要がありますか?それは 'new FileInputStream(" myfile.txt ");から例外がありますが、それで何もできません...あなたのコードはどのように進むべきですか?それはもっと遠くに行き、単に例外を無視するべきでしょうか?これはトラブルを求めています。 – Pshemo

+0

どのように確認できますか? – njzk2

答えて

1

必要に応じてチェックされた例外を無効にする機能はJavaによって提供されていますか?

公式の施設が、必要なときに1を使用することができます回避策があります。両方はオプションであるかもしれない未チェックの例外を使用して、Javaで未チェックチェック例外があるので

まず、。RuntimeExceptionから派生するすべての例外は未チェックです:

RuntimeExceptionは、 Java仮想マシンの通常の処理でスローすることができ、それらの 例外のスーパークラスです。 方法は、そのが 句 メソッドの実行中にスローされますがキャッチされないかもしれないのRuntimeExceptionのサブクラスをスローで宣言する必要はありません。

興味深い読み取りhere,hereです。

は、それを宣言せずにチェック例外をスローすることができますtype erasureあります。

は、javacのは、あなたがキャッチを書いてみましょうではないだろうとして、直接の種類を確認こそこそスローキャッチすることは不可能であることに注意してください:
これは、プロジェクトのロンボクは慎重に@SneakyThrows

import lombok.SneakyThrows; 

public class SneakyThrowsExample implements Runnable { 
    @SneakyThrows(UnsupportedEncodingException.class) 
    public String utf8ToString(byte[] bytes) { 
    return new String(bytes, "UTF-8"); 
    } 

    @SneakyThrows 
    public void run() { 
    throw new Throwable(); 
    } 
} 

使用のために使用するものですtryボディ内でメソッド呼び出しがスローされたと宣言しない例外タイプのブロック。

最後に、チェックされた例外を気にするコンパイラだけですが、それはjvmの一部ではありません。コンパイラステージを過ぎると、何かが可能になります。したがって、直接バイトコードを書くか、checked exceptions disabledでjavacのバージョンを使用すると、完全にバイパスされます。

1

コンパイラをハッキングする以外に、私が知っているチェック例外を無効にするオプションはありません。クライアントコードがチェックされた例外を処理することを強制したくない場合は、チェックされた例外をキャッチしてランタイム例外内で再スローすることをお勧めします。

0

チェック例外を無効にするためにJavaが提供する機能はありますか? 必要に応じてですか?

いいえ、チェックされた例外は目的のために無効にすることはできません。

チェックされた例外は、例外時に(コード内の)回復メカニズムが提供される場合に役立ちます(IOExceptionなど)。また、コードを実行することによって例外が発生する可能性があることを認識したり、適切な処置を講じたりすることができます。

このコンパイル時の例外ハンドラの有無をチェックは ない正しく処理された例外の数を減らすように設計されています。

私はあなたがよりよく理解するためにhereを見ることをお勧めします。

関連する問題