ArrayCopy Method of System Class i Java

ArrayCopy Method of System Class i Java
Tenk på følgende to matriser: p = 'a', 'b', 'c', 'd', 'e'

og

Q = 'f', 'g', 'h', 'i', 'j'

Hvis underarrangen fra indeks 2 til slutten av Array P er kopiert til Array Q, som begynner fra indeksen, 1, ville den nye matrisen Q:

'F', 'c', 'd', 'e', ​​'j'

Elementene 'G', 'H' og 'I' of Array Q har blitt overskrevet. Husk at lengden på en matrise verken kan økes eller reduseres etter definisjon. Så overskriving må finne sted under slik kopiering. Målet her er ikke å sette inn. Målet er å kopiere. Matrisen er ikke en normal datastruktur for å tillate innsetting. Med innsetting for datastrukturer, blir alle elementene til høyre forskjøvet til høyre mange steder. Ikke glem at når en matrise i Java ikke har praktiske verdier, har den standardverdier. Med andre ord, en tomme tomt av lengden har standardverdier.

Systemklassen til Java.lang.* Pakken har metoden ArrayCopy (). Hensikten med denne metoden er å kopiere en del av en matrise til en annen matrise. En del kan være hele matrisen!

Syntaks

Før du vurderer syntaks for metoden, er det godt å vurdere et program med bruk av ArrayCopy () -metoden, for ovennevnte Array -kopieringeksempel. Programmet er:

public class theclass
public static void main (String [] args)
char [] p = 'a', 'b', 'c', 'd', 'e';
char [] q = 'f', 'g', 'h', 'i', 'j';
System.ArrayCopy (P, 2, Q, 1, 3);
System.ute.println (q);

Utgangen er fcdej, bedre skrevet som, f c d e j. Utgangen er som forventet, men ikke godt formatert. Legg merke til at javaen.lang.* Pakken er ikke importert. Javaen.lang.* Pakken trenger ikke å importeres av programmereren for noen klasse, for eksempel system, som den har. Syntaksen er:

offentlig statisk tomrom arraycopy (objekt src, int srcpos, objekt dest, int destpos, int lengde)

Metoden er statisk. Dette betyr at systemklassen ikke trenger å bli instantiert for å bruke metoden. Det første argumentet er utvalget som elementene skal kopieres fra. Det kalles kilden, og i ovennevnte tilfelle er det matrise P. Det andre argumentet er startindeksen for å kopiere fra kilden. I ovennevnte tilfelle er det 2. Det tredje argumentet er utvalget som elementer skal kopieres. Det kalles destinasjonen, og i ovennevnte tilfelle er det matrise q. Det fjerde argumentet er startindeksen for kopi som mottar av destinasjonsarrayen. I ovennevnte tilfelle er det 1. Det femte argumentet er antall elementer som skal kopieres fra kildekruppen, som er det samme som antall elementer som skal erstattes i destinasjonsarrayen. Tellingen av dette tallet begynner fra indeksen.

Merk: Lengdene på kilden og destinasjonsarrayene trenger ikke å være de samme.

Inkompatibilitet

Når implementeringene av de to matriser og uttalelsene om arraycopy () er riktige, vil programmet kompilere, alt er likt. Hvis det er noen inkompatibilitet, vil ikke programmet kjøre, og det tilsvarende unntaket vil bli kastet.

To data ikke av samme type

På engelsk er flertall av datum data. Hvis en av matriser har rolle og den andre har byte, vil programmet fortsatt sammenstille, alt er likt. Imidlertid vil en ArrayStoreException bli utstedt under kjøretid, og programmet vil ikke utføre. Unntaksfeilmeldingen kan være:

Unntak i tråden "Main" Java.lang.ArrayStoreException: ArrayCopy: Type Mismatch: kan ikke kopiere røye [] til byte []
hos Java.base/java.lang.System.ArrayCopy (Native Method)
på Theclass.Hoved (TheClass.Java: 10)

To data ikke av samme art

Hvis en av matriser har chars og den andre har karakterer, vil programmet fortsatt sammenstille, alt er likt. Imidlertid vil en ArrayStoreException bli utstedt under kjøretid, og programmet vil ikke utføre. Unntaksfeilmeldingen kan være:

Unntak i tråden "Main" Java.lang.ArrayStoreException: ArrayCopy: Type Mismatch: kan ikke kopiere char [] til objekt Array []
hos Java.base/java.lang.System.ArrayCopy (Native Method)
på Theclass.Hoved (TheClass.Java: 10)

Destinasjonsarray for kort

Hvis lengden (femte argument) går utover destinasjonsarray.g.

Unntak i tråden "Main" Java.lang.ArrayIndexOutofBoundSexception: ArrayCopy: Siste destinasjonsindeks 4 Out of Grens for Char [3]
hos Java.base/java.lang.System.ArrayCopy (Native Method)
på Theclass.Hoved (TheClass.Java: 10)

Kildearray for kort

Hvis lengden (femte argument) går utover kildearray.g.

Unntak i tråden "Main" Java.lang.ArrayIndexOutofBoundSexception: ArrayCopy: Last Source Index 6 Out of Bounds for Char [5]
hos Java.base/java.lang.System.ArrayCopy (Native Method)
på Theclass.Hoved (TheClass.Java: 10)

Destinasjonsarray er null

Destinasjonsarrayen kan være null. For eksempel,

char [] q = null;

I dette tilfellet vil en nullpointerException bli kastet av systemet.ArrayCopy () -metode; e.g.

Unntak i tråden "Main" Java.lang.NullPointerException
hos Java.base/java.lang.System.ArrayCopy (Native Method)
på Theclass.Hoved (TheClass.Java: 10)

Merk,

char [] q = ;

betyr ikke at Q er null. Det betyr at Q er tom. Med dette er det en ArrayIndexoutofBoundSexception som vil bli kastet; e.g.

Unntak i tråden "Main" Java.lang.ArrayIndexOutofBoundSexception: ArrayCopy: Siste destinasjonsindeks 4 Out of Grens for Char [0]
hos Java.base/java.lang.System.ArrayCopy (Native Method)
på Theclass.Hoved (TheClass.Java: 10)

Kildearray er null

Kildeoppstillingen kan være null. For eksempel,

char [] p = null;

I dette tilfellet vil en nullpointerException bli kastet av systemet.ArrayCopy () -metode; e.g.

Unntak i tråden "Main" Java.lang.NullPointerException
hos Java.base/java.lang.System.ArrayCopy (Native Method)
på Theclass.Hoved (TheClass.Java: 10)

Merk,

char [] p = ;

betyr ikke at P er null. Det betyr at P er tom. Med dette er det en ArrayIndexoutofBoundSexception som vil bli kastet; e.g.

Unntak i tråden "Main" Java.lang.ArrayIndexoutofBoundSexception: ArrayCopy: Siste kildeindeks 5 ut av grensene for char [0]
hos Java.base/java.lang.System.ArrayCopy (Native Method)
på Theclass.Hoved (TheClass.Java: 10)

Konklusjon

Systemklassen til Java.lang.* pakke, har arraycopy () -metoden. Hensikten med denne metoden er å kopiere en del av en matrise til en annen matrise. En del kan være hele matrisen! Dette er en statisk metode, så systemklassen trenger ikke å bli instantiert for at metoden skal brukes. Metoden returnerer tomrom. Syntaks for metoden er:

offentlig statisk tomrom arraycopy (objekt src, int srcpos, objekt dest, int destpos, int lengde)