Die Java- System
Klasse enthält verschiedene Datenelemente und Methoden, die durchaus sinnvoll sind. Zum Beispiel:
System.in (variable)
System.err (variable)
System.out (variable)
System.exit(int)
System.gc()
System.getSecurityManager()
usw. Es gibt jedoch eine Methode, die ich nicht verstehe:
System.arraycopy(Object, int, Object, int int)
Das Kopieren eines Arrays in ein anderes fühlt sich für mich so an, als würde es in die Arrays
Klasse gehören. Folgendes aus der Dokumentation:
Diese Klasse enthält verschiedene Methoden zum Bearbeiten von Arrays (z. B. Sortieren und Suchen). Diese Klasse enthält auch eine statische Factory, mit der Arrays als Listen angezeigt werden können.
Methoden für Arrays manipuliert wird , welche Punkte Sie mich zu diesem Schluss, wie das Kopieren einer Array zu einem anderen ist sicherlich Array Manipulation , nicht wahr?
Also meine Frage: Warum ist arraycopy()
in System
?
Ist es ein Relikt einer frühen Java- System
Klassenimplementierung? Die Methode ist nicht als veraltet markiert, daher bin ich ein bisschen verloren. Darüber hinaus folgt es nicht dem Java-CamelCase-Standard, was mich zu meiner Annahme zurückbringt, dass es ein Relikt des frühen Bibliotheksdesigns ist.
Antworten:
System.arraycopy
wird von jeder JVM nativ implementiert. Hier ist die Methodendeklaration:Dies bedeutet, dass das Kopieren von Arrays in nativen Montageanweisungen so schnell wie möglich erfolgt. Die Idee ist, dass dies eine so häufig benötigte, möglicherweise langsame Funktionalität ist, dass Java dieses Verhalten auf einer niedrigen Ebene bereitstellen sollte.
Andere Möglichkeiten zum Kopieren von Arrays werden entweder umbrochen
System.arraycopy
oder interpretierte Schleifen verwendet, die nicht so performant wären.quelle
native
Methoden inSystem
? Durch die Benennung von Konventionen ist dies irgendwie sinnvoll, da sie systemabhängig sind , aber aus organisatorischer Sichtarraycopy
sinnvoll wäre, in derArray
Klasse oder ähnlichem definiert zu werden und dort ihre native Implementierung zu haben. Persönlich habe icharraycopy
in meinen 5 Jahren Programmierung nur einmal verwendet .native
Methoden vorhanden sindSystem
, sind keinenative
Methoden vorhandenjava.util.Arrays
.System.arraycopy ist einer der ältesten Teile der Bibliothek, während java.util.Arrays in 1.2 hinzugefügt wurde. Ich würde Arraycopy nicht als Relikt bezeichnen, da es nichts gibt, das es direkt ersetzt, und die verschiedenen Kopiermethoden in Arrays sind in Bezug darauf implementiert.
Es gibt nichts Besonderes an System oder Arrays, für das native Methoden erforderlich sind oder das verhindert, dass sie sich in der anderen befinden.
quelle