Implementazione della classe di sistema Java

8

Java % la classeSystem contiene vari membri e metodi di dati che hanno perfettamente senso essere lì. Ad esempio:

System.in (variable)
System.err (variable)
System.out (variable)
System.exit(int)
System.gc()
System.getSecurityManager()

ecc. Tuttavia, c'è un metodo che non capisco essere lì:

System.arraycopy(Object, int, Object, int int)

Copiare un array in un altro mi sembra che appartenga a Arrays classe; seguendo dalla documentazione:

This class contains various methods for manipulating arrays (such as sorting and searching). This class also contains a static factory that allows arrays to be viewed as lists.

I metodi per manipolare gli array sono ciò che mi indica questa conclusione, poiché copiare un array su un altro è sicuramente manipolazione dell'array , giusto?

Quindi la mia domanda: perché arraycopy() in System ?

È una reliquia di un'implementazione precoce di classe System Java? Il metodo non è contrassegnato come deprecato, quindi sono un po 'perso. Inoltre, non segue lo standard Java CamelCase, il che mi riporta a pensare che si tratta di una reliquia del design della prima biblioteca.

    
posta Chris Cirefice 17.03.2015 - 18:10
fonte

2 risposte

8

System.arraycopy è implementato in modo nativo da ogni JVM. Ecco la dichiarazione del metodo:

public static native void arraycopy(Object src,  int  srcPos,
                                    Object dest, int destPos,
                                    int length);

Ciò significa che esegue la copia dell'array nel modo più rapido possibile nelle istruzioni di assemblaggio nativo. L'idea è che questa è una funzionalità così necessaria, potenzialmente lenta, che Java dovrebbe fornire questo comportamento a un livello basso.

Altri modi di copiare gli array o avvolgere System.arraycopy , o usare loop interpretati, che non sarebbero altrettanto performanti.

    
risposta data 17.03.2015 - 18:15
fonte
4

Is it a relic of an early Java System class implementation?

System.arraycopy è una delle parti più vecchie della libreria, mentre java.util.Arrays è stato aggiunto in 1.2. Non chiamerei arraycopy una reliquia perché non c'è nulla che la sostituisca direttamente, e i vari metodi di copia negli array sono implementati in termini di esso.

Non c'è nulla di speciale su System o Array che richiede che i metodi nativi siano in uno o impediscano loro di essere nell'altro.

    
risposta data 17.03.2015 - 20:27
fonte

Leggi altre domande sui tag