ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄

Java Bytecode Fundamentals

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно.
Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ с простого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ POJO с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»Π΅ΠΌ ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€ΠΎΠΌ ΠΈ сСттСром для Π½Π΅Π³ΠΎ.

Когда Π²Ρ‹ скомпилируСтС класс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ javac Foo.java, Ρƒ вас появится Ρ„Π°ΠΉΠ» Foo.class, содСрТащий Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π΅Π³ΠΎ содСрТаниС выглядит Π² HEX-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅:

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

КаТдая ΠΏΠ°Ρ€Π° ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… чисСл (Π±Π°ΠΉΡ‚) пСрСводится Π² ΠΎΠΏΠΊΠΎΠ΄Ρ‹ (ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ°). Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ТСстоко ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ это Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ.

Класс ΠΎΡ‡Π΅Π½ΡŒ простой, поэтому Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ сгСнСрированным Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄-вСрсии класса компилятор Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (ΠΊΠ°ΠΊ ΠΈ написано Π² спСцификациях JVM).

Π”Π°Π»Π΅Π΅, изучая Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Π΅ инструкции (Ρƒ нас это aload_0 ΠΈ aload_1), ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅ΡŽΡ‚ прСфиксы Ρ‚ΠΈΠΏΠ° aload_0 ΠΈ istore_2. Π­Ρ‚ΠΎ относится ΠΊ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ инструкция. ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ Β«aΒ» ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠΊΠΎΠ΄ управляСт ссылкой Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Β«iΒ», соотвСтствСнно, управляСт integer.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ это Π·Π° странныС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹. НапримСр, #2:

const #2 = Field #3.#18; // Foo.bar:Ljava/lang/String;

const #3 = class #19; // Foo
const #18 = NameAndType #5:#6;// bar:Ljava/lang/String;

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ (0: aload_0). Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ инструкции Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ° β€” дальшС объясню, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, достаточно Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° модСль выполнСния. JVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ модСль выполнСния Π½Π° основС стСков. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π΅Ρ‚ JVM-стСк, содСрТащий Ρ„Ρ€Π΅ΠΉΠΌΡ‹. НапримСр, Ссли ΠΌΡ‹ запустим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄Π΅Π±Π°Π³Π³Π΅Ρ€Π΅, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Ρ€Π΅ΠΉΠΌΡ‹:
ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° создаСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌ. Π€Ρ€Π΅ΠΉΠΌ состоит ΠΈΠ· стСка ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, массива Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ссылку Π½Π° ΠΏΡƒΠ» констант класса выполняСмого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π Π°Π·ΠΌΠ΅Ρ€ массива Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… опрСдСляСтся Π²ΠΎ врСмя компиляции Π² зависимости ΠΎΡ‚ количСства ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π‘Ρ‚Π΅ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² β€” LIFO-стСк для записи ΠΈ удалСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² стСкС; Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСтся Π²ΠΎ врСмя компиляции. НСкоторыС ΠΎΠΏΠΊΠΎΠ΄Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ значСния Π² стСк, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±Π΅Ρ€ΡƒΡ‚ ΠΈΠ· стСка ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΈΡ… состояниС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π² стСк. Π‘Ρ‚Π΅ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для получСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ (return values).

Π‘Π°ΠΉΡ‚ΠΊΠΎΠ΄ для этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠΊΠΎΠ΄, aload_0, ΠΏΡ€ΠΎΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚ Π² стСк Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с индСксом 0 ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Бсылка this Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для конструкторов ΠΈ instance-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² всСгда ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠΊΠΎΠ΄, getfield, достаСт ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ПослСдняя инструкция, areturn, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π’Π°ΠΊ, Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getBar β€” 2A B4 00 02 B0. 2A относится ΠΊ инструкции aload_0, B0 β€” ΠΊ areturn. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странным, Ρ‡Ρ‚ΠΎ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ инструкции, Π° Π² массивС Π±Π°ΠΉΡ‚ 5 элСмСнтов. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ getfield (B4) нуТдаСтся Π² Π΄Π²ΡƒΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… (00 02), Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 2 ΠΈ 3 Π² массивС, ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ 5 элСмСнтов Π² массивС. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ areturn сдвигаСтся Π½Π° 4 ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.
Π’Π°Π±Π»ΠΈΡ†Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ:

Π—Π΄Π΅ΡΡŒ Π΄Π²Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ локальная пСрСмСнная int b. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄:

LocalVariableTable:
Start Length Slot Name Signature
0 6 0 this LExample;
0 6 1 a I
2 4 2 b I

ΠœΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ константу 1 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ iconst_1 ΠΈ Π»ΠΎΠΆΠΈΡ‚ Π΅Ρ‘ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ 2 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ istore_2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… слот 2 занят ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ b, ΠΊΠ°ΠΊ ΠΈ оТидалось. Π”Π°Π»Π΅Π΅, iload_1 Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² стСк, iload_2 Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ b. iadd Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚ 2 ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΠΈΠ· стСка, добавляСт ΠΈΡ… ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ получаСтся Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² случаС с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для конструкции try-catch-finally.

Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° foo():

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ для всСх сцСнариСв, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try-catch-finally: finallyMethod() вызываСтся Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°(!). Π‘Π»ΠΎΠΊ try скомпилировался Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ try Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΈ ΠΎΠ½ Π±Ρ‹Π» ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½ с finally:
0: aload_0
1: invokespecial #2; //Method tryMethod:()V
4: aload_0
5: invokespecial #3; //Method finallyMethod:()V
Если Π±Π»ΠΎΠΊ выполняСтся, Ρ‚ΠΎ инструкция goto ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° 30-ю ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ с ΠΎΠΏΠΊΠΎΠ΄ΠΎΠΌ return.

Если tryMethod бросит Exception, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ подходящий (Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ) ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Из Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ позиция с ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π²Π½Π° 11:

0 4 11 Class java/lang/Exception

Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° catchMethod() ΠΈ finallyMethod():

11: astore_1
12: aload_0
13: invokespecial #5; //ΠΌΠ΅Ρ‚ΠΎΠ΄ catchMethod:()V
16: aload_0
17: invokespecial #3; //ΠΌΠ΅Ρ‚ΠΎΠ΄ finallyMethod:()V

Если Π² процСссС выполнСния Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ позиция Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° 23:

0 4 23 any
11 16 23 any
23 24 23 any

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ, начиная с 23:

23: astore_2
24: aload_0
25: invokespecial #3; //Method finallyMethod:()V
28: aload_2
29: athrow
30: return

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ finallyMethod() Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π² любом случаС, с aload_2 ΠΈ athrow, Π±Ρ€ΠΎΡΠ°ΡŽΡ‰ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π­Ρ‚ΠΎ всСго лишь нСсколько ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ· области Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° JVM. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΠΎ ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ developerWorks Peter Haggar β€” Java bytecode: Understanding bytecode makes you a better programmer. Π‘Ρ‚Π°Ρ‚ΡŒΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ устарСла, Π½ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°. Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ BCEL содСрТит достойноС описаниС основ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, поэтому я ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Π±Ρ‹ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΌΡΡ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, спСцификация Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ источником ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΎ Π΅Π΅ Π½Π΅Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΊΡ€ΠΎΠΌΠ΅ этого отсутствуСт графичСский ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ.

Π’ Ρ†Π΅Π»ΠΎΠΌ, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½ΠΈΠΈ своих Π·Π½Π°Π½ΠΈΠΉ Π² Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, особСнно для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ присматриваСтся ΠΊ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌ, компиляторам JVM-языков ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Java Core для самых ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ…. Π§Π°ΡΡ‚ΡŒ 1. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΈ пСрвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

ВступлСниС. ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ история ΠΈ особСнности языка

Как-Ρ‚ΠΎ Π΄Π°Π²Π½ΠΎ ΠΌΡ‹ с ΠΌΠΎΠΈΠΌ Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰Π΅ΠΌ ΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΎΠΉ Π•Π³ΠΎΡ€ΠΎΠΌ Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ курс ΠΏΠΎ Java Core. Но ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π½Π΅ ΡΡ€ΠΎΡΠ»ΠΎΡΡŒ ΠΈ это Π΄Π΅Π»ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ Π΄ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ логичСского ΠΊΠΎΠ½Ρ†Π°. И Π²ΠΎΡ‚, спустя врСмя, я Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ Π½Π΅ стоит ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠ±Ρ€Ρƒ ΠΈ ΠΏΠΎ-этому Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ ΡΠ΅Ρ€ΠΈΡŽ статСй ΠΏΡ€ΠΎ Java Core для самых ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ….

Начало Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ языка Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ Π΅Ρ‰Π΅ Π² 1991 Π³ΠΎΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Sun Microsystems, Inc. Π’Π½Π°Ρ‡Π°Π»Π΅ язык Π±Ρ‹Π» Π½Π°Π·Π²Π°Π½ Oak (Π”ΡƒΠ±), Π½ΠΎ Π² 1995 ΠΎΠ½ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ Π² Java. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ заявили ΠΎ создании языка Π² 1995 Π³ΠΎΠ΄Ρƒ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ создания Π±Ρ‹Π»Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² нСзависящСм ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ процСссора языкС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для Π±Ρ‹Ρ‚ΠΎΠ²ΠΎΠΉ элСктротСхники. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Ρ‚Π°ΠΊΠΈΡ… устройствах ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ процСссоры, Ρ‚ΠΎ использованиС популярных Π½Π° Ρ‚ΠΎ врСмя языков Π‘/Π‘++ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π±Ρ‹Π»ΠΎ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ написанныС Π½Π° Π½ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ JDK ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, ΠΈ Π² строкС поиска Google Π²Π²ΠΎΠ΄ΠΈΠΌ β€œdownload JDK” ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ этой ссылкС.

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π‘ΠΊΡ€ΠΎΠ»ΠΈΠΌ Π½ΠΈΠΆΠ΅ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ скачивания JDK. Π’ зависимости ΠΎΡ‚ нашСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» для скачивания.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ установки для ОБ Windows ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько этапов. НС стоит ΠΏΡƒΠ³Π°Ρ‚ΡŒΡΡ, всС ΠΎΡ‡Π΅Π½ΡŒ просто ΠΈ дСлаСтся Π² нСсколько ΠΊΠ»ΠΈΠΊΠΎΠ². Π’ΠΎΡ‚ здСсь ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описан процСсс установки. Π‘Π°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Windows это Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ JAVA_HOME. Π’ этой ΠΆΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠ΅ достаточно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ расписано ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ (Π΅ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ).

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Установка IDE

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎΠ½Π° ΠΆΠ΅ IDE (Integrated development environment). Π§Ρ‚ΠΎ собой прСдставляСт срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ? На самом Π΄Π΅Π»Π΅ ΠΎΠ½Π° выглядит ΠΊΠ°ΠΊ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСкст. Но ΠΏΠΎΠΌΠΈΠΌΠΎ этого, этот тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΡƒΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ синтаксиса языка Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅. ДСлаСтся это для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° Ρ€Π°Π½Π½Π΅ΠΌ этапС ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ допустили ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² своСм ΠΊΠΎΠ΄Π΅.

ΠšΡ€ΠΎΠΌΠ΅ этого, срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ваш ΠΊΠΎΠ΄ Π² случаС ошибки. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ Ρ‚Π°ΠΊ, это Π±Ρ‹Π»ΠΈ описаны основныС возмоТности IDE. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ IDE ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² написании, ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅, автоматичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Для Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈ срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π˜Ρ… довольно Ρ‚Π°ΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ самыми популярными ΠΈΠ· Π½ΠΈΡ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ: IntelliJ IDEA, NetBeans, Eclipse. Для сСбя я Π²Ρ‹Π±ΠΈΡ€Π°ΡŽ IntelliJ IDEA. Она являСтся самой ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Π½Π° ΠΌΠΎΠΉ взгляд, ΠΈ Ρ…ΠΎΡ‚ΡŒ ΠΎΠ½Π° ΠΈ платная, Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π±Π΅ΡΠΏΠ»Π°Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ которая называСтся Community. Π­Ρ‚ΠΎΠΉ вСрсии Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΏΠΎΠ»Π½Π΅ достаточно для изучСния основ Java. Π’ΠΎΠΎΠ±Ρ‰Π΅ΠΌ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² IntelliJ IDEA.

Π˜Ρ‚Π°ΠΊ, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, Π² поисковой строкС Π²Π²ΠΎΠ΄ΠΈΠΌ «Download IntelliJ IDEA Community» ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ этой ссылкС. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ ОБ ΠΈ ΠΊΠ°Ρ‡Π°Π΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ Community.

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π’ установкС IntelliJ IDEA Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π²ΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ. На ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ случай Π½Π° ΡŽΡ‚ΡƒΠ±Π΅ Π΅ΡΡ‚ΡŒ мноТСство Π²ΠΈΠ΄Π΅ΠΎ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’ окошкС Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ²ΡˆΠΈΠΉΡΡ IDE Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ New Project.

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π’ Π½ΠΎΠ²ΠΎΠΌ окошкС Π² Π»Π΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Java.

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ окошкС, справа, Π²ΠΎΠ·Π»Π΅ надписи «Project SDK:» Π΄ΠΎΠ»ΠΆΠ½Π° находится вСрсия Java, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ установили вмСстС с JDK. Если Ρ‚Π°ΠΌ пусто, Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ JDK Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Для этого Π² Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΌ спискС Π½Π°ΠΆΠΌΠΈΡ‚Π΅ «Add JDK. « ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ JDK, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ установлСн.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Next. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ окошкС, Π²Π²Π΅Ρ€Ρ…Ρƒ, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π³Π°Π»ΠΎΡ‡ΠΊΡƒ β€œCreate project from template” ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ β€œCommand Line App”. И снова Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Next.

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π”Π°Π»ΡŒΡˆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π£ мСня это Π±ΡƒΠ΄Π΅Ρ‚ Hello World, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Π΅ΠΉ, ΠΈ Π½Π° английском языкС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. ВсС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΠΌΠ΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, принято ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° английском языкС, ΠΈ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΎΠ³ΠΎ стиля, Ρ‡Ρ‚ΠΎ являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Ρ‚ΠΎΠ½ΠΎΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

ПослС ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

ПослС этого Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ IDE, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ создана ваша пСрвая, ΠΏΠΎΡ‡Ρ‚ΠΈ готовая консольная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

Π­Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ 80-90%, Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ 100% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, работая программистом.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ вашС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, останСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строчку ΠΊΠΎΠ΄Π° System.out.print(«Hello world!»); ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅.

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. image loader. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

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

ΠŸΡ€ΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΏΠΎ порядку:

Π€ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки <> Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° main ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† Ρ‚Π΅Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, вСсь ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ этими скобками. АналогичныС скобки Π΅ΡΡ‚ΡŒ ΠΈ Ρƒ класса Main.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка являСтся // write your code here однострочным ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ.

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

ΠœΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠœΡ‹ просто располагаСм нСсколько строк ΠΌΠ΅ΠΆΠ΄Ρƒ символами /* ΠΈ */

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ стоит Ρ‚ΠΎΡ‡ΠΊΠ° с запятой, Π² языкС Java ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой.

На этом ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ. Автором ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ этого ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° являСтся Π•Π³ΠΎΡ€ ΠΈ всС ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π°ΡΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ слов ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»ΠΈΡΡŒ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ·Π΄Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Java.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Java Code Style: ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡ‚ΡŒ ΠΊΠΎΠ΄ Java

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², скобках, коммСнтариях, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ‚ΠΎΠ½Π°, принятых Π² языкС JavΠ°.

Π’ языкС Java, ΠΊΠ°ΠΊ ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования, Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅, Π½ΠΎ принятыС сообщСством Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² соглашСния ΠΏΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ ΠΊΠΎΠ΄Π°

Java Code Style β€” это Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΈ соглашСния ΠΎ стилС ΠΊΠΎΠ΄Π°, собранныС вмСстС. НапримСр:

РСгламСнтируСтся мноТСство Π²Π΅Ρ‰Π΅ΠΉ, связанных с ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ исходного тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈ приводятся трСбования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ эти стандарты?

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Ρ‚Π°ΠΊΠΈΠΌ соглашСниям, Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ ΠΈ просты:

ИспользованиС общСпринятых соглашСний ΠΏΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΡŽ позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΌ, ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок, связанных с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ стилями написания Ρƒ людСй, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π°Π΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. 17482108122020 99d2e0d5749e970673d750909e91ea53b1c4f8e5. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄-17482108122020 99d2e0d5749e970673d750909e91ea53b1c4f8e5. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ java ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 17482108122020 99d2e0d5749e970673d750909e91ea53b1c4f8e5. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², компиляторов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ инструмСнтов Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих цСлях. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эффСктивно. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описаны самыС основы, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм раскапывании Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

ΠŸΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΡŒ Skillbox. ΠŸΠΈΡˆΠ΅Ρ‚ ΠΏΡ€ΠΎ Java, ΡƒΡ‡ΠΈΡ‚ Go. ΠŸΠΎΠΌΠ½ΠΈΡ‚ рассвСт PHP ΠΈ ΠΊΠ°ΠΊ Β«Π³Ρ€Π°Π±ΠΈΡ‚ΡŒ ΠΊΠΎΡ€ΠΎΠ²Π°Π½Ρ‹Β».

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π‘Ρ‚ΠΈΠ»ΡŒ Π½Π΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΠΈ для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π½ΠΎ Π²Π°ΠΆΠ΅Π½ для чтСния ΠΊΠΎΠ΄Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ. НашС Π·Ρ€Π΅Π½ΠΈΠ΅ устроСно Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ спСрва ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π·Ρ‹, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ вдаёмся Π² Π΄Π΅Ρ‚Π°Π»ΠΈ. А Ссли Π±Π»ΠΎΠΊΠΈ исходного тСкста ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ Π·Π° конструкция, Π΄Π°ΠΆΠ΅ Π½Π΅ вникая Π² сам ΠΊΠΎΠ΄.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ чистому ΠΊΠΎΠ΄Ρƒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ Π² Java/Android

Π’Π΅ΠΌΠ΅ чистого ΠΊΠΎΠ΄Π° Π½Π° ΠΎΠ΄Π½ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ habrahabr посвящСно тысячи статСй. Никогда Π±Ρ‹ Π½Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π·Π°Ρ…ΠΎΡ‡Ρƒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою. Но послС провСдСния ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ курсов для ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ПО, Π² частности Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ Android, ΠΌΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ помСнялось.

Π—Π° основу ΡΡ‚Π°Ρ‚ΡŒΠΈ взяты совСты ΠΈΠ· классики β€œΠ ΠΎΠ±Π΅Ρ€Ρ‚ К. ΠœΠ°Ρ€Ρ‚ΠΈΠ½: Чистый код”. ΠžΡ‚ΠΎΠ±Ρ€Π°Π» ΠΈΠ· Π½ΠΈΡ… Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Ρƒ студСнтов. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ совСты написаны с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ коммСрчСских Android ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ ΠΊΠΎ всСм Android-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ совСты ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚, я ΡƒΠΆΠ΅ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΡŽ ΠΏΡ€ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ систСмы.

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ Π² основном ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ» с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΊ НЕ ΠΠ£Π–ΠΠž Π΄Π΅Π»Π°Ρ‚ΡŒ. Как Π½ΠΈ странно, Ρƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° студСнтов Π±Ρ‹Π»ΠΈ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ошибки. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Ρ‹, Π»ΡŽΠ±Ρ‹Π΅ совпадСния с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ случайны.

ΠžΠ±Ρ‰ΠΈΠ΅ совСты

1. Код Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ, понятным ΠΈ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ тратят Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· написанного ΠΊΠΎΠ΄Π°, Π° Π½Π΅ Π½Π° написаниС Π½ΠΎΠ²ΠΎΠ³ΠΎ. Π’Π°ΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π’Π°Ρˆ ΠΊΠΎΠ΄ Π±Ρ‹Π» Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ, понятным ΠΈ с ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ ΠΈ Π’Π°ΠΌ ΠΏΠΎ ΠΏΡ€ΠΎΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ минимальноС врСмя Π½Π° ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ кусок ΠΊΠΎΠ΄Π°. ΠŸΠΎΠ½ΡΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ с ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ошибки ΠΏΡ€ΠΈ внСсСнии ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄Π°.

2. ΠŸΡ€ΠΈ написании ΠΊΠΎΠ΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Java Code Conventions Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… спСцификаций, принятых Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ

Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ оформлСния тСкста ΠΊΠ½ΠΈΠ³ΠΈ. Π”ΡƒΠΌΠ°ΡŽ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠ΅ захотят Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ½ΠΈΠ³Ρƒ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π°Π±Π·Π°Ρ† отличаСтся ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠΌ тСкста. Π’Π°ΠΊ ΠΈ с ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΡƒΠ΄Π° Π»Π΅Π³Ρ‡Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΉ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ стилС ΠΊΠΎΠ΄.

НаимСнованиС

1. ИмСна классов, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π·Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π² Π½ΠΈΡ… смысл.

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ совСт, Π½ΠΎ Π½Π΅ всСгда Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π’ΡƒΡ‚, Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ: Ссли всС Π³Π»Π°Π²Ρ‹ Π½Π°Π·Π²Π°Π½Ρ‹ просто «Π“Π»Π°Π²Π°ΠΌΠΈ», Ρ‚ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π² Ρ‡Π΅ΠΌ ΡΡƒΡ‚ΡŒ нСльзя. НаимСнования классов, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎΠ± ΠΈΡ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π±Π΅Π· погруТСния Π² Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

НаимСнования классов MyActivity, CustomView, MyAdapter Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Ρ‡Π°ΡΡ‚ΡŒ Android SDK ΠΈ всС. SecondActivity Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ это Π½Π΅ Ρ‡Π°ΡΡ‚ΡŒ Android SDK ΠΈ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Activity, Π½ΠΎ Π½Π΅ Ρ„Π°ΠΊΡ‚ =)

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ названия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… бСсполСзны ΠΈ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° наимСнования:

ΠΊΠ°ΠΊ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ конструктора:

2. НазваниС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ класса ΠΈ Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ.

Π•ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ класс

НазваниС Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ этом оказываСтся β€œproducts_Activity.java”.
Π­Ρ‚ΠΎ Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. НазваниС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ класса ΠΈ java-Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ.

3. Π’ наимСнованиях Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠΊΠ²Ρ‹ латинского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°, Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ†ΠΈΡ„Ρ€, символов подчСркивания ΠΈ дСфисов. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ наимСнования ΠΈΠ· стандартов (Π“ΠžΠ‘Π’, ISO), символы подчСркивания для раздСлСния слов Π² наимСнованиях констант.

4. НС Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ строчныС β€œL” ΠΈ β€œO” Π² качСствС ΠΈΠΌΠ΅Π½ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚.ΠΊ. ΠΈΡ… Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ β€œ1” ΠΈ β€œ0”.

Надуманный ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ я встрСчал Π² своСй ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π’ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΠΎΠΉ сортировки Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° ошибка, смоТСтС Π·Π° сСкунды Π΅Π΅ Π½Π°ΠΉΡ‚ΠΈ=)?
Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Ρ‚Ρ€ΡƒΠ΄Π΅Π½ для чтСния ΠΈ ΠΏΡ€ΠΈ написании Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ.

5. НС Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π² суффиксС ΠΈΠΌΠ΅Π½.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ наслСдники классов Android SDK: Activity, Fragment, View, Uri ΠΈ Ρ‚.Π΄. По названию NewsSynsService сразу понятно, Ρ‡Ρ‚ΠΎ класс являСтся «ΡΠ΅Ρ€Π²ΠΈΡΠΎΠΌ» ΠΈ отвСтствСнСн Π·Π° ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ новостСй. ИспользованиС суффикса view Π² nameView, photoView позволяСт Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, относящиСся ΠΊ вСрстки, ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…. ИмСна view ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ. Но ΠΈΠΌΠ΅Π½Π° ΠΊΠ½ΠΎΠΏΠΎΠΊ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с Π³Π»Π°Π³ΠΎΠ»Π°: buyButton

6. ИмСна ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΈΠ· ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, названия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² проСктирования ΠΈ Ρ‚.Π΄.

7. НС Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ прСфиксы ΠΏΡ€ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ.

Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ Android SDK Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ здСсь ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π² силу давности создания ΠΏΠ΅Ρ€Π²Ρ‹Ρ… вСрсий ΠΈ наслСдования ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄ΠΎ Π½Π°ΡˆΠΈΡ… Π΄Π½Π΅ΠΉ.

s_ Π½ΠΈ ΠΊ Ρ‡Π΅ΠΌΡƒ Π² Π½Π°Ρ‡Π°Π»Π΅ названия статичСского поля. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ констант Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ прописными Π±ΡƒΠΊΠ²Π°ΠΌΠΈ:

8. Π’ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ классов Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅.

9. Названия классов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с прописной Π±ΡƒΠΊΠ²Ρ‹.

Π‘Π»ΠΎΠ²Π° НЕ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡΡ‚ΡŒΡΡ символом подчСркивания. НуТно ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ CamelCase: GoodsFragment, BaseFragment

10. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ΄Π½ΠΎ слово для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

1. Ѐункция Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ β€œΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽβ€. Она Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. И Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ½Π° Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π°.

Под β€œΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉβ€ слСдуСт ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ ΠΎΠ΄Π½Ρƒ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° дСйствия Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ абстракции. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция выполняСт Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, слСдуСт ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· Π½Π΅Π΅ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Если ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π΄Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ простой пСрСстановки ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ дальшС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π΅ΡΡ‚ΡŒ функция setProducts класса ProductsAdapter :

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ элСмСнтов newProducts Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ Π΄Π°ΠΆΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π² класса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² presenter-Π΅). Π’ ProductsAdapter Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΡƒΠΆΠ΅ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π›ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ newProducts содСрТит ΡƒΠΆΠ΅ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ².
МоТно Π΅Ρ‰Π΅ строчки java products.clear(); products.addAll(newProducts);
вынСсти Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ особого смысла я Π² этом Π½Π΅ Π²ΠΈΠΆΡƒ. Π›ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ notifyDataSetChanged Π½Π° DiffUtil, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ячСйки Π² спискС эффСктивнСС

2. Π Π°Π·ΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ 8-10 строк.

Ѐункция Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² 3 экрана это Π½Π΅ функция, это *****. Π£ мСня Ρ‚ΠΎΠΆΠ΅ Π½Π΅ всСгда получаСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 8-10 строками ΠΊΠΎΠ΄Π°, Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ стрСмится ΠΊ этому. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎ понятным ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Ρƒ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ большого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π Π°Π·Π±ΠΈΠ² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° ΠΌΠ°Π»Ρ‹Π΅, Π»Π΅Π³Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ смысл основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ скрыты. ВыдСляя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ дублирования ΠΊΠΎΠ΄Π° Π² основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

3. Π’ Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ абстракции.

ВычислСниС значСния локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ errorMessage ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции, Ρ‡Π΅ΠΌ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠΎΠ΄ java «Article » + article.getName() + » is incorrect» Π»ΡƒΡ‡ΡˆΠ΅ вынСсти Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

4. НаимСновании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ функция

ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ выдСлСния Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π² пояснСнии, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄. Для этого Π½ΡƒΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ подходящСС Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

НСпонятно ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ полю Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ поиск, Ρ‡Ρ‚ΠΎ пСрСдаСтся Π½Π° Π²Ρ…ΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π›ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

Π ΠΎΠ±Π΅Ρ€Ρ‚ К. ΠœΠ°Ρ€Ρ‚ΠΈΠ½ совСтуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² качСствС части названия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

На ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… я Ρ‚Π°ΠΊΠΎΠΉ способ Π½Π΅ встрСчал. Π›ΡƒΡ‡ΡˆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΉ способ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π°Π·Π²Π°Π½ΠΈΠ΅:

5. ИмСна Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π³Π»Π°Π³ΠΎΠ»Π°. Π›ΡƒΡ‡ΡˆΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ имя, Ρ‡Π΅ΠΌ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅.

НазваниС start Π½Π΅ сообщаСт, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ стартуСт функция. Волько заглянув Π² Ρ‚Π΅Π»ΠΎ становится понятно, Ρ‡Ρ‚ΠΎ функция ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Activity.

А Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ понятно ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΆΠ΅ ΠΏΠΎ названию.

6. ВмСсто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„Π»Π°Π³Π° (boolean) Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Часто этот Ρ„Π»Π°Π³ являСтся ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ выполнСния Π² зависимости ΠΎΡ‚ значСния Ρ„Π»Π°Π³Π°. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях слСдуСт ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π΄Π²Π΅. Π Π°Π·Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² зависимости ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π»Π°Π³Π° Π½Π΅ всСгда ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ.

7. Π”ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ слСдуСт Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Код Π²Π½ΡƒΡ‚Ρ€ΠΈ setOnClickListener отличаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стилСм. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ стоит вынСсти Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

8. НС ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€œnull” ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок NullPointerexception ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π² мСстах Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° null.

Kotlin ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π²Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ null.)

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

1. Код Π² классС Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ свСрху-Π²Π½ΠΈΠ· ΠΊΠ°ΠΊ газСтная ΡΡ‚Π°Ρ‚ΡŒΡ Π² порядкС убывания уровня абстракции. Π’Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ΄ΡƒΡ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅.

Основная идСя совСта Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° программист Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ свСрху. Если Π²Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ всС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π»Π΅Π³Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса, ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ класса ΠΈ Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π”Π°Π½Π½Ρ‹ΠΉ совСт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ строится Π½Π° интСрфСйсах.

2. БвязанныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ/Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ слСдуСт Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ рядом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ нСобходимости постоянно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Ρ„Π°ΠΉΠ»Ρƒ Π²Π²Π΅Ρ€Ρ…-Π²Π½ΠΈΠ·. Если ΠΎΠ΄Π½Π° функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ, Ρ‚ΠΎ вызываСмая функция Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ (Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ) ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒΡΡ пустой строкой.

Π”Π°Π½Π½Ρ‹ΠΉ совСт ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ. Π’Ρ‹Π±Ρ€Π°Π² ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΉ совСт для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, стоит ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ Π½Π° всСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

3. КаТдая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π³Ρ€ΡƒΠΏΠΏΠ° строк ΠΊΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½ΡƒΡŽ ΠΌΡ‹ΡΠ»ΡŒ. ΠœΡ‹ΡΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π² ΠΊΠΎΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пустых строк, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ слишком Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ пустыми строчками Π½Π΅ стоит

Бвязанная Π³Ρ€ΡƒΠΏΠΏΠ° строк это ΠΊΠ°ΠΊ Π°Π±Π·Π°Ρ†Ρ‹ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅. Для раздСлСния Π°Π±Π·Π°Ρ†Π΅Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ красная строка ΠΈΠ»ΠΈ пустая строка. Π’Π°ΠΊ ΠΈ Π² ΠΊΠΎΠ΄Π΅ слСдуСт Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎ смыслу Π³Ρ€ΡƒΠΏΠΏΡ‹ строк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ пустыС строки.

4. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра класса, статичСскиС константы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ всС Π² Π½Π°Ρ‡Π°Π»Π΅ класса Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС.

Π’ Π½Π°Ρ‡Π°Π»Π΅ класса ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ константы, Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ константы ΠΈ послС Π½ΠΈΡ… ΠΈΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

5. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ читаСмости ΠΊΠΎΠ΄Π°

Π›ΠΈΡˆΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² постановку Π·Π°Π΄Π°Ρ‡ΠΈ я понял, для Ρ‡Π΅Π³ΠΎ Π² ΠΊΠΎΠ΄Π΅ использовалось число β€œ10”. Π›ΡƒΡ‡ΡˆΠ΅ это число вынСсти Π² константу ΠΈ Π΄Π°Ρ‚ΡŒ осмыслСнноС имя.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Ρ‚ΠΎΠΆΠ΅ стоит Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ Π² константы, особСнно Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΌ мСстС.

ΠšΠ»Π°ΡΡΡ‹

1. Класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ β€œΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒβ€, ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ для измСнСния.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, наслСдники класса RecyclerView.Adapter Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° созданиС ΠΈ связываниС View с Π΄Π°Π½Π½Ρ‹ΠΌ. Π’ Π½Π΅ΠΌ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ находится ΠΊΠΎΠ΄ сортировки/Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ списка элСмСнтов.
Часто Π² Ρ„Π°ΠΉΠ» с Activity Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ класс RecyclerView.Adapter, Ρ‡Ρ‚ΠΎ являСтся Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ.

2. НС Π½ΡƒΠΆΠ½Ρ‹ пустыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ»ΠΈ просто Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса

3. Если пСрСопрСдСляСтС ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π΅Π· Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ.

ЗаглянитС Π² исходники Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Activity, Fragment, View Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΎ Ρ€Π°Π·Π½ΠΎΠΌ

1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ срСдства Android Studio для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ качСства Π’Π°ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

Если ΠΎΠ½Π° ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ»ΠΈ выдСляСт ΠΊΠΎΠ΄, Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ. Π’ Android Studio Π΅ΡΡ‚ΡŒ срСдства Rearrange, Reformat, Extract Method, Inline Method, Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ΄Π°, горячиС клавиши ΠΈ Ρ‚.Π΄.

2. НС Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ самодокумСнтированным.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΡΠ½ΡΡ‚ΡŒ намСрСния ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, Π° Π½Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Боздавая ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ€Π°Ρ‚ΡŒ Π½Π° сСбя ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠΈ коммСнтария Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии.

3. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, Ρ†Π²Π΅Ρ‚Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² рСсурсах (xml)

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· ΠΏΠ°ΠΏΠΎΠΊ test, mock. Π’Π°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² Ρ€Π΅Π»ΠΈΠ·Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ

4. НС Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ context Π² RecyclerView.Adapter. context ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· любой view. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡƒ Π² RecyclerView.Adapter Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· notifyItemChanged, Π° Π½Π΅ нСпосрСдствСнным ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ вьюшСк Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ наТатия

5. Π’ RecyclerView.ViewHolder вмСсто опрСдСлСния ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² спискС Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ getAdapterPosition, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ position ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° onBindViewHolder

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ:

Π›ΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ½ΠΎ вмСсто ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ссылку Π½Π° исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

6. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Quantity Strings (Plurals) для мноТСствСнного числа. ВмСсто написания Π² ΠΊΠΎΠ΄Π΅ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Π±ΠΎΡ€Ρƒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ окончания слов.

7. НС сохраняйтС большиС Π΄Π°Π½Π½Ρ‹Π΅ Bitmap Π² bundle. Π Π°Π·ΠΌΠ΅Ρ€ bundle ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½

8. Если ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ β€œid” Π² xml, Ρ‚ΠΎ Android сам восстановит состояниС стандартных View ΠΏΡ€ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *