ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Как ΠΈΠΌΠ΅Π½Π½ΠΎ происходит компиляция java?

запутался Π² процСссС компиляции java

Ρ…ΠΎΡ€ΠΎΡˆΠΎ, я знаю это: ΠΌΡ‹ пишСм исходный ΠΊΠΎΠ΄ java, компилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π° Π·Π°Ρ‚Π΅ΠΌ jvm, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ½Π΅, ясно ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΉ исходный ΠΊΠΎΠ΄ Java прСобразуСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

9 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²:

Ρ…ΠΎΡ€ΠΎΡˆΠΎ, я знаю это: ΠΌΡ‹ пишСм исходный ΠΊΠΎΠ΄ java, компилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄,

собствСнно сам компилятор Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ собствСнный исполняСмый Ρ„Π°ΠΉΠ» (ΠΎΡ‚ΡΡŽΠ΄Π° javac.исполняСмый.) И ΠΏΡ€Π°Π²Π΄Π°, ΠΎΠ½ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный Ρ„Π°ΠΉΠ» Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π½Π΅ зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java.

Π·Π°Ρ‚Π΅ΠΌ jvm, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΊΠΎΠ΄.

Π½Π΅ всСгда. Как для JVM ΠΎΡ‚ Sun сущСствуСт Π΄Π²Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹: ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром. Они ΠΎΠ±Π° ΠΌΠΎΠ³ΡƒΡ‚, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

этой exe Ρ„Π°ΠΉΠ» прСдставляСт собой ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ java. Π­Ρ‚ΠΎ удобство-ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ слоТных ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Ρ… сцСнариСв. Он запускаСт JVM ΠΈ выполняСт компилятор.

Ссли ΠΊΠΎΠ΄ компилятора написан Π½Π° java, Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ компилятора выполняСтся Π½Π° этапС компиляции, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° jvm для выполнСния ΠΊΠΎΠ΄Π° java.

это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ.

ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ сам язык ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свой собствСнный ΠΊΠΎΠ΄ языка? ВсС это ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΊΡƒΡ€ΠΈΡ†Ρ‹ ΠΈ яйца ΠΌΠ½Π΅.

ΠΏΡ€Π°Π²Π΄Π°, сбиваСт с Ρ‚ΠΎΠ»ΠΊΡƒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд. Π₯отя, это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ΄ΠΈΠΎΠΌΠ° Java. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ada Ρ‚Π°ΠΊΠΆΠ΅ написан Π² самой Ada. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ «ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΡƒΡ€ΠΈΡ†Ρ‹ ΠΈ яйца», Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ.

Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдставлСниС, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π½Π° самом Π΄Π΅Π»Π΅.

ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ½Π΅, ясно ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΉ исходный ΠΊΠΎΠ΄ Java прСобразуСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ясно прямо сСйчас, Π½ΠΎ Π²ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ Ρ€Π΅Π·ΡŽΠΌΠ΅:

Π²Ρ‹Π·ΠΎΠ² javac указывая Π½Π° исходный ΠΊΠΎΠ΄ Ρ„Π°ΠΉΠ». Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ (ΠΈΠ»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€) javac считываСт ваш Ρ„Π°ΠΉΠ» ΠΈ создаСт ΠΈΠ· Π½Π΅Π³ΠΎ фактичСский AST. ВсС синтаксичСскиС ошибки происходят с этого этапа.

The javac Π΅Ρ‰Π΅ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» Ρ€Π°Π±ΠΎΡ‚Ρƒ. Когда Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ AST, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ истинная компиляция. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ шаблон посСтитСля для ΠΎΠ±Ρ…ΠΎΠ΄Π° AST ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ внСшниС зависимости, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (сСмантику) Π² ΠΊΠΎΠ΄. Π“ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ сохраняСтся ΠΊΠ°ΠΊ содСрТащий Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄.

ΠΏΡ€Π°Π²ΠΊΠ°: Π±Π΅Π· javac ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ компилятор, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, стандартный способ-ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ javac ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° с JDK.

Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° БпСцификация Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠœΠ°ΡˆΠΈΠ½Ρ‹, которая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

ΠΌΠ½ΠΎΠ³ΠΈΠ΅ (Ссли Π½Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ) компиляторы написаны Π½Π° языкС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Ρ€Π°Π½Π½Π΅ΠΌ этапС компилятор сам Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π±Ρ‹Ρ‚ΡŒ скомпилирован Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅, Π½ΠΎ послС этой «Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ», любая новая вСрсия компилятора ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпилирована Π±ΠΎΠ»Π΅Π΅ старой вСрсиСй.

Π½Ρƒ, javac ΠΈ jvm ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ собствСнными Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Они написаны Π½Π° Π‘ΠΈ ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ… Π½Π° Java, просто Π²Π°ΠΌ сначала Π½ΡƒΠΆΠ½Π° родная вСрсия. Π­Ρ‚ΠΎ называСтся «ΠΏΡ€ΠΈΠ²ΡΠ·ΠΊΠ° Π±ΠΎΡ‚ΠΈΠ½ΠΊΠ°».

Π·Π°Π±Π°Π²Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚: Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, написанный Π½Π° ΠΈΡ… Ρ€ΠΎΠ΄Π½ΠΎΠΌ языкС. Однако всС ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ C). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ компилятор C, для сравнСния, Π±Ρ‹Π» написан Π½Π° ассСмблСрС. Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ассСмблСр Π±Ρ‹Π» написан Π² машинном ΠΊΠΎΠ΄Π΅. (Или,Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π±ΠΎΡ‡Π΅ΠΊ;)

.Ρ„Π°ΠΉΠ»Ρ‹ классов-это Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ javac. Они Π½Π΅ тСкстовыС, это Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ).

jvm Π²ΠΎ врСмя выполнСния ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈΠ±ΠΎ ΠΈΠ½Ρ‚Π΅ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ (ΠΏΡ€ΠΈΡ‚Π²ΠΎΡ€ΡΡΡΡŒ самим процСссором), Π»ΠΈΠ±ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ JIT (just-in-time) ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² собствСнный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ПослСднСС, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, быстрСС, Π½ΠΎ всС Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС.

Π”Π»ΠΈΠ½Π½ΠΎΠ΅ ОбъяснСниС

всСгда ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ java Π½Π΅ являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ распознаСт опСрационная систСма. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Java интСрпрСтируСтся ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java (JVM). JVM Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, Π΅ΠΌΡƒ Π½ΡƒΠΆΠ΅Π½ скомпилированный ΠΊΠΎΠ΄. Π’ΠΎΡ‚ Π³Π΄Π΅ компилятор Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ.

ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΉ процСсс позволяСт сСбС манипуляции с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π² тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Нам Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Ρ„Π°ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ

1) Java Π½Π΅ Multi-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ это нСзависимая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°.

2) JVM являСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ с использованиСм C / C++. Одна ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎΡ‡Π΅ΠΌΡƒ люди Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Java Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ языком, Ρ‡Π΅ΠΌ C/C++

Windows Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java ΠΏΠ΅Ρ€Π΅Π΄ установкой срСды выполнСния Java, ΠΈ Sun Π²Ρ‹Π±Ρ€Π°Π»Π° собствСнныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ JVM вмСсто привязки jar-суффикса ΠΊ Π΄Π²ΠΈΠΆΠΊΡƒ Java.

компилятор ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» написан Π½Π° C с Π±ΠΈΡ‚Π°ΠΌΠΈ C++, ΠΈ я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ всС Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ (ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ компилятор Ρ‚Π°ΠΊΠΆΠ΅ написан Π½Π° Java?). ΠΈ javac.exe-это просто ΠΊΠΎΠ΄ C / C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся компилятором.

Π² качСствС ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ компилятор Π½Π° java, Π½ΠΎ Π²Ρ‹ ΠΏΡ€Π°Π²Ρ‹, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΊΡƒΡ€ΠΈΡ†Ρ‹ ΠΈ яйца. Для этого Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько инструмСнтов Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ компилятор.

Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ это, JVM Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ· Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°. Π­Ρ‚ΠΎ извСстно ΠΊΠ°ΠΊ компиляция JIT ΠΈ происходит ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

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

КакоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C++, этап компиляции Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ отсутствуСт: компилятор сразу ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΊΠΎΠ΄) Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ создаСт Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для исполнСния (Π² Windows – это Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ exe). ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ нСдостатком Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° являСтся Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ процСссора: для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ процСссора Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою Π²Π΅Ρ€ΡΠΈΡŽ машинного ΠΊΠΎΠ΄Π°.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° языкС Java, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ дСйствий:

1) ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ java, содСрТащий тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

2) ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ компилятора javac. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ ΠΊΠΎΠ΄ Π½Π° ошибки ΠΈ, Ссли ΠΎΠ½ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½, выдаст Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ class;

3) ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», содСрТащий Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ javac Π² Windows

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку Windows (cmd) ΠΈ Π²Π²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«javacΒ».

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС: Β«»javac» Π½Π΅ являСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΈΠ»ΠΈ внСшнСй ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, исполняСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌΒ». Π’Π°ΠΊΠΆΠ΅ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«javaΒ» ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ сообщСниС: Β«»java» Π½Π΅ являСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΈΠ»ΠΈ внСшнСй ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, исполняСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌΒ». Для исправлСния этой ситуации Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

1) ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ Β« C:\Program Files\Java\jdk-10.0.2\bin Β» (Ссли Π’Ρ‹ оставили ΠΏΡƒΡ‚ΡŒ для установки JDK ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅). Π’ этой ΠΏΠ°ΠΏΠΊΠ΅ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ java.exe ΠΈ javac.exe.

2) ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΎΠΊΠ½ΠΎ Windows Β«Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Β». На свободном пространствС Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ контСкстноС мСню. Π’ Π½Ρ‘ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ «Бвойства».

3) Π’ появившСмся ΠΎΠΊΠ½Π΅ «БистСма» Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° Β«Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Β».

4) Π’ появившСмся ΠΎΠΊΠ½Π΅ «Бвойства систСмы» Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Β«Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΒ» Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды…».

5) Π’ появившСмся ΠΎΠΊΠ½Π΅ Β«ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды» Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ «БистСмныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅Β» Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Β«PathΒ» ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒβ€¦Β».

6) Π’ появившСмся ΠΎΠΊΠ½Π΅ Β«Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды», Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒΒ» ΠΈ добавляСм Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Β« C:\Program Files\Java\jdk-10.0.2\bin\ Β». ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ измСнСния ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ «ОК».

7) ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ измСнСния Π²ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π½Π°ΠΌΠΈ ΠΎΠΊΠ½Π°Ρ…, наТимая ΠΊΠ½ΠΎΠΏΠΊΡƒ «ОК».

8) ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку ΠΈ Π²Π²ΠΎΠ΄ΠΈΠΌ «javac» ΠΈΠ»ΠΈ «java».

БистСма выдаст Π½Π°ΠΌ справку, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (usage) ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ пСрСчислСны Π΅Ρ‘ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ (options). Source files (дословно «источники Ρ„Π°ΠΉΠ»ΠΎΠ²Β») – это ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ Π½Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΅Ρ‘ запуск Π½Π° исполнСниС

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ запустим Π΅Ρ‘.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» Cat.java (ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ имя класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°?) ΠΈ помСстим Π² этот Ρ„Π°ΠΉΠ» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

public class Cat <
public static void main(String[] args) <
System.out.println(«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я ΠΊΠΎΡ‚! Π’Π²ΠΎΠΉ Π΄Ρ€ΡƒΠ³ ;)»);
>
>

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Π²Π²Π΅Π΄Ρ‘ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«javacΒ» ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» ΡƒΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΡƒΡ‚ΡŒ ΠΊ созданному Ρ„Π°ΠΉΠ»Ρƒ. Π’Π°ΠΊ, Ссли Π’Ρ‹ создали Ρ„Π°ΠΉΠ» Cat.java Π½Π° Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ столС Windows, Ρ‚ΠΎ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ: Β« C:\Users\ USERNAME \Desktop\Cat.java Β», Π³Π΄Π΅ USERNAME – имя Π’Π°ΡˆΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Иногда ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ слоТности ΠΏΡ€ΠΈ создании Ρ„Π°ΠΉΠ»Π° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ java: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ стандартный тСкстовый Π±Π»ΠΎΠΊΠ½ΠΎΡ‚ Π² Windows, Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ просто ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ имя Ρ„Π°ΠΉΠ»Π°, ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ вмСсто Ρ„Π°ΠΉΠ»Π° Cat.java создаСтся Ρ„Π°ΠΉΠ» Cat.java.txt. Для создания Ρ„Π°ΠΉΠ»Π° ΠΈΠΌΠ΅Π½Π½ΠΎ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ java, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ тСкстовым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Notepad++. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹!

Π’ процСссС компиляции исходного ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс помСщаСтся Π² собствСнный Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ», Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ класса ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ class. Π•Π³ΠΎ содСрТимоС ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ тСкстовым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Notepad++.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ java. ΠŸΡ€ΠΈ запускС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ java автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ class. И Ссли ΠΎΠ½ Π½Π°ΠΉΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ», Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΊΠΎΠ΄, содСрТащийся Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ классС.

Π’Π²Π΅Π΄Ρ‘ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Β«java CatΒ» ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ «НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ основной класс CatΒ»:

Error: Could not find or load main class Cat
Caused by: java.lang.ClassNotFoundException: Cat

Π’Π²Π΅Π΄Ρ‘ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π΅Ρ€Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ: Β« java –classpath C:\Users\ USERNAME \Desktop Cat Β». Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ использовали ΠΎΠΏΡ†ΠΈΡŽ classpath (Β«ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ classΒ»). Для изучСния схСмы использования ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ, ΠΊΠ°ΠΊ Π’Ρ‹ ΡƒΠΆΠ΅ догадались, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«javaΒ».

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ сообщСниС: Β«Π’Π°ΡˆΠ° пСрвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° JavaΒ». Если Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ кракозябры, Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π­Ρ‚ΠΎ дСлаСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ chcp Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: Β« chcp Β». Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Π½Π° UTF-8, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ: Β« chcp 65001 Β».

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для класса Dog. Π’ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ сообщСниС Π½Π° экран внСситС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ установим ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, создадим ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ запустим Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

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

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для запуска ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, компиляция, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° JVM

Ни для ΠΊΠΎΠ³ΠΎ Π½Π΅ сСкрСт, Ρ‡Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Java β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных языков программирования Π² ΠΌΠΈΡ€Π΅. Π”Π°Ρ‚Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ выпуска Java β€” 23 мая 1995 Π³ΠΎΠ΄Π°.

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ посвящСна основам основ: Π² Π½Π΅ΠΉ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ особСнности языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ придутся кстати Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ β€œΠ΄ΠΆΠ°Π²ΠΈΡΡ‚Π°ΠΌβ€, Π° ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ смогут ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ свои знания.

* Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π° Π½Π° основС Π΄ΠΎΠΊΠ»Π°Π΄Π° ЕвгСния Π€Ρ€Π°ΠΉΠΌΠ°Π½Π° β€” Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ IntexSoft.
Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ссылки Π½Π° внСшниС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹
.

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

1. JDK, JRE, JVM

Java Development Kit β€” ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС Java. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Java Development Tools ΠΈ срСду выполнСния Java β€” JRE (Java Runtime Environment).

Java development tools Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя ΠΎΠΊΠΎΠ»ΠΎ 40 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΡƒΠ»ΠΎΠ²: javac (компилятор), java (Π»Π°ΡƒΠ½Ρ‡Π΅Ρ€ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ), javap (java class file disassembler), jdb (java debugger) ΠΈ Π΄Ρ€.

Π‘Ρ€Π΅Π΄Π° выполнСния JRE β€” это ΠΏΠ°ΠΊΠ΅Ρ‚ всСго Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ для запуска скомпилированной Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ JVM ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ классов Java β€” Java Class Library.

JVM β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, прСдназначСнная для выполнСния Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ прСимущСство JVM β€” это ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ β€œWrite once, run anywhere”. Он ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, написанноС Π½Π° Java, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. Π­Ρ‚ΠΎ являСтся большим прСимущСством JVM ΠΈ самой Java.

Π”ΠΎ появлСния Java, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΈ написаны ΠΏΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ систСмы, Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π°Π²Π°Π»ΠΎΡΡŒ Ρ€ΡƒΡ‡Π½ΠΎΠΌΡƒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ эффСктивному ΠΈ прСдсказуСмому. Π‘ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ 1990-Ρ… Π³ΠΎΠ΄ΠΎΠ², послС появлСния Java, автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ стало ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ.

БущСствуСт мноТСство Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ JVM, ΠΊΠ°ΠΊ коммСрчСских, Ρ‚Π°ΠΊ ΠΈ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Одна ΠΈΠ· Ρ†Π΅Π»Π΅ΠΉ создания Π½ΠΎΠ²Ρ‹Ρ… JVM β€” ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. КаТдая JVM ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΏΠΎΠ΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΈ этом Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° быстрСС Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. Бамая распространённая рСализация JVM β€” это JVM Hotspot ΠΎΡ‚ OpenJDK. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ IBM J9, Excelsior JET.

2. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° JVM

Богласно спСцификации Java SE, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π² JVM, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ 3 этапа:

3. Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ классов ΠΈ ΠΈΡ… иСрархия

ВСрнСмся ΠΊ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°ΠΌ классов β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ JVM. Они Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ классы Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈΡ… доступными для выполнСния. Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со всСми классами: ΠΈ с нашими, ΠΈ с Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСпосрСдствСнно Π½ΡƒΠΆΠ½Ρ‹ для Java.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ: ΠΌΡ‹ написали своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ ΠΏΠΎΠΌΠΈΠΌΠΎ стандартных классов Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ наши классы, ΠΈ ΠΈΡ… ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ. Как с этим Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ JVM? Π’ Java Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° отлоТСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° классов, ΠΈΠ½Ρ‹ΠΌΠΈ словами lazy loading. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° классов Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ встрСтится ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ классу.

Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ² классов

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов β€” это Bootstrap classloader. Он написан Π½Π° C++. Π­Ρ‚ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ всС систСмныС классы ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π° rt.jar. ΠŸΡ€ΠΈ этом, Π΅ΡΡ‚ΡŒ нСбольшоС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ классов ΠΈΠ· rt.jar ΠΈ Π½Π°ΡˆΠΈΡ… классов: ΠΊΠΎΠ³Π΄Π° JVM Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ классы ΠΈΠ· rt.jar, ΠΎΠ½Π° Π½Π΅ выполняСт всС этапы ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класс-Ρ„Π°ΠΉΠ»Π° Ρ‚.ΠΊ. JVM ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстно, Ρ‡Ρ‚ΠΎ всС эти классы ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² этот Π°Ρ€Ρ…ΠΈΠ² ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ свои Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ стоит.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ β€” это Extension classloader. Он Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ классы Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ jre/lib/ext. Допустим, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ класс загруТался ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ стартС Java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Для этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный Ρ„Π°ΠΉΠ» класса Π² эту ΠΏΠ°ΠΏΠΊΡƒ, ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ β€” System classloader. Он Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ классы ΠΈΠ· classpath’а, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΏΡ€ΠΈ запускС прилоТСния.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ классов происходит ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ:

4. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π‘lass-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ процСсс Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ нСпосрСдствСнно ΠΊ структурС Class-Ρ„Π°ΠΉΠ»ΠΎΠ².

ВсС числа, строки, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° классы, поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ хранятся Π² Π‘onstant pool β€” области памяти Meta space. ОписаниС класса хранится Ρ‚Π°ΠΌ ΠΆΠ΅ ΠΈ содСрТит имя, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, супСр-класс, супСр-интСрфСйсы, поля, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Атрибуты, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ классов:

5. ИсполнСниС Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Π½Π° JVM

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, для исполнСния Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, JVM ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ β€” довольно ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ процСсс. Π’ процСссС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ β€œΠ±Π΅ΠΆΠΈΡ‚β€ построчно ΠΏΠΎ класс-Ρ„Π°ΠΉΠ»Ρƒ ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ понятны JVM.

Π’Π°ΠΊΠΆΠ΅ JVM ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Π³ΠΎ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚.Π΅. ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСпосрСдствСнно Π½Π° CPU.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ часто, Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π° сразу Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

6. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходныС части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанныС Π½Π° языкС программирования высокого уровня, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° машинном языкС, β€œΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽβ€ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ дСлятся Π½Π°:

Π’Π°ΠΊΠΆΠ΅ компиляторы ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ компиляции:

7. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ памяти Π² Java

Π‘Ρ‚Π΅ΠΊ β€” это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти Π² Java, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ схСмС LIFO β€” β€œLast in β€” Fisrt Out” ΠΈΠ»ΠΈ β€œΠŸΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ вошСл, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅Π»β€.

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Он Π½ΡƒΠΆΠ΅Π½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² стСкС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° выполняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ созданы.

Когда вызываСтся любой ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Java, создаСтся Ρ„Ρ€Π΅ΠΉΠΌ ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти Π² стСкС, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ кладСтся Π½Π° Π΅Π³ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ. Когда ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΎΠ½ удаляСтся ΠΈΠ· памяти, Ρ‚Π΅ΠΌ самым освобоТдая ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Если ΠΏΠ°ΠΌΡΡ‚ΡŒ стСка Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π°, Java бросит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ java.lang.StackOverFlowError. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, Ссли Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ рСкурсивная функция, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ сама сСбя ΠΈ памяти Π² стСкС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Π²Π°Ρ‚Π°Ρ‚ΡŒ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности стСка:

ΠšΡƒΡ‡Π° Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° нСсколько Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ… частСй, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… поколСниями:

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ ΠΎΡ‚ Permanent generation? Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, это ΠΈΠ·-Π·Π° ошибки, которая Π±Ρ‹Π»Π° связана с ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ области: Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Perm ΠΈΠΌΠ΅Π» константный Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Π½Π΅ ΠΌΠΎΠ³ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ динамичСски, Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π»Π°ΡΡŒ, кидалась ошибка, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ°Π΄Π°Π»ΠΎ.

Meta space ΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ динамичСский Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΈ Π²ΠΎ врСмя исполнСния ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² памяти JVM.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности ΠΊΡƒΡ‡ΠΈ:

ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²Ρ‹ΡˆΠ΅, рассмотрим, ΠΊΠ°ΠΊ происходит ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π° простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π£ нас Π΅ΡΡ‚ΡŒ класс App, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ main состоит ΠΈΠ·:

β€” ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½ΠΎΠΉ id Ρ‚ΠΈΠΏΠ° int со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 23
β€” ссылочной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ pName Ρ‚ΠΈΠΏΠ° String со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Jon
β€” ссылочной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ p Ρ‚ΠΈΠΏΠ° person

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка создаётся ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранятся Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ для выполнСния.
Π’ нашСм случаС, это ссылка Π½Π° класс person: сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ хранится Π² ΠΊΡƒΡ‡Π΅, Π° Π² стСкС хранится ссылка. Π’Π°ΠΊΠΆΠ΅ Π² стСк кладСтся ссылка Π½Π° строку, Π° сама строка хранится Π² ΠΊΡƒΡ‡Π΅ Π² String pool. ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² хранится нСпосрСдствСнно Π² стСкС.

Для Π²Ρ‹Π·ΠΎΠ²Π° конструктора с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Person (String) ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° main() Π² стСкС, ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° main() создаСтся Π² стСкС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚:

β€” this β€” ссылка Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
β€” ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ id
β€” ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ personName, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° строку Π² String Pool.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ конструктор, вызываСтся setPersonName(), послС Ρ‡Π΅Π³ΠΎ снова создаСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌ Π² стСкС, Π³Π΄Π΅ хранятся Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅: ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ссылка Π½Π° строку, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° выполнится ΠΌΠ΅Ρ‚ΠΎΠ΄ setter, Ρ„Ρ€Π΅ΠΉΠΌ ΠΏΡ€ΠΎΠΏΠ°Π΄Π΅Ρ‚, стСк очистится. Π”Π°Π»Π΅Π΅ выполняСтся конструктор, очищаСтся Ρ„Ρ€Π΅ΠΉΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» создан ΠΏΠΎΠ΄ конструктор, послС Ρ‡Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ main() Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Ρ‚ΠΎΠΆΠ΅ удаляСтся ΠΈΠ· стСка.

Если Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, для Π½ΠΈΡ… Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ созданы Π½ΠΎΠ²Ρ‹Π΅ Ρ„Ρ€Π΅ΠΉΠΌΡ‹ с контСкстом этих ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

8. Garbage collector

Π’ ΠΊΡƒΡ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Garbage collector β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС Java, которая избавляСтся ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ.

Π Π°Π·Π½Ρ‹Π΅ JVM ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сборки мусора, Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ сборщики мусора.

ΠœΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ самом простом сборщикС Serial GC. Π‘Π±ΠΎΡ€ΠΊΡƒ мусора ΠΌΡ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ System.gc().

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ упомянуто Π²Ρ‹ΡˆΠ΅, ΠΊΡƒΡ‡Π° Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° 2 области: New generation ΠΈ Old generation.

New generation (младшСС ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅) Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя 3 Ρ€Π΅Π³ΠΈΠΎΠ½Π°: Eden, Survivor 0 ΠΈ Survivor 1.

Old generation Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Ρ€Π΅Π³ΠΈΠΎΠ½ Tenured.

Π§Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ создаСм Π² Java ΠΎΠ±ΡŠΠ΅ΠΊΡ‚?

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Eden. Если ΠΌΡ‹ создали ΡƒΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π² Eden ΡƒΠΆΠ΅ Π½Π΅Ρ‚ мСста, срабатываСт сборщик мусора ΠΈ освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π­Ρ‚ΠΎ, Ρ‚Π°ΠΊ называСмая, малая сборка мусора β€” Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ ΠΎΠ½ ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Eden ΠΈ ΠΊΠ»Π°Π΄Ρ‘Ρ‚ β€œΠ²Ρ‹ΠΆΠΈΠ²ΡˆΠΈΠ΅β€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ€Π΅Π³ΠΈΠΎΠ½ Survivor 0. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π΅Π³ΠΈΠΎΠ½ Eden ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ высвобоТдаСтся.

Если ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Eden снова Π±Ρ‹Π»Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π°, garbage collector Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Eden ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Survivor 0, которая занята Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. ПослС очищСния Π²Ρ‹ΠΆΠΈΠ²ΡˆΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅Π³ΠΈΠΎΠ½ β€” Survivor 1, Π° Π΄Π²Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… останутся чистыми. ΠŸΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сборкС мусора Π² качСствС Ρ€Π΅Π³ΠΈΠΎΠ½Π° назначСния ΠΎΠΏΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ Survivor 0. ИмСнно поэтому Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ€Π΅Π³ΠΈΠΎΠ½ΠΎΠ² Survivor всСгда Π±Ρ‹Π» пустым.

JVM слСдит Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ постоянно ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅Π³ΠΈΠΎΠ½Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. И для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, послС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠ³Π° сборщик мусора ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ€Π΅Π³ΠΈΠΎΠ½ Tenured.

Когда Π² Tenured мСста для Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚, происходит полная сборка мусора β€” Mark-Sweep-Compact.

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Π’ΠΎ врСмя этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° опрСдСляСтся, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Ρ€Π΅Π³ΠΈΠΎΠ½ очищаСтся ΠΎΡ‚ этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти Tenured дСфрагмСнтируСтся, Ρ‚.Π΅. ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ заполняСтся Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

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

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅, компиляция ΠΈ выполнСния Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, Π΅Ρ‘ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Если Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ошибки компиляции, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ…, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘. Если Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ошибки выполнСния, ΠΈΠ»ΠΈ ΠΎΠ½Π° Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ снова. Π­Ρ‚ΠΎΡ‚ процСсс ΠΈ являСтся созданиСм (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Для создания ΠΈ рСдактирования исходного ΠΊΠΎΠ΄Π° Java Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈΠ»ΠΈ IDE. Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» дСмонстрируСт, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ запуск Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² NetBeansΒ» ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Ρ‚ΡŒ Π² IDE Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ NetBeans.

МоТно Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· IDE, Π° ΠΏΠΈΡΠ°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ Π² любом тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Notepad), Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .java ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² точности Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ имя, ΠΊΠ°ΠΊ ΠΈ имя ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ (public) класса. НапримСр, Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ:

Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Welcome.java, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ имя public класса – Welcome.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Java ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ Java Π² Ρ„Π°ΠΉΠ» с Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ΠΎΠΌ Java. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Welcome.java:

Если Π½Π΅Ρ‚ синтаксичСских ошибок, компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» Π±Π°ΠΉΠΊΠΎΠ΄Π° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .class. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, привСдённая Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Welcome.class.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ JDK. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ описано Π² инструкциях:

Π―Π·Ρ‹ΠΊ Java – это высокоуровнСвый язык программирования, Π½ΠΎ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Java – это Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ язык. Π‘Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ инструкции, Π½ΠΎ Π½Π΅ΠΉΡ‚Ρ€Π°Π»Π΅Π½ ΠΊ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ (Π½Π΅ зависит ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹) ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π½Π° любой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, которая ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Java – Java Virtual Machine (JVM). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ физичСской ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина – это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Java. Π­Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… прСимущСств Java: Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Java ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Java компилируСтся Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Java, Π° Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Java интСрпрСтируСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Java. Π’Π°Ρˆ ΠΊΠΎΠ΄ Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Java. JVM выполняСт ваш ΠΊΠΎΠ΄ вмСстС с ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ – это Π·Π½Π°Ρ‡ΠΈΡ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π½Π° любой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ с JVM, которая являСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Она (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java) ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ инструкции Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ языковой ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ дСлаСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ – ΠΎΠ΄Π½Π° инструкция Π·Π° Ρ€Π°Π·, Π° Π½Π΅ вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π·Π° ΠΎΠ΄ΠΈΠ½ присСст. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ шаг Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ выполняСтся, сразу послС ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° выполняСт Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π²Ρ‹ΡˆΠ΅:

На ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ процСсс компиляции ΠΈ запуска:

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .class Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, ΠΊΠΎΠ³Π΄Π° запускаСтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ИмяКласса для запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если Π²Ρ‹ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ИмяКласса.class, Ρ‚ΠΎ систСма Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ„Π°ΠΉΠ»ΠΎΠΌ ИмяКласса.class.class.

Π‘ΠΏΡ€Π°Π²ΠΊΠ°: ΠΊΠΎΠ³Π΄Π° выполняСтся Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, JVM Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ с Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° класса Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов (class loader). Если ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классы, Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов динамичСски ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ понадобятся. ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ класса, JVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρ‘Ρ€ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° (bytecode verifier) для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Ρ‡Ρ‚ΠΎ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ бСзопасности Java. Java обСспСчиваСт ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ классов Java Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Π»Π°Π½Ρ‹ ΠΈ Π½Π΅ врСдят Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ.

ΠŸΠ΅Π΄Π°Π³ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ваш инструктор ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ вас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. НапримСр, всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· этой части ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ chapter2. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΈ пространствах ΠΈΠΌΡ‘Π½ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π΄Π°Π»Π΅Π΅. Π’Π°ΠΊΠΆΠ΅ посмотритС Ρ€Π°Π·Π΄Π΅Π» Β«ΠŸΠΎΡ‡Π΅ΠΌΡƒ NetBeans всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ packageΒ».

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки компиляции ΠΈ запуска Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Команда javac нС найдСна

Если ΠΏΡ€ΠΈ запускС javac, Ρ‚.Π΅. ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ компиляции Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ JDK Π½Π΅ установлСн. Π›ΠΈΠ±ΠΎ установлСн, Π½ΠΎ Π½Π΅ настроСны ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния. Бпособы исправлСния ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹:

Если JDK установлСн, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· добавлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ исполнимого Ρ„Π°ΠΉΠ»Π° javac:

Ошибка Class names are only accepted if annotation processing is explicitly requested

Если ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка:

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° ошибки Π² Ρ‚ΠΎΠΌ – Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° .java.

Ошибка записи (error while writing)

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ заканчиваСтся ошибкой:

Ошибка «class is public, should be declared in a file named»

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заканчиваСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠΉ Ρ‚Π°ΠΊΠΎΠΉ ошибкой

ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°Π·Π²Π°Π»ΠΈ класс Π² исходном ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Имя класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ„Π°ΠΉΠ» называСтся Welcome.java, Π° класс Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π°Π·Π²Π°Π½ Welcomee

Error: Could not find or load main class

Если ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π΅Ρ‘ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊ названию Ρ„Π°ΠΉΠ»Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .class. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина автоматичСски добавляСт Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ½Π° ΠΈΡ‰Π΅Ρ‚ Ρ„Π°ΠΉΠ» Welcome.class.class

Ошибка Error: Could not find or load main class ΠΏΡ€ΠΈ запускС Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ

Π­Ρ‚Π° ошибка Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ запускС Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ:

Ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠ°ΠΊ Π² Windows, Ρ‚Π°ΠΊ ΠΈ Π² Linux:

Если Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ запускаСтС, Ρ‚ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ. НапримСр, Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Если ΠΆΠ΅ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ -cp, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Π³Π΄Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° запускаСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. А Π΄Π°Π»Π΅Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ запускаСмый Ρ„Π°ΠΉΠ» Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ .class:

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π°, командная строка находится Π² ΠΏΠ°ΠΏΠΊΠ΅ C:\WINDOWS\system32. Π€Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, находится Π² ΠΏΠ°ΠΏΠΊΠ΅ C:\ (ΠΊΠΎΡ€Π΅Π½ΡŒ диска). ΠœΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ послС ΠΊΠ»ΡŽΡ‡Π° -cp ΠΏΠ°ΠΏΠΊΡƒ C:\, Π° Π·Π°Ρ‚Π΅ΠΌ пишСм имя Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ – Welcome.

Аналогично Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² Linux. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

Ошибка Main method not found in class

Если ΠΏΡ€ΠΈ запускС Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ошибкой:

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ main, Π»ΠΈΠ±ΠΎ написали слово Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Main вмСсто main).

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ компиляции ΠΈ запуска Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Windows

Команда «javac» Π½Π΅ являСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΈΠ»ΠΈ внСшнСй ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, исполняСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ

Π­Ρ‚Π° ошибка рассмотрСна Ρ‡ΡƒΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅. Для установки ΠΈ настройки ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния Π² Windows ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ инструкции «Установка Java (JDK) Π² WindowsΒ».

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Π² Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Windows

Если Π²Ρ‹ написали ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρƒ Π² консоль:

А Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ крякозяблы:

ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС компиляции

Π—Π½Π°Ρ‡ΠΈΡ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строки ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, отличаСтся ΠΎΡ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Windows.

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ нСсколько способов ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. ΠšΡΡ‚Π°Ρ‚ΠΈ, Ссли для запуска ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Java Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ NetBeans, Ρ‚ΠΎ ΠΎΠ½ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строки Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅. Π’ Linux эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅ отсутствуСт. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° врСмя, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ смСна ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Windows Π½Π΅ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Π»Π°ΡΡŒ послС закрытия ΠΈ открытия ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΌΠΎΠΆΠ½ΠΎ внСсти измСнСния Π² рССстр Windows. Для этого Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Win+x, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Β«Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΒ», Π² ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠ΅Π΅ΡΡ ΠΎΠΊΠ½ΠΎ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ regedit. Π’ ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠ΅ΠΉΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рССстра Windows) ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun] ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ (ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° @chcp 65001>nul

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

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

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