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

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

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

Π‘Π»ΠΎΠ²ΠΎ super позволяСт Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ свойства Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² конструкторах.

Π—Π°Ρ‚Π΅ΠΌ Π±Ρ‹Π»ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ понятиС абстрактного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ класса. Абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π»Π°, ΠΎΠ½ лишь ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Ρ‚Π°ΠΊΠΎΠΉ сигнатурой Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² классС-наслСдникС. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, классы с абстрактными ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ abstract, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ Π½ΠΈΡ… нСльзя ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Основная Ρ†Π΅Π»ΡŒ абстрактных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² – ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС ΠΎΠ±Ρ‰ΠΈΡ… свойств наслСдников, ΠΏΡƒΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΈ Π² Π²ΠΈΠ΄Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅ понятиС – особый Ρ‚ΠΈΠΏ Π² Java, интСрфСйс. Π•Π³ΠΎ Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ абстрактным классом, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ абстрактныС, Π° поля final static. БоотвСтствСнно, Π½Π° основС интСрфСйсов Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ мноТСствСнному наслСдованию. ΠšΠ»Π°ΡΡΡ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ родитСля, Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ интСрфСйсов. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, интСрфСйсы ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ свойства классов, Π½Π΅ находящихся Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ Π΄Π΅Ρ€Π΅Π²Π° наслСдования.

НаконСц, Π²Π°ΠΆΠ½Ρ‹ΠΌ свойством ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ являСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Π‘Ρ‹Π»ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠ°ΠΊ статичСских, Ρ‚Π°ΠΊ ΠΈ динамичСских, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ. Π§Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ вопросу соотвСтствия Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π΅Π΅ значСния.


9. ЛСкция: ΠœΠ°ΡΡΠΈΠ²Ρ‹

ЛСкция посвящСна описанию массивов Π² Java. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΈΠ·Π΄Π°Π²Π½Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² языках программирования, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡ приходится ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΌ рядом ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² Java – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ссылочных Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ особСнности ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, создании ΠΈ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ со своими значСниями. НаибольшиС различия ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы Π² Java ΠΌΠΎΠΆΠ½ΠΎ (ΠΈ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ) Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅. Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ классификация Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ рассматриваСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ клонирования Java, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π² любом классС ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ Π½Π΅Π³ΠΎ.


ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π² Java

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, массивы (arrays) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для хранСния Ρ†Π΅Π»ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² массивС называСтся Π΅Π³ΠΎ Π΄Π»ΠΈΠ½ΠΎΠΉ, сами значСния – элСмСнтами массива. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ вовсС, Π² этом случаС массив считаСтся пустым, Π° Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Π° Ρ€Π°Π²Π½ΠΎΠΉ Π½ΡƒΠ»ΡŽ.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½, доступ ΠΊ Π½ΠΈΠΌ осущСствляСтся ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ индСкса. Если массив ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ n, ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΎΡ‚ нуля, Ρ‚ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ значСниями индСкса ΡΠ²Π»ΡΡŽΡ‚ΡΡ числа ΠΎΡ‚ 0 Π΄ΠΎ n-1. ВсС значСния ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ говорится, Ρ‡Ρ‚ΠΎ массив основан Π½Π° этом Π±Π°Π·ΠΎΠ²ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ основаны ΠΊΠ°ΠΊ Π½Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для хранСния числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ 100 ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ), Ρ‚Π°ΠΊ ΠΈ Π½Π° ссылочных (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ описаниС 100 Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ Π² Π³Π°Ρ€Π°ΠΆΠ΅ Π² Π²ΠΈΠ΄Π΅ экзСмпляров класса Car ).

Π‘Ρ€Π°Π·Ρƒ оговоримся, Ρ‡Ρ‚ΠΎ Π² Java массив символов char[] ΠΈ класс String ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Π˜Ρ… значСния ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π³ΠΊΠΎ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½ΠΎ всС ΠΆΠ΅ ΠΎΠ½ΠΈ Π½Π΅ относятся ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ.

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, массивы Π² Java ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ (ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² Java всСго восСмь ΠΈ ΠΈΡ… количСство Π½Π΅ мСняСтся), ΠΈΡ… Ρ‚ΠΈΠΏ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ наслСдуСтся ΠΎΡ‚ класса Object, поэтому всС элСмСнты Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса доступны Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²-массивов.

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ массивом. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ конструируСтся массив массивов, ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.

Π Π°Π±ΠΎΡ‚Π° с Π»ΡŽΠ±Ρ‹ΠΌ массивом Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΡƒΠΆΠ΅ описанныС для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², - объявлСниС, инициализация ΠΈ Ρ‚.Π΄. НачнСм ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊ массивам.

ОбъявлСниС массивов

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° "массив, основанный Π½Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ int ":


int a[];

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, сначала указываСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π—Π°Ρ‚Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° ΠΏΠ°Ρ€Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ являСтся ΠΈΠΌΠ΅Π½Π½ΠΎ массивом. Π’Π°ΠΊΠΆΠ΅ допустима запись:


int[] a;

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°Ρ€ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ массива. Для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов допускаСтся смСшанная запись:


int[] a[];

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ a ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ "Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, основанный Π½Π° int ". Аналогично ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ массивы с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ:


Point p, p1[], p2[][];

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° массив Π΅Ρ‰Π΅ Π½Π΅ создаСт экзСмпляры этого массива. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ хранят ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null (Ссли ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ полями класса; Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ). Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр массива, Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом new, послС Ρ‡Π΅Π³ΠΎ указываСтся Ρ‚ΠΈΠΏ массива ΠΈ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках – Π΄Π»ΠΈΠ½Π° массива.

int a[]=new int[5];

Point[] p = new Point[10];

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

int array[]=new int[5];

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

array[i]=i*i;

}

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

System.out.println(j+" "+j+"="+array[j]);

}


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


00=0

1*1=1

2*2=4

3*3=9

4*4=16


И Π΄Π°Π»Π΅Π΅ появится ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ индСкс прСвысит максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Π½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ индСкс Π·Π° допустимыС ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹, происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚.Π΅. компилятор Π½Π΅ пытаСтся Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ Π΄Π°ΠΆΠ΅ Π² Ρ‚Π°ΠΊΠΈΡ… явных случаях, ΠΊΠ°ΠΊ:


int i[]=new int[5]; i[-2]=0;

// ошибка! индСкс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚

// Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ


Ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° этапС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π₯отя ΠΏΡ€ΠΈ создании массива Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Ρƒ, это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° массива, Π²Π°ΠΆΠ½Π° лишь Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ΄Π½Π° пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° массивы Ρ€Π°Π·Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹:


int i[]=new int[5];

...

i=new int[7];

// пСрСмСнная Ρ‚Π° ΠΆΠ΅, Π΄Π»ΠΈΠ½Π°

// массива другая


Однако для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° массива Π΄Π»ΠΈΠ½Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ создании ΠΈ ΡƒΠΆΠ΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°. Π’ послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для присвоСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ссылки Π½Π° массив большСй Π΄Π»ΠΈΠ½Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для экзСмпляра массива Π΄Π»ΠΈΠ½Π° являСтся постоянной характСристикой, для всСх массивов сущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ length, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр:


Point p[]=new Point[5];

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

p[i]=new Point(i, i);

}


Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса массива всСгда ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнту ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ byte, short ΠΈΠ»ΠΈ char, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти Ρ‚ΠΈΠΏΡ‹ автоматичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ Π΄ΠΎ int. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ long ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС компиляции.

БоотвСтствСнно, ΠΈ ΠΏΠΎΠ»Π΅ length ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int, Π° тСорСтичСская максимально возмоТная Π΄Π»ΠΈΠ½Π° массива равняСтся 231-1, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠΌ большС 2 ΠΌΠ»Ρ€Π΄.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ массива, ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ любой Ρ‚ΠΈΠΏ Java, Π² Ρ‚ΠΎΠΌ числС:


* интСрфСйсы. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС элСмСнты массива ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null ΠΈΠ»ΠΈ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ любого класса, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ этот интСрфСйс;

* абстрактныС классы. Π’ этом случаС элСмСнты массива ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null ΠΈΠ»ΠΈ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ любого нСабстрактного класса-наслСдника.


ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массив являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Π΅Π³ΠΎ значСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΊ Ρ‚ΠΈΠΏΡƒ Object ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС, присвоСны ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Object. НапримСр,


Object o = new int[4];


Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠ½ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для массивов, основанных Π½Π° Ρ‚ΠΈΠΏΠ΅ Object, Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² качСствС элСмСнта ссылку Π½Π° самого сСбя:


Object arr[] = new Object[3];

arr[0]=new Object();

arr[1]=null;

arr[2]=arr;

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ ссылаСтся

// на вСсь массив!


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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ выяснили, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры массива, рассмотрим, ΠΊΠ°ΠΊΠΈΠ΅ значСния ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π΅Π³ΠΎ элСмСнты.

Если ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив Π½Π° основС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ числового Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ послС создания всС элСмСнты массива ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 0. Если массив объявлСн Π½Π° основС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° boolean, Ρ‚ΠΎ ΠΈ Π² этом случаС всС элСмСнты Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ false. Π’Ρ‹ΡˆΠ΅ рассматривался ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ элСмСнтов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for.

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