2016-03-22 4 views
0

私は、クローンメソッドを使用するときは、CloneNotSupportedExceptionをキャッチすることになっていることを知っています。しかし、私は最近、配列の.clone()を呼び出すだけで、ランダムな整数の配列を複製しようとしました。 try-catchブロックは必要ありませんでした。コードは次のようなものでした:CloneNotSupportedExceptionをキャッチせずにクローンメソッドを使用する

import java.util.Arrays; 
import java.util.Random; 

public class ClonePractice 
{ 
    public static void main(String[ ] args) 
    { 
     int[ ] A = new int[100]; 

     Random random = new Random(); 

     for(int i = 0; i < 100; i++) 
      A[i] = 1 + random.nextInt(100); //Get random integer between 1 and 100. 

     int[ ] B = A.clone(); 

     B[0] = 1000; 

     System.out.println(Arrays.toString(A)); 

     System.out.println(Arrays.toString(B)); 

     // Arrays A and B should have different first values because they are 
     // independent objects in memory. 

    } // End of main method. 

} // End of ClonePractice class. 

このコードは美しくコンパイルされ、実行されます。しかし、try-catchブロック内でCloneNotSupportedExceptionをキャッチする必要はありません。誰かが、なぜこの例外をキャッチするかについての "ルール"の例外である理由を説明できますか?ありがとうございました!!! Object.clone()ため

+0

コンパイラは、配列は常にクローン可能であることを知っているため、配列の 'clone()'は 'CloneNotSupportedException'を生成しません。 – khelwood

+0

"クローンメソッドを使用する場合は、CloneNotSupportedExceptionをキャッチするはずです。 –

答えて

0

のjavadocは言う:すべてのアレイが

Cloneableを

インタフェースを実装するために考えられているコンパイラは、配列は常に複製可能であることを知っているので、それはアレイ上 clone()ことを知っていることを

注意CloneNotSupportedExceptionを上げることはありません。それは他のCloneableクラスについては仮定されていませんが、通常の配列は特殊なケースとして扱われているようです。

0

これは定義によるものです。 Java言語仕様says

10.7配列メンバ
配列型のメンバは、すべて次のとおりです。
...
publicメソッドcloneは、Objectクラスの同じ名前のメソッドをオーバーライドし、チェック例外をスローしません。

関連する問題