Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° JavaΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 48

Автор Н.А. Вязовик

Рассмотрим созданиС массива Π½Π° основС ссылочного Ρ‚ΠΈΠΏΠ°. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, это Π±ΡƒΠ΄Π΅Ρ‚ класс Point. ΠŸΡ€ΠΈ создании экзСмпляра массива с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new Π½Π΅ создаСтся Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Point, создаСтся лишь ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массива. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null. Π’ этом ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π½Π° простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:


Point p[]=new Point[5];

for (int i=0; i<p.length; i++) {

System.out.println(p[i]);

}


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ лишь слова null.

Π”Π°Π»Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты массива ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ†ΠΈΠΊΠ»Π΅. Π’ΠΎΠΎΠ±Ρ‰Π΅, созданиС массива Π΄Π»ΠΈΠ½ΠΎΠΉ n ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π·Π°Π²Π΅Π΄Π΅Π½ΠΈΠ΅ n ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с элСмСнтами массива (Π² послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ p[i] ) ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сущСствуСт ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ создания массивов – ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹. Π’ этом случаС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово new Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π° ставятся Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, ΠΈ Π² Π½ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ значСния всСх элСмСнтов массива. НапримСр, для числового массива явная инициализация записываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


int i[]= {1, 3, 5};

int j[]= {};

// эквивалСнтно new int[0]


Π”Π»ΠΈΠ½Π° массива вычисляСтся автоматичСски, исходя ΠΈΠ· количСства Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π”Π°Π»Π΅Π΅ создаСтся массив Ρ‚Π°ΠΊΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π΅Π³ΠΎ элСмСнту присваиваСтся ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Аналогично ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ массивы Π½Π° основС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


Point p=new Point(1,3);

Point arr[]= {

p, new Point(2,2), null, p

};

// ΠΈΠ»ΠΈ String sarr[]= {

"aaa", "bbb", "cde"+"xyz"

};

Однако ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ создания экзСмпляров массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ конструктора.

НапримСр:


public class Parent {

private String[] values;

protected Parent(String[] s) {

values=s;

}

}

public class Child extends Parent {

public Child(String firstName,

String lastName) {

super(???);

// трСбуСтся Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ созданиС массива

}

}


Π’ конструкторС класса Child Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ конструктору родитСля ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ссылку Π½Π° массив. ВСорСтичСски ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ null, Π½ΠΎ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΊ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ классов. МоТно Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ new String[2], Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° вмСсто Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ firstName ΠΈ lastName Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ пустыС строки. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ {

firstName, lastName

}

ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС компиляции, Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ выглядит Ρ‚Π°ΠΊ:


new String[] {

firstName, lastName

}


Π§Ρ‚ΠΎ являСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ смСсью выраТСния, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ массивы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new, ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Π”Π»ΠΈΠ½Π° массива опрСдСляСтся количСством ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов. Π’Π°ΠΊ, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅

int i[][]=new int[3][5];

пСрСмСнная i ссылаСтся Π½Π° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ 3Ρ…5. Π‘ΡƒΠΌΠΌΠ°Ρ€Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ массивС содСрТится 15 элСмСнтов, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ индСксов ΠΎΡ‚ (0, 0) Π΄ΠΎ (2, 4). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ заполнСния Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ»:


int pithagor_table[][]=new int[5][5];

for (int i=0; i<5; i++) {

for (int j=0; j<5; j++) {

pithagor_table[i][j]=i*j;

System.out.print(pithagor_table[i][j] + "\t");

}

System.out.println();

}


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚:


0 0 0 0 0

0 1 2 3 4

0 2 4 6 8

0 3 6 9 12

0 4 8 12 16


Однако Ρ‚Π°ΠΊΠΎΠΉ взгляд Π½Π° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы являСтся Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Java Π½Π΅Ρ‚ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ…, ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов, Π° Π΅ΡΡ‚ΡŒ массивы, Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ массивы. НапримСр, Ρ‚ΠΈΠΏ int[] ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "массив чисСл", Π° int[][] ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "массив массивов чисСл". Поясним Ρ‚Π°ΠΊΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ зрСния.

Если ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ x, которая Π½Π° Π½Π΅Π³ΠΎ ссылаСтся, Ρ‚ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ x ΠΈ Π΄Π²Π° числа Π² ΠΏΠ°Ρ€Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, x[0][0] ), ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ элСмСнту Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. Но Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ x ΠΈ ΠΎΠ΄Π½ΠΎ число Π² ΠΏΠ°Ρ€Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ массиву, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся элСмСнтом Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΌ массивом с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° пСрСстанСт Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ – ΠΎΠ½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Π’ частности, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null.


int x[][]=new int[3][5];

// ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°

x[0]=new int[7];

x[1]=new int[0];

x[2]=null;


ПослС Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ массив, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся пСрСмСнная x, Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ Π½ΠΈΠΊΠ°ΠΊ нСльзя. Π—Π°Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ это просто Π½Π°Π±ΠΎΡ€ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ null.

ПолСзно ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, сколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² пороТдаСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ new int[3][5]. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ подсчСт Ρ‚Π°ΠΊΠΎΠ²: создаСтся ΠΎΠ΄ΠΈΠ½ массив массивов (ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚) ΠΈ Ρ‚Ρ€ΠΈ массива чисСл, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ 5 (Ρ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). Π˜Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π’ рассмотрСнном ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Ρ€ΠΈ ΠΈΠ· Π½ΠΈΡ… (массивы чисСл) Π±Ρ‹Π»ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹ΠΌΠΈ значСниями. Для Ρ‚Π°ΠΊΠΈΡ… случаСв ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ выраТСния создания массивов:


int x[][]=new int[3][];


Вакая запись ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ – массив массивов – ΠΈ заполняСт Π΅Π³ΠΎ значСниями null. Π’Π΅ΠΏΠ΅Ρ€ΡŒ понятно, Ρ‡Ρ‚ΠΎ ΠΈ Π² этом, ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ x.length Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3 – Π΄Π»ΠΈΠ½Ρƒ массива массивов. Π”Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ x[i].length ΡƒΠ·Π½Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ массива чисСл, ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ i Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ мСньшС x.length, Π° Ρ‚Π°ΠΊΠΆΠ΅ x[i] Π½Π΅ Ρ€Π°Π²Π½ΠΎ null. Π˜Π½Π°Ρ‡Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ошибки Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ΠΎΠΎΠ±Ρ‰Π΅, ΠΏΡ€ΠΈ создании ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΏΠ°Ρ€Ρ‹ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок, соотвСтствСнно количСству ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Но Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ лишь крайняя лСвая ΠΏΠ°Ρ€Π°, это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ задаст Π΄Π»ΠΈΠ½Ρƒ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ массива массивов. Если Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ, Ρ‚ΠΎ этот массив заполнится Π½Π΅ значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ null, Π° Π½ΠΎΠ²Ρ‹ΠΌΠΈ созданными массивами с мСньшСй Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ. Если Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° вторая ΠΏΠ°Ρ€Π° скобок, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Аналогично, для создания ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹. Π’ этом случаС примСняСтся ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, сколько трСбуСтся:


int i[][] = {{1,2}, null, {3}, {}};


Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ пороТдаСтся Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, массив массивов Π΄Π»ΠΈΠ½ΠΎΠΉ 4, Π° Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Ρ‚Ρ€ΠΈ массива чисСл с Π΄Π»ΠΈΠ½Π°ΠΌΠΈ 2, 1, 0, соотвСтствСнно.

ВсС рассмотрСнныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ утвСрТдСния ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π²Π΅Ρ€Π½Ρ‹ для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов, основанных ΠΊΠ°ΠΊ Π½Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Π½Π° ссылочных Ρ‚ΠΈΠΏΠ°Ρ….

Класс массива

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массив являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС, ΠΊΠ°ΠΊ выглядСло Π±Ρ‹ объявлСниС класса Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. На самом Π΄Π΅Π»Π΅ эти объявлСния Π½Π΅ хранятся Π² Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΈΠ»ΠΈ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΎΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Учитывая, Ρ‡Ρ‚ΠΎ массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСн Π½Π° основС любого Ρ‚ΠΈΠΏΠ° ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ, это физичСски Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎ, Π΄Π° ΠΈ Π½Π΅ трСбуСтся. ВмСсто этого Π²ΠΎ врСмя выполнСния прилоТСния Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ эти объявлСния динамичСски Π½Π° основС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ размСрности, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½ΠΈ хранятся Π² памяти Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ экзСмпляров класса Class, ΠΊΠ°ΠΊ ΠΈ для Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².

Рассмотрим гипотСтичСскоС объявлСниС класса для массива, основанного Π½Π° Π½Π΅ΠΊΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ Element.

ОбъявлСниС класса начинаСтся с пСрСчислСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡΠΎΠ±ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа. Класс массива Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа, ΠΊΠ°ΠΊ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли Element объявлСн ΠΊΠ°ΠΊ public -класс, Ρ‚ΠΎ ΠΈ массив Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа public. Для любого ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° класс массива Π±ΡƒΠ΄Π΅Ρ‚ public. МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ final, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ класс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ класса массива.

Π—Π°Ρ‚Π΅ΠΌ слСдуСт имя класса, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π½Π΅ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Ρ‚.ΠΊ. ΠΊ Ρ‚ΠΈΠΏΡƒ массив ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ‚ Π½Π΅ ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ Π½Π°Π±ΠΎΡ€Ρƒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок.

Π—Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс. ВсС массивы Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΡ‚ класса Object. Π”Π°Π»Π΅Π΅ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ интСрфСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ класс. Для массива это Π±ΡƒΠ΄ΡƒΡ‚ интСрфСйсы Cloneable ΠΈ Serializable. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассматриваСтся Π² ΠΊΠΎΠ½Ρ†Π΅ этой Π»Π΅ΠΊΡ†ΠΈΠΈ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ описан Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… лСкциях.

Π’Π΅Π»ΠΎ класса содСрТит объявлСниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ public final поля length Ρ‚ΠΈΠΏΠ° int. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ clone() для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ интСрфСйса Cloneable.

Π‘Π²Π΅Π΄Π΅ΠΌ всС Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ запись класса:


[public] class A implements Cloneable,

java.io.Serializable {

public final int length;

// инициализируСтся ΠΏΡ€ΠΈ создании

public Object clone() {

try {

return super.clone();

}

catch (CloneNotSupportedException e) {

throw new InternalError(e.getMessage());

}

}

}


Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, экзСмпляр Ρ‚ΠΈΠΏΠ° массив являСтся ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² частности, наслСдуСт всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² классС Object, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, toString(), hashCode() ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅.

НапримСр:


// Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° toString()

System.out.println(new int[3]);

System.out.println(new int[3][5]);

System.out.println(new String[2]);

// Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° hashCode()