1. ВсС классы унаслСдованы ΠΎΡ‚ Object

ВсС классы Π² Java нСявно (скрытно) унаслСдованы ΠΎΡ‚ класса Object.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ наслСдованиС ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Java, ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π² квСстС Java Core. БСйчас ΠΆΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ простой Ρ„Π°ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ· этого слСдуСт:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Object ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого класса. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Код ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Object o = new Scanner(System.in);
Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ o сохранСна ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Scanner
Object o = new String();
Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ o сохранСна ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° String
Object o = new Integer(15);
Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ o сохранСна ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Integer
Object o = "ΠŸΡ€ΠΈΠ²Π΅Ρ‚";
Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ o сохранСна ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° String

На этом Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ слСдит Π·Π° Ρ‚Π΅ΠΌ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΈΠΏΠ° Π±Ρ‹Π» сохранСн Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Object, поэтому Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Ρƒ сохранСнного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Object нСльзя.

Если Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ сначала ссылку Π½Π° Π½Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρƒ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

Код ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Object o = new Scanner(System.in);
int x = o.nextInt();
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ скомпилируСтся. Π£ класса Object Π½Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° nextInt().
Object o = new Scanner(System.in);

Scanner console = (Scanner) o;

int x = console.nextInt();
Π’Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π’ΡƒΡ‚ ΠΌΡ‹ сохраняСм ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Scanner Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Scanner с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° привСдСния Ρ‚ΠΈΠΏΠ°.

ΠŸΡ€ΠΎΡΡ‚ΠΎ Ρ‚Π°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Object нСльзя ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Scanner, Π΄Π°ΠΆΠ΅ Ссли пСрСмСнная Ρ‚ΠΈΠΏΠ° Object Ρ…Ρ€Π°Π½ΠΈΡ‚ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Scanner. Π—Π°Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ извСстный Π²Π°ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠ°. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ выглядит это Ρ‚Π°ΠΊ:

Вип имя1 = (Вип) имя2;

Π“Π΄Π΅ имя1 β€“ это имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Π’ΠΈΠΏ, Π° имя2 β€“ это имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Object, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Π’ΠΈΠΏ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°

Если Ρ‚ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка ClassCastException. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Код ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Object o = new Integer(5);
String s = (String) o;
Π’ΠΎ врСмя выполнСния Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка:
Ρ‚ΡƒΡ‚ кинСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ClassCastException

Π’ Java Π΅ΡΡ‚ΡŒ способ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ: сущСствуСт способ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Π½Π° самом Π΄Π΅Π»Π΅ Ρ‚ΠΈΠΏ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

имя instanceof Вип

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ instanceof провСряСт, являСтся Π»ΠΈ пСрСмСнная имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° Π’ΠΈΠΏ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ строки срСди массива Π΄Π°Π½Π½Ρ‹Ρ…:

Код ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Object[] objects = {10, "ΠŸΡ€ΠΈΠ²Π΅Ρ‚", 3.14};

for (int i = 0; i < objects.length; i++)
{
   if (objects[i] instanceof String)
   {
      String s = (String) objects[i];
      System.out.println(s);
   }
}
Autoboxing ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ эти значСния Π² Integer, String ΠΈ Double.

Π¦ΠΈΠΊΠ» ΠΏΠΎ массиву ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ String

БохраняСм Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° String
Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½Π° экран.

12
Π—Π°Π΄Π°Ρ‡Π°
ΠœΠΎΠ΄ΡƒΠ»ΡŒ 1. Java Syntax,  21 ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ1 лСкция
НСдоступна
Π›ΠΎΠ½Π³ Π΄Ρ€ΠΈΠ½ΠΊ
ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° заканчиваСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ. Но ΠΈΠ· тСкста ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² консоли нСясно, Π³Π΄Π΅ ΠΎΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ. Π’ этой Π·Π°Π΄Π°Ρ‡Π΅ Ρ‚Π΅Π±Π΅ Π½ΡƒΠΆΠ½ΠΎ: - ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² try-catch ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² addIce, addVodka, addJuice ΠΈ addOrange; - Π² Π±Π»ΠΎΠΊΠ°Ρ… catch Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ printBugMethodName ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ stack trace. Если сд

2. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° возникновСния шаблонов (ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ)

ВозвращаСмся ΠΊ коллСкциям.

Когда Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создавали класс ArrayList, ΠΎΠ½ΠΈ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ любого Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для хранСния элСмСнтов ΠΎΠ½ΠΈ воспользовались массивом Ρ‚ΠΈΠΏΠ° Object.

Бильная сторона Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого Ρ‚ΠΈΠΏΠ°.

Ну Π° слабых сразу нСсколько.

НСдостаток 1.

ВсСгда ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ прСобразования Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΠ³Π΄Π° доставали элСмСнты ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ:

Код ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
ArrayList numbers = new ArrayList();


for (int i = 0; i < 10; i++)
   numbers.add(i * 10);


int sum = 0;
for (int i = 0; i < 10; i++)
{
   sum = sum + (Integer) numbers.get(i);
}
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ для хранСния ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Object

ЗаполняСм ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Ρ†ΠΈΡ„Ρ€Π°ΠΌΠΈ 10, 20, ... 100;



Π‘ΡƒΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ элСмСнты ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ


НуТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°

НСдостаток 2.

НС Π±Ρ‹Π»ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ хранятся элСмСнты ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°

Код ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
ArrayList numbers = new ArrayList();


for (int i = 0; i < 10; i++)
   numbers.add(i * 2.5);


int sum = 0;
for (int i = 0; i < 10; i++)
{
   sum = sum + (Integer) numbers.get(i);
}
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ для хранСния ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Object

ЗаполняСм ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ числами Ρ‚ΠΈΠΏΠ° Double:
0.0, 2.5, 5.0, ...


Π‘ΡƒΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ элСмСнты ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ


Π‘ΡƒΠ΄Π΅Ρ‚ ошибка: Ρ‚ΠΈΠΏ Double нСльзя привСсти ΠΊ Ρ‚ΠΈΠΏΡƒ Integer

Π”Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ:

  • Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅
  • Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅
  • Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°
  • ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΠΎ сСти

НСдостаток 3.

Π”Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ случайно ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎ нСзнанию.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ вашими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π° этот ΠΌΠ΅Ρ‚ΠΎΠ΄, написанный совсСм Π΄Ρ€ΡƒΠ³ΠΈΠΌ программистом, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π² Π²Π°ΡˆΡƒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ свои Π΄Π°Π½Π½Ρ‹Π΅.

По названию ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ нСпонятно, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π² Π½Π΅ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. А Π΄Π°ΠΆΠ΅ Ссли ΠΈ Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ссылку Π½Π° Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² дСсяток ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΈ ΡƒΠΆ Ρ‚Π°ΠΌ-Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠ± ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ извСстно.


3. Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π² Java

ВсС эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ устраняСт такая классная Π²Π΅Ρ‰ΡŒ Π² Java ΠΊΠ°ΠΊ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ (Generics).

Под Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ Π² Java ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊ Ρ‚ΠΈΠΏΠ°ΠΌ Ρ‚ΠΈΠΏΡ‹-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ слоТныС составныС Ρ‚ΠΈΠΏΡ‹. Π’Π°ΠΊΠΎΠΉ составной Ρ‚ΠΈΠΏ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС выглядит Ρ‚Π°ΠΊ:

ОсновнойВип<Π’ΠΈΠΏΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€>

ВсС вмСстС β€” это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΈΠΏ. И ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹.

Код ОписаниС
ArrayList<Integer> list;
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
list = new ArrayList<Integer> ();
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
ArrayList<Integer>[] array;
БозданиС массивов

Π’ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° Integer:

Код ОписаниС
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(1));
list.add(2);
list.add("ΠŸΡ€ΠΈΠ²Π΅Ρ‚");
ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Ρ‚ΠΈΠΏΠ° ArrayList с элСмСнтами Ρ‚ΠΈΠΏΠ° Integer
Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ
И Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ: сработаСт
autoboxing

А Ρ‚Π°ΠΊ нСльзя: ошибка компиляции

Как ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои классы с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ Π² квСстС Java Collections. БСйчас ΠΆΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, ΠΊΠ°ΠΊ этим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.


4. Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Generics

На самом Π΄Π΅Π»Π΅ Generics Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π΄ΠΎ уТаса ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ просто замСняСт Ρ‚ΠΈΠΏ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π½Π° Π½Π΅Π³ΠΎ ΠΆΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. А ΠΏΡ€ΠΈ взаимодСйствии с Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ добавляСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ привСдСния Ρ‚ΠΈΠΏΠ° ΠΊ Ρ‚ΠΈΠΏΡƒ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ:

Код Π§Ρ‚ΠΎ сдСлаСт компилятор
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList list = new ArrayList();
list.add(1);
list.add( (Integer) 1 );
int x = list.get(0);
int x = (Integer) list.get(0);
list.set(0, 10);
list.set(0, (Integer) 10);

Допустим, Ρƒ нас Π±Ρ‹Π» ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ суммируСт числа Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ†Π΅Π»Ρ‹Ρ… чисСл:

Код Π§Ρ‚ΠΎ сдСлаСт компилятор
public int sum(ArrayList<Integer> numbers)
{
   int result = 0;

   for (int i = 0; i < numbers.size(); i++)
      result = result + numbers.get(i);

   return result;
}
public int sum(ArrayList numbers)
{
   int result = 0;

   for (int i = 0; i < numbers.size(); i++)
      result = result + (Integer) numbers.get(i);

   return result;
}

Π’.Π΅. ΠΏΠΎ сути Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ β€” это такая Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ синтаксичСского сахара, ΠΊΠ°ΠΊ ΠΈ autoboxing, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ побольшС. ΠŸΡ€ΠΈ autoboxing компилятор Π·Π° нас добавляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для прСобразования Ρ‚ΠΈΠΏΠ° int ΠΊ Integer ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π° для generics добавляСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ привСдСния Ρ‚ΠΈΠΏΠ°.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ компилятор скомпилировал ваш ΠΊΠΎΠ΄ с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ, Π² Π½Π΅ΠΌ всС классы с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ просто Π² классы ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ привСдСния Ρ‚ΠΈΠΏΠ°. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»ΠΈ Ρ‚ΠΈΠΏΡ‹-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… слоТных Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠΎΡ‚Π΅Ρ€ΡΠ»Π°ΡΡŒ. Π­Ρ‚ΠΎΡ‚ эффСкт Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ стираниСм Ρ‚ΠΈΠΏΠΎΠ².

Иногда программистам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΈΡˆΡƒΡ‚ свои классы с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Как с этим Π±ΠΎΡ€ΡŽΡ‚ΡΡ ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ Π² квСстС Java Collections.


12
Π—Π°Π΄Π°Ρ‡Π°
ΠœΠΎΠ΄ΡƒΠ»ΡŒ 1. Java Syntax,  21 ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ1 лСкция
НСдоступна
Π“ΠΎΡ‚ΠΎΠ²ΠΈΠΌ ΠΊΠΎΠΊΡ‚Π΅ΠΉΠ»ΠΈ
ΠœΠ΅Ρ‚ΠΎΠ΄ printStackTrace ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° массив stackTrace. НуТно вывСсти ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ элСмСнтС массива Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: "ΠœΠ΅Ρ‚ΠΎΠ΄ <имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°> Π²Ρ‹Π·Π²Π°Π½ ΠΈΠ· строки <Π½ΠΎΠΌΠ΅Ρ€ строки> класса <имя класса> Π² Ρ„Π°ΠΉΠ»Π΅ <имя Ρ„Π°ΠΉΠ»Π°>." Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ элСмСнтС Π²Ρ‹Π²ΠΎΠ΄ΠΈ с Π½ΠΎΠ²ΠΎΠΉ строки.
12
Π—Π°Π΄Π°Ρ‡Π°
ΠœΠΎΠ΄ΡƒΠ»ΡŒ 1. Java Syntax,  21 ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ1 лСкция
НСдоступна
Π‘Ρ‚Π΅ΠΊ Π² Π΄ΠΎΠΌΠ°ΡˆΠ½ΠΈΡ… условиях
Π’ классС MyStack Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠΉ свой стСк Π½Π° Π±Π°Π·Π΅ списка.

5. НСсколько Ρ„Π°ΠΊΡ‚ΠΎΠ² ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ…

Π•Ρ‰Π΅ нСсколько интСрСсных Ρ„Π°ΠΊΡ‚ΠΎΠ² ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ….

Π£ классов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π° нСсколько. Выглядит это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

ОсновнойВип<Π’ΠΈΠΏΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€1, Π’ΠΈΠΏΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€2, Π’ΠΈΠΏΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€3>

БобствСнно говоря, Π² этом Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ. Π’Π°ΠΌ, Π³Π΄Π΅ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ привСдСния ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈ нСсколько Ρ‚Π°ΠΊΠΈΡ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

Код ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(7, "ΠŸΡ€ΠΈΠ²Π΅Ρ‚");
map.put(-15, "ΠŸΡ€ΠΈΠ²Π΅Ρ‚");
ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° put ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Integer, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Ρ‚ΠΈΠΏ String

Π’Π°ΠΊΠΆΠ΅ слоТныС Ρ‚ΠΈΠΏΡ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Выглядит это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

ОсновнойВип<Π’ΠΈΠΏΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€<Π’ΠΈΠΏΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°>>

Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ списки строк. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

// список привСтствий
ArrayList<String> listHello = new ArrayList<String>();
listHello.add("ΠŸΡ€ΠΈΠ²Π΅Ρ‚");
listHello.add("Hi");

// список ΠΏΡ€ΠΎΡ‰Π°Π½ΠΈΠΉ
ArrayList<String> listBye = new ArrayList<String>();
listBye.add("Пока");
listBye.add("Good Bye");

// список списков
ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>();
lists.add(listHello);
lists.add(listBye);