2017-01-06 16 views
0

目的を理解するために以下のコードを作成しました。例外処理のクエリ

以下のコードではtryブロックにエラーがありますので、ブロックをキャッチして15を印刷する必要があります。最終的にはブロックが実行されるため、常に20が必要です。 出力では、出力に表示されます。

なぜこのdescripancy.IはJavaの初心者ですか? 15と20の両方を出力する必要がある場合は、必要に応じてプログラムを変更してください。

package javaapplication91; 

public class NewClass 
{ 
public static void main(String[] args) 
{ 
    NewClass n = new NewClass(); 
    int z = n.m1(); 
    System.out.println("z = " + z); 
} 

public int m1() 
{ 
    try 
    { 
     int a = 10/0; 
     System.out.println("Exception created"); 
     return 10; 
    } 
    catch(ArithmeticException ae) 
    { 
     return 15; 
    } 

    finally 
    { 
     return 20; 
    } 
} 
} 
+0

Iメソッドは2つの値を返すことはできません。私は準備ができました[JLS 10.20](https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.20) –

+0

あなたのメソッドは1つのint値を返すように書かれています。両方の値が必要な場合は、int []を返すようにメソッドを書き直し、int値をintに格納した後にそれを返すことができます。 – Jeet

答えて

1

メソッド宣言の戻り値の型がintの場合、メソッドから1つの値のみを返すことができます。

あなたは例外をキャスときArithmeticExceptionあなたは15を返すようにしようとしたが、finallyブロックはtry catchブロックの最後にオールウェイズ実行するので、あなたは、20を持って、それが最後のreturn文になります。

あなたは両方の値を返したい場合、あなたはこのように配列またはリストを使用することができますについてfinallyhere (Java Tutorial)

を読むことができます:はArithmeticException内側戻しが最終的に返すことで上書きされます

public List<Integer> m1() { 

    List<Integer> returnValues = new ArrayList<Integer>(); 
    try { 
     int a = 10/0; 
     System.out.println("Exception created"); 
     returnValues.add(10); 
    } catch(ArithmeticException ae) { 
     returnValues.add(15); 
    } finally { 
     returnValues.add(20); 
     return returnValues; 
    } 
} 
+0

私はOPには、メソッドがどのように値を返すかという、より根本的な誤解があると思います。 –

+0

@BoristheSpiderはい、メソッドがどのように値を返すのかを突き止めるために、彼は 'finally'の仕組みについて読む必要があります。 –

+0

実際には、OPはどのように 'try {throw Exception; return 10} catch(e){return 15} 'は実際に動作します。 '10'が行くところでは、' 15'が返されます。そうすれば、「最終的に」ステートメントを理解することができます。 –

0

とそれはあなたの関数に返されます。 アドバイスは、最終的にファイルを閉じるときやリソースを回復するときにのみ使用できます。