2016-03-22 7 views
0

Ich weiß, dass Sie die CloneNotSupportedException abfangen sollten, wenn Sie die Clone-Methode verwenden. Ich habe jedoch kürzlich versucht, ein Array zufälliger Ganzzahlen zu klonen, indem ich .clone() auf das Array aufruft, und es hat funktioniert! Es war kein Try-Catch-Block notwendig. Der Code war etwas in der Art:Verwenden der Clone-Methode ohne 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. 

Dieser Code kompiliert und läuft wunderschön! Es muss jedoch nicht die CloneNotSupportedException in einem try-catch-Block abgefangen werden. Könnte jemand bitte erklären, warum dies die Ausnahme von der "Regel" zum Einfangen dieser Ausnahme ist. Vielen Dank!!!

+0

Der Compiler weiß, dass Arrays immer klonbar sind, und daher wird 'clone()' auf einem Array 'CloneNotSupportedException' nicht auslösen. – khelwood

+0

"Wenn Sie die Clone-Methode verwenden, sollten Sie die CloneNotSupportedException abfangen." Was gab Ihnen diese Idee? –

Antwort

0

Die javadoc für Object.clone() sagt:

Beachten Sie, dass alle Arrays die Schnittstelle klonbar

Da der Compiler weiß, zu implementieren, werden in Betracht gezogen, dass Arrays immer klonbar sind, ist es, dass clone() auf einem Array weiß wird nicht ausgelöst CloneNotSupportedException. Es macht diese Annahme nicht für andere Klassen, aber Arrays wie gewöhnlich scheinen als Sonderfall behandelt zu werden.

0

Dies ist per Definition. Die Java-Sprachspezifikation says:

10.7. Array-Member
Die Elemente eines Array-Typs sind alle der folgenden: ...
Die öffentliche Methode Klon, die die gleichnamige Methode in der Klasse Object überschreibt und keine überprüften Ausnahmen auslöst.

Verwandte Themen