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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Ѐилософия Java3Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 32

Автор Π‘Ρ€ΡŽΡ ЭккСль

β€’ Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ конструкторы. Как Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΈΠ· Π³Π»Π°Π²Ρ‹ 7, Π½Π° этом этапС выполняСтся довольно большая Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, особСнно ΠΏΡ€ΠΈ использовании наслСдования.

Явная инициализация статичСских Ρ‡Π»Π΅Π½ΠΎΠ²

Π―Π·Ρ‹ΠΊ Java позволяСт ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько дСйствий ΠΏΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² static Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ конструкции, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ статичСским Π±Π»ΠΎΠΊΠΎΠΌ. Выглядит это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

// initialization/Spoon.java public class Spoon { static int i, static {

i = 47,

}

} ///:-

ΠŸΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ лишь ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ инициализация static, выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·: ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° этого класса ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ статичСским Ρ‡Π»Π΅Π½Π°ΠΌ этого класса (Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ создаСтся). НапримСр:

II- initialization/ExplicitStatic java

II Явная инициализация с использованиСм конструкции "static"

import static net.mindview util.Print *;

class Cup {

CupCint marker) {

print("Cup(" + marker + ")"),

}

void f(int marker) {

printC'fC + marker + ")"),

}

}

class Cups {

static Cup cupl, static Cup cup2; static {

cupl = new Cup(l); cup2 = new Cup(2);

}

Cups О {

printCCupsO");

}

}

public class ExplicitStatic {

public static void main(String[] args) { printCInside mainO"); Cups.cupl.f(99); II (1)

}

II static Cups cupsl = new CupsO; II (2) II static Cups cups2 = new CupsO, II (2)

} /* Output: Inside mainO Cup(l) Cup(2) f (99) *///:-

БтатичСский ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ класса Cups выполняСтся Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ статичСскому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ cl Π² строкС с ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΎΠΉ (1), Π»ΠΈΠ±ΠΎ Ссли строка (1) Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° β€” Π² строках (2) послС снятия ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². Если ΠΆΠ΅ ΠΈ строка (1), ΠΈ строки (2) Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, static-инициализация класса Cups Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ выполнится. Π’Π°ΠΊΠΆΠ΅ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈ исполнСны ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ ΠΎΠ±Π΅ строки (2) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” static-инициализация всС Ρ€Π°Π²Π½ΠΎ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ нСстатичСских Π΄Π°Π½Π½Ρ‹Ρ… экзСмпляра

Π’ Java имССтся сходный синтаксис для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ нСстатичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: .

// initialization/Mugs java // "Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ экзСмпляра" Π² Java import static net mindview util.Print *.

class Mug {

Mug(int marker) {

print("Mug(" + marker + ")");

}

void f(int marker) {

print("f(" + marker + ")");

}

}

public class Mugs { Mug mugl.

Mug mug2, {

mugl = new Mug(l); mug2 = new Mug(2).

print("mugl & mug2 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹");

}

Mugs О {

print("Mugs()");

}

Mugs(int i) {

print("Mugs(int)"),

}

public static void main(String[] args) { printC'B ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ mainO"); new Mugs О,

print("new Mugs О Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ"), new Mugs(l),

print("new Mugs(l) Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ");

}

} /* Output. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ mainO Mug(l)

Mug(2) ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &

mugl & mug2 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Mugs О

new Mugs О Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ

Mug(1)

Mug(2)

mugl & mug2 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Mugs(int)

new Mugs(l) Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ *///:-

БСкция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ экзСмпляра

{

mugl = new Mug(l);

mug2 = new Mug(2);

print("mugl & mug2 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹");

}

выглядит Π² точности Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ конструкция static-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static отсутствуСт. Π’Π°ΠΊΠΎΠΉ синтаксис Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов (см. Π³Π»Π°Π²Ρƒ 9), Π½ΠΎ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ конструктор Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Из Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ сСкция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ экзСмпляра выполняСтся Ρ€Π°Π½ΡŒΡˆΠ΅ Π»ΡŽΠ±Ρ‹Ρ… конструкторов.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массивов

Массив прСдставляСт собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², относящихся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅ΠΌΡƒΡŽ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° индСксирования [ ]. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив, Π²Ρ‹ просто. ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ вслСд Π·Π° Ρ‚ΠΈΠΏΠΎΠΌ пустыС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки:

int[] al;

ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ послС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, эффСкт Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅:

int al[];

Π­Ρ‚ΠΎ соотвСтствуСт оТиданиям программистов Π½Π° Π‘ ΠΈ Π‘++, ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΡˆΠΈΡ… ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ синтаксису. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, выглядит Π±ΠΎΠ»Π΅Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ β€” ΠΎΠ½ сразу Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ имССтся Π² Π²ΠΈΠ΄Ρƒ «массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° intΒ». Он ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠ½ΠΈΠ³Π΅.

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

int[] al = { 1, 2. 3, 4. 5 }.

Но Π·Π°Ρ‡Π΅ΠΌ Ρ‚ΠΎΠ³Π΄Π° Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ссылку Π½Π° массив Π±Π΅Π· самого массива?

int[] Π°2,

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π² Java ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ массив Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, записав ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π°2 = al,

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π²Ρ‹ Π½Π° самом Π΄Π΅Π»Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ссылку, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

// initialization/ArraysOfPrimitives.java

// ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².

import static net mindview.util.Print.*;

public class ArraysOfPrimitives {

public static void main(String[] args) { int:: al = { 1. 2, 3. 4, 5 }: int[] a2; a2 = al.

for(int i = 0; i < a2.length, i++)

a2[i] = a2[i] + 1; for(int i = 0; i < al.length; i++)

print("al[" + i +"]=" + al[i]);

}

} /* Output: al[0] = 2 al[l] = 3 al[2] = 4 al[3] = 5 al[4] = 6 *///:-

Массив al инициализируСтся Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ массив Π°2 β€” Π½Π΅Ρ‚; присваиваниС ΠΏΠΎ ссылкС Π°2 присваиваСтся ΠΏΠΎΠ·ΠΆΠ΅ β€” Π² Π΄Π°Π½Π½ΠΎΠΌ случаС присваиваСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ массив.

ВсС массивы (ΠΊΠ°ΠΊ массивы ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ массивы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²) содСрТат ΠΏΠΎΠ»Π΅> ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ (Π½ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ!) для получСния количСства элСмСнтов Π² массивС. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ называСтся length. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² массивах Java, Π‘ ΠΈ Π‘++ .нумСрация элСмСнтов начинаСтся с нуля, послСднСму элСмСнту массива соотвСтстйуСт индСкс lengthβ€”1. ΠŸΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива Π‘ ΠΈ Π‘++ Π½Π΅ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Β«ΠΏΡ€ΠΎΠ³ΡƒΠ»ΠΊΠ°ΠΌ Π² памяти» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎ часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ послСдствиям. Но Java Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ вас ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π° Ρ€Π°ΠΌΠΊΠΈ массива происходит ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния (ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚Π΅ΠΌΠ° Π³Π»Π°Π²Ρ‹ 10)1.

А Ссли Π²ΠΎ врСмя написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, сколько элСмСнтов Π²Π°ΠΌ понадобится Π² Π½ΠΎΠ²ΠΎΠΌ массивС? Π’ΠΎΠ³Π΄Π° просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ new для создания Π΅Π³ΠΎ элСмСнтов. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ new Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, хотя Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ создаСтся массив ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ для создания ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Π²Π½Π΅ массива):

//: initialization/ArrayNew.java // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массивов ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new. import java util.*;

import static net.mindview util.Print *;

public class ArrayNew {

public static void main(String[] args) { int[] a.

Random rand = new Random(47); a = new int[rand.nextlnt(20)]; print("Π”Π»ΠΈΠ½Π° a = " + a length), print(Arrays.toString(a));

}

} /* Output-Π”Π»ΠΈΠ½Π° a = 18

[0, 0. 0, 0. 0, 0, 0, 0, 0, 0. 0, 0. 0. 0. 0, 0. 0. 0] *///-

Π Π°Π·ΠΌΠ΅Ρ€ массива выбираСтся случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Random.nextlnt(), Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ число ΠΎΡ‚ нуля Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° значСния. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива случаСн, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ созданиС массива происходит Π²ΠΎ врСмя исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ позволяСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ элСмСнты массивов ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² автоматичСски ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ «пустыми» значСниями. (Для чисСл ΠΈ символов это ноль, Π° для логичСского Ρ‚ΠΈΠΏΠ° boolean β€” false.)

ΠœΠ΅Ρ‚ΠΎΠ΄ Arrays.toString(), входящий Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ java.util, Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ массив ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС:

int[] Π° = new int[rand.nextlnt(20)],

Если Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ записи. ΠŸΡ€ΠΈ создании массива Π½Π΅ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Ρ‹ фактичСски создаСтС массив ссылок. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возьмСм класс-ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ Integer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΈΠΌΠ΅Π½Π½ΠΎ классом, Π° Π½Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠΌ:

//: initialization/ArrayClassObj java // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива Π½Π΅ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² import java.util.*;

import static net.mindview util.Print.*,

public class ArrayClassObj {

' public static void main(String[] args) { Random rand = new Random(47); Integer[] a = new Integer[rand.nextlnt(20)]; print("Π΄Π»ΠΈΠ½Π° a = " + a.length); for(int i = 0; i < a.length; i++)

a[i] = rand.nextlnt(500); // АвтоматичСская ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°

print(Arrays.toString(a)),

}

} /* Output (ΠΏΡ€ΠΈΠΌΠ΅Ρ€) Π΄Π»ΠΈΠ½Π° Π° = 18

[55. 193. 361. 461. 429. 368, 200. 22. 207, 288. 128. 51. 89. 309. 278. 498, 361. 20] *///-

Π—Π΄Π΅ΡΡŒ Π΄Π°ΠΆΠ΅ послС Π²Ρ‹Π·ΠΎΠ²Π° new для создания массива

Integer[] Π° = new Integer[rand nextlnt(20)];

ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ лишь массив ΠΈΠ· ссылок β€” Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° каТдая ссылка Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½ΠΎΠ²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Integer (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это дСлаСтся посрСдством Π°Π²Ρ‚ΠΎΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ):

a[i] = rand.nextlnt(500);

Если Π²Ρ‹ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ чтСния Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта массива.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ списком Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках. БущСствуСт Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ синтаксиса:

//β€’ i niti ali zati on/ArrayInit java // Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массивов import java.util *;

public class Arraylnit {

public static void main(String[] args) { Integer[] a = {

new Integer(l), new Integer(2), 3, // Autoboxing

}:

Integer[] b = new Integer[]{ new Integer(1), new Integer(2), 3. // АвтоматичСская ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°

}:

System. out. pri ntl n (Arrays. toStri ng (a)); System.out println(Arrays.toString(b));

}

} /* Output-[1. 2. 3] [1. 2. 3] *///:-

Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π°Ρ запятая Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π° (ΠΎΠ½Π° всСго лишь ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… списков).

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½Π°, Π½ΠΎ ΠΎΠ½Π° Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ опрСдСлСния массива. Вторая Ρ„ΠΎΡ€ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π΅Π·Π΄Π΅, Π΄Π°ΠΆΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.