Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c

ΠšΡ€Π°Π΄ΡƒΡ‰ΠΈΠΉΡΡ Ρ‚ΠΈΠ³Ρ€, Π·Π°Ρ‚Π°ΠΈΠ²ΡˆΠΈΠΉΡΡ Π΄Ρ€Π°ΠΊΠΎΠ½

Java vs. C#… Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ Π²Π΅Ρ‡Π½ΠΎΠ³ΠΎ спора? НСт, данная ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ посвящСна ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌΡƒ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΡƒ, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ являСтся holy war, Π½Π΅ стоит Π΄Π°ΠΆΠ΅ вопрос: Β«ΠΊΡ‚ΠΎ ΠΊΡ€ΡƒΡ‡Π΅Β».

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ сущСствуСт свой инструмСнт. Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ C# ΠΈ Ruby, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла, Ρ‚.ΠΊ. ΠΈΡ… Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½ΠΎΠ΅, Π΄Π° ΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅. Однако ΠΈΠΌΠ΅Π½Π½ΠΎ C# ΠΈ Java ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΈΠΌΠΈ ΠΏΠΎ своСй философии.

ΠžΡ‡Π΅Π½ΡŒ часто ΠΊΠΎΠ»Π»Π΅Π³ΠΈ, ΠΏΠΈΡˆΡƒΡ‰ΠΈΠ΅ Π½Π° Java, Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°ΡŽΡ‚ ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… (. ) Π²Π΅Ρ‰Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдоставляСт (ΠΈΠ»ΠΈ, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π½Π΅ прСдоставляСт) C#.

Если Π’Π°ΠΌ интСрСсно ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° C# ΠΈ Java Π±Π΅Π· ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΌΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ устройство Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ возмоТности, Ρ‚ΠΎΠ³Π΄Π° Π²ΠΏΠ΅Ρ€Π΅Π΄.

β–Œ НСмного истории

Π―Π·Ρ‹ΠΊ C# появился Π² 2001 Π³ΠΎΠ΄Ρƒ, Π° Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±Ρ‹Π»Π° Π½Π°Ρ‡Π°Ρ‚Π° Π΅Ρ‰Π΅ Π² 1999 Π³Π³. Π’ΠΎΠ³Π΄Π° ΠΎΠ½ Π±Ρ‹Π» вСсьма схоТ с Java 1.4. Однако соврСмСнный C#, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, слСдуСт Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ с вСрсии 2.0 (Ρ‡Ρ‚ΠΎ соотвСтствуСт Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° Java 5).

Π‘Ρ‹Ρ‚ΡƒΠ΅Ρ‚ ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ C# ΠΌΠ½ΠΎΠ³ΠΎΠ΅ заимствуСт ΠΈΠ· Java. Однако я катСгоричСски Π½Π΅ согласСн с этим. По-ΠΌΠΎΠ΅ΠΌΡƒ мнСнию, C# Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ являСтся C «с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈΒ», ΠΈΠ»ΠΈ ΠΆΠ΅ C++ «с чСловСчСским Π»ΠΈΡ†ΠΎΠΌΒ».

НадСюсь, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΈ Π΄ΠΎΠ²ΠΎΠ΄Ρ‹ Π² Π½Π΅ΠΉ подтвСрдят Π΄Π°Π½Π½ΠΎΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅.
ΠŸΠ΅Ρ€Π΅ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ википСдию я Π½Π΅ Π±ΡƒΠ΄Ρƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сразу ΠΆΠ΅ двинСмся дальшС ΠΈ пройдСмся ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ отличиям ΠΈ прСимущСствам.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ посмотрим Π½Π° возмоТности самих JVM ΠΈ CLR (Common Language Runtime), Π΄Π°Π»Π΅Π΅ ΡƒΠΆΠ΅ рассмотрим синтаксичСский сахар C#.

β–Œ Π­ΠΏΠΈΠ·ΠΎΠ΄ I: Bytecode

CIL (Common Intermediate Language, ΠΎΠ½ ΠΆΠ΅ MSIL, ΠΎΠ½ ΠΆΠ΅ просто IL) – являСтся Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ с ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ (ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ) инструкциями.

Π’Π°ΠΊ, Ссли Π² Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ инструкция для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: fadd – слоТСниС 2-Ρ… float, iadd – слоТСниС 2-Ρ… integer), Ρ‚ΠΎ Π² CIL для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ сущСствуСт лишь ΠΎΠ΄Π½Π° инструкция с ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° инструкция – add, производящая слоТСниС ΠΈ float, ΠΈ integer). Вопрос Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… x86-инструкций лоТится Π½Π° JIT.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ инструкций Ρƒ ΠΎΠ±Π΅ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅. Бравнивая список ΠΊΠΎΠΌΠ°Π½Π΄ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Java ΠΈ CIL, Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ 206 Ρƒ Java, ΠΈ 232 β€” CIL, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Java ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ просто ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

β–Œ Π­ΠΏΠΈΠ·ΠΎΠ΄ III: Generics (parameterized types || parametric polymorphism)

Как извСстно, Π² Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ type erasure, Ρ‚.Π΅. ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° generics обСспСчиваСтся лишь компилятором, Π½ΠΎ Π½Π΅ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠΎΠΌ, ΠΈ послС компиляции информация ΠΎ самом Ρ‚ΠΈΠΏΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступна.

ΠŸΡ€ΠΈ этом вмСсто ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° T создаСтся экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° java.lang.Object.

Π‘ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ ΠΊ Π²ΠΈΠ΄Ρƒ:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, вся ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° бСзопасности Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ.

.NET, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ generics ΠΊΠ°ΠΊ compile-time, Ρ‚Π°ΠΊ ΠΈ run-time.

β–Œ Π­ΠΏΠΈΠ·ΠΎΠ΄ IV: Types

Java являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ОО-языком. Π‘ этим ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΏΠΎΡ€ΠΈΡ‚ΡŒ. И Π²ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ: ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (integer, float ΠΈ Ρ‚.ΠΏ.) Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ java.lang.Object. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ generics Π² Java Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ primitive types.

А вСдь Π² ΠΏΠΎ-настоящСму ОО-языкС everything is object.

Π­Ρ‚ΠΎ Π½Π΅ СдинствСнноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнныС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

C# позволяСт это Π΄Π΅Π»Π°Ρ‚ΡŒ. Имя этим структурам – struct.

Π’Π°ΠΊΠΆΠ΅ generics Π² C# ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ value types (int, float ΠΈ Ρ‚.Π΄.)

Если Π² Java Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

C# позволяСт использованиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

Π˜Ρ‚Π°ΠΊ, value type – Π°Π½Π°Π»ΠΎΠ³ primitive type ΠΈΠ· Java. Однако наслСдуСтся ΠΎΡ‚ System.Object, ΠΆΠΈΠ²Π΅Ρ‚ Π½Π΅ Π² ΠΊΡƒΡ‡Π΅, Π° Π² стСкС (Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ°: располоТСниС value type зависит ΠΎΡ‚ Π΅Π³ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ участии Π² Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΈ автоматичСски происходит boxing).

Reference type – прСдставляСт собой Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ reference types Π² Java.

ΠžΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° C++ ΠΊΠΎΠ΄, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ?

β–Œ Π­ΠΏΠΈΠ·ΠΎΠ΄ V: ВозмоТности C#

Π‘ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ ΠΊ Π²ΠΈΠ΄Ρƒ:

Π”Π΅Π»Π΅Π³Π°Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² C/C++. Однако ΡΠ²Π»ΡΡŽΡ‚ΡΡ типобСзопасными. Π˜Ρ… Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – callback Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π° с событиями.

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊΠΎΡ€Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ отличаСтся ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Da Vinci для Java, Ρ‚.ΠΊ. Π² послСднСм ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ саму VM.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° C#:

Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ? Если Π½Π° C ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (скаТСм float arg1, float arg2), Ρ‚ΠΎ Π² C# β€” это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’ C# Π΄Π΅Π»Π΅Π³Π°Ρ‚Ρ‹ проходят Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ сигнатуры ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π½Π° этапС компиляции, Π½ΠΎ ΠΈ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅.

Бобытия Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ событийно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΈ EventDispatcher’ом, ΠΈΠ»ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ Publisher/Subscriber. Однако нативная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° со стороны языка Π΄Π°Π΅Ρ‚ вСсомыС прСимущСства. Одним ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся Ρ‚ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ.

АнонимныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Тизнь – структура класса остаСтся чистой, Ρ‚.Π΅. Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ лишниС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² самом классС.

ИзмСним Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ опСрациями с использованиСм Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

НС ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ чисто?

Рассмотрим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ лямбда-выраТСния.

Лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” это анонимная функция, которая содСрТит выраТСния ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ Π΄Π΅Ρ€Π΅Π²Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

А ΠΊΠ°ΠΊ ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с событиями? ΠžΡ‡Π΅Π½ΡŒ просто:

Π§Ρ‚ΠΎ ΠΆ, ΠΌΡ‹ сократили ΠΊΠΎΠ΄ Π΅Ρ‰Π΅ большС ΠΈ ΡƒΠΆΠ΅ это становится ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ (. ). Π”Π°, C# являСтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ языком, Ρ‚.ΠΊ. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса.

Лямбда-выраТСния, Π° вмСстС с Π½ΠΈΠΌΠΈ ΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΡ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π±Ρ‹Π»ΠΈ созданы вмСстС с LINQ (Language Integrated Query).

ВсС Π΅Ρ‰Π΅ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с LINQ? Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹ΠΉ MapReduce Π½Π° LINQ?

Или ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ SQL-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ синтаксис:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΈ LINQ (GroupBy().Select().Where() ΠΈ Ρ‚.Π΄.), ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ классы –

Π₯м…что ΠΆΠ΅ Π΅Ρ‰Π΅ здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ? ΠžΡ‚Π²Π΅Ρ‚ прост – мощная систСма Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ².

Π“Π»Π°Π²Π½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ здСсь ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово var. C++ 11 ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ auto.

Π’Π°ΠΊ Π±Π΅Π· Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ² Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

[Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ сгСнСрировал Π·Π° нас компилятор]

Для описания всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй C#, настроСк Π΅Π³ΠΎ компилятора ΠΈ Ρ‚.ΠΏ. Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΠ²ΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ΄Π½Ρƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ.

А ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, C# 5 – ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ доступСн ΠΈ скоро Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ·, добавляСт асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, появившССся Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π² C++ 11!

β–Œ Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

C# ΠΈ Java ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ языками, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ (.NET ΠΈ Java). Как я ΡƒΠΆΠ΅ писал Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ β€” для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ сущСствуСт свой инструмСнт.

C# β€” Π½Π΅ являСтся ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ Java. Π”Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ разрабатывался Π² Microsoft, Π΅Π³ΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ COOL (C-like Object Oriented Language). Бколько Ρ€Π°Π· Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ аналогия с C/C++? ДостаточноС количСство.

НадСюсь, Ρ‡Ρ‚ΠΎ моя ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Ρ€Π΅ΡˆΠΈΡ‚ΡŒ (хотя Π±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ) вопрос разности ΠΈ языков, ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

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

Π§Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Java, Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² C#? [Π·Π°ΠΊΡ€Ρ‹Ρ‚]

Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ этот вопрос? ΠŸΠ΅Ρ€Π΅Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ вопрос Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» сосрСдоточСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

Π’Π°ΠΊ Π²ΠΎΡ‚ сам вопрос: Π° Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Java, Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² C#? ИмСнно ΠΈΠ· синтаксиса, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… удобностСй ΠΈ синтаксичСского сахара.

Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c. K9VA7. Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c Ρ„ΠΎΡ‚ΠΎ. Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c-K9VA7. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° K9VA7. Java vs. C#… Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ Π²Π΅Ρ‡Π½ΠΎΠ³ΠΎ спора? НСт, данная ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ посвящСна ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌΡƒ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΡƒ, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ являСтся holy war, Π½Π΅ стоит Π΄Π°ΠΆΠ΅ вопрос: Β«ΠΊΡ‚ΠΎ ΠΊΡ€ΡƒΡ‡Π΅Β».

5 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² 5

Π’ основном ΠΏΠΎ Ρ„ΠΈΡ‡Π°ΠΌ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ C# ΠΈΠ΄Ρ‘Ρ‚ Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ Java, Java находится Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π΄ΠΎΠ³ΠΎΠ½ΡΡŽΡ‰Π΅Π³ΠΎ. Однако Π΅ΡΡ‚ΡŒ нСсколько Ρ„ΠΈΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² Java ΠΈ Π½Π΅Ρ‚ Π² C# ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Тизнь программисту.

1) ЛСгковСсныС (Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅) ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы.

Π’ C# Π½Π°Π΄ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс явно. Аналогичная, Π½ΠΎ Π½Π΅ Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½Π°Ρ Ρ„ΠΈΡ‡Π° C# β€” Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ лямбды.

2) НСстатичСскиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы. Π’ C# Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы лишь логичСски находятся Β«Π²Π½ΡƒΡ‚Ρ€ΠΈΒ» ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ доступа ΠΊ instance-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Π’ Java Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы Π±ΠΎΠ»Π΅Π΅ Π±ΠΎΠ³Π°Ρ‚Ρ‹.

3) enum β€˜Ρ‹. Π’ C# ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² C++, ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ сущСству ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ константами цСлочислСнного Ρ‚ΠΈΠΏΠ°. Π’ Java enum β€˜Ρ‹ Π΅ΡΡ‚ΡŒ константы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π±ΠΎΠ³Π°Ρ‚Ρ‹Π΅ сСмантичСски.

4) checked exceptions. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ€ΠΎΡΠ°ΡŽΡ‚ΡΡ этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Π’ C# Ρ‚Π°ΠΊΠΎΠΉ возмоТности Π½Π΅Ρ‚Ρƒ. (Π₯отя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ C# ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ эта Ρ„ΠΈΡ‡Π° Π½Π΅ Π½ΡƒΠΆΠ½Π° ΠΈ Π΄Π°ΠΆΠ΅ Π²Ρ€Π΅Π΄Π½Π°, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ это Ρ„ΠΈΡ‡Π°, которая Π΅ΡΡ‚ΡŒ Π² Java ΠΈ Π½Π΅Ρ‚ Π² C#.)

6) SoftReference прСдставляСт собой Β«Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽΒ» Π²Π΅Ρ€ΡΠΈΡŽ WeakReference (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² Java): ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, рСфСрСнсируСмыС ΠΈΠΌΠΈ, Π½Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, ΠΏΠΎΠΊΠ° памяти Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚, Π΄Π°ΠΆΠ΅ Ссли Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ Π² процСссС сборки мусора.

7) Π£ Java Π΅ΡΡ‚ΡŒ симпатичныС ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· любого количСства Ρ†ΠΈΠΊΠ»ΠΎΠ² Π·Π° Ρ€Π°Π· ( break ) ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Π²ΠΎ внСшнСм Ρ†ΠΈΠΊΠ»Π΅ ( continue ). Π’Π°ΠΊΠΆΠ΅ break ; ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· любого Π±Π»ΠΎΠΊΠ°, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΠΊΠ»Π° (Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ goto ).

Π‘ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ вСрсии Java 8 добавилось Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ расхоТдСниС:

9) Π£ Java Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ полСзная Ρ„ΠΈΡ‡Π°: default interface implementation, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ mixin’ов: Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ классу, с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π£ C# ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ extension-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² Java ΠΊΠ°ΠΊ Ρ€Π°Π· Π½Π΅Ρ‚) ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹Ρ… интСрфСйсов, Π½ΠΎ Π²Ρ‹ Π½Π΅ смоТСтС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ классС, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΡŒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, Π²Ρ‹Π·ΠΎΠ² Π² случаС C# ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c. d8Z7F. Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c Ρ„ΠΎΡ‚ΠΎ. Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c-d8Z7F. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° d8Z7F. Java vs. C#… Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ Π²Π΅Ρ‡Π½ΠΎΠ³ΠΎ спора? НСт, данная ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ посвящСна ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌΡƒ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΡƒ, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ являСтся holy war, Π½Π΅ стоит Π΄Π°ΠΆΠ΅ вопрос: Β«ΠΊΡ‚ΠΎ ΠΊΡ€ΡƒΡ‡Π΅Β».

Π’ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вСдь Π½ΠΈΠΊΡ‚ΠΎ ΠΌΠΈΠΌΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚.

Π”Π°, linq Π½Π΅Ρ‚, Π½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡ΠΊΡƒ ΠΏΠΎΠ΄Ρ‹ΡΠΊΠ°Ρ‚ΡŒ Π²Ρ€ΠΎΠ΄Π΅ Google Guava, Ссли Π² самом Π΄Π΅Π»Π΅ Ρ‚Π°ΠΊ Π½ΡƒΠΆΠ½ΠΎ. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ запросов ΠΈΠ· Π±Π΄ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. На ΠΌΠΎΠΉ взгляд, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· синтаксис языка Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ liq, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ: парсим ΠΎΠ΄ΠΈΠ½ синтаксис, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π΄Ρ€ΡƒΠ³ΠΎΠΉ исполняСм.

Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅

C# сильнСС ΠΊΠ°ΠΊ язык: Π² Java Π½Π΅Ρ‚ практичСски Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² C#. Как язык, Java отстал ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ находится Π² Ρ€ΠΎΠ»ΠΈ Π΄ΠΎΠ³ΠΎΠ½ΡΡŽΡ‰Π΅Π³ΠΎ. НовыС возмоТности Π½Π°Ρ‚Ρ‹ΠΊΠ°ΡŽΡ‚ΡΡ Π½Π° нСсмСтноС число ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, унаслСдованных ΠΈΠ·-Π·Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости. Одна ΠΈΠ· критичСских ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” type erasure.

Java сильнСС ΠΊΠ°ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°: для C# Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ количСства Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠ°ΠΊ для Java. Java Π³ΠΎΡ€Π°Π·Π΄ΠΎ популярнСС Π² ΠΎΠΏΠ΅Π½-сорсС. Разрабатывая Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ популярныС Π²Π΅Ρ‰ΠΈ, Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ, Π½ΠΎ Ссли Π·Π°ΠΊΠ°ΠΏΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² экзотику, Ρ‚ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° вСсьма ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΠ°.

РаньшС C# Π±Ρ‹Π» ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ со всСх сторон ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ΅Π·Π΄ ΡƒΡˆΡ‘Π», поэтому Ρ€Π°Π·Ρ€Ρ‹Π² Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ опСнсорсного сообщСства Π½Π΅ сократится Π½ΠΈΠΊΠΎΠ³Π΄Π°. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Java ΠΊΠ°ΠΊ язык Ρ‚ΠΎΠΆΠ΅ ΡƒΠΆΠ΅ Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ спасти, ΠΈΠ±ΠΎ обратная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ β€” святая ΠΊΠΎΡ€ΠΎΠ²Π°.

Если ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ стоит Π²Ρ‹Π±ΠΎΡ€ Β«C# ΠΈΠ»ΠΈ JavaΒ», Ρ‚ΠΎ всё просто:

ΠŸΡ€ΠΎ Ρ„ΠΈΡ‡ΠΈ

Достаточно ΠΏΠΎΠ³Π»ΡΠ΄Π΅Ρ‚ΡŒ Comparison of C# and Java, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΠ°ΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ языками. НС Π²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π”ΠΆΠ°Π²Π° сильна ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·ΠΌΠΎΠΌ β€” ΠΎΠ½ΠΈ Π²Ρ€ΡƒΡ‚ (ΠΈΠ»ΠΈ просто ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ конструкции, ΠΊΠΎΠ³Π΄Π° достаточно ΠΎΠ΄Π½ΠΎΠΉ строчки).

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ постС Ρ„ΠΈΡ‡ΠΈ β€” это ΠΈΠ»ΠΈ ΠΎΠ±ΠΌΠ°Π½, ΠΈΠ»ΠΈ Π½Π΅Π·Π½Π°Π½ΠΈΠ΅, ΠΈΠ»ΠΈ манипуляция.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ„ΠΈΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² C#, Π½ΠΎ Π΅ΡΡ‚ΡŒ Π² Java:

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ, всё. Если ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² C#, Π½ΠΎ Π½Π΅Ρ‚ Π² Java, Ρ‚ΠΎ список получится Π½Π΅ΠΏΠΎΠΌΠ΅Ρ€Π½ΠΎ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ.

РазумССтся, Π΄Π°ΠΆΠ΅ Π² условиях ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΠ³ΠΎ отставания Π΄ΠΆΠ°Π²Ρ‹ дТависты Π½Π΅ хотят ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ распространСниС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ языки Π½Π° JVM, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Kotlin ΠΈ Scala. Π’ Ρ‡Ρ‘ΠΌ-Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΡ‰Π½Π΅Π΅ C#, Π½ΠΎ ΠΏΠΎ популярности ΠΎΠ½ΠΈ сильно ΡƒΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΎΠ±ΠΎΠΈΠΌ языкам, ΠΈ Ρƒ Π½ΠΈΡ… свои ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π£ Kotlin Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Π΅ ΡˆΠ°Π½ΡΡ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΡ‚ Google Π½Π° Android.

По популярности Π² энтСрпрайзС языки ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅. Π”Π΅Ρ‚Π°Π»ΠΈ зависят ΠΎΡ‚ области Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ страны проТивания.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅ ΠΎΡ‚ программирования, Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ C#. Если для вас ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅Π½ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ Ρ€Π΅Π΄ΠΊΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‚ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Java, Π½ΠΎ ΠΏΠΎ возмоТности ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° Kotlin. Если ΠΆΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠΎΠΏΠ°Ρ‚ΡŒΡΡ Π²ΠΎ всём, Ρ‚ΠΎ ΠΌΠΎΡ€Π°Π»ΡŒΠ½ΠΎ Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ΡΡŒ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Ρƒ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π΅Ρ‰Ρ‘ нСсколько языков Ρ‚ΠΈΠΏΠ° JavaScript (вСсь Π²Π΅Π± Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π° Π½Ρ‘ΠΌ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ Java), Python (ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных языков для связки инструмСнтария) ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ….

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

Π›ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚: ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° C ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Java

Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c. vn27lubocfjfz oiaqgsy7eig5o. Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c Ρ„ΠΎΡ‚ΠΎ. Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c-vn27lubocfjfz oiaqgsy7eig5o. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² java Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² c. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° vn27lubocfjfz oiaqgsy7eig5o. Java vs. C#… Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ Π²Π΅Ρ‡Π½ΠΎΠ³ΠΎ спора? НСт, данная ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ посвящСна ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌΡƒ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΡƒ, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ являСтся holy war, Π½Π΅ стоит Π΄Π°ΠΆΠ΅ вопрос: Β«ΠΊΡ‚ΠΎ ΠΊΡ€ΡƒΡ‡Π΅Β».

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ Π°Π²Ρ‚ΠΎΡ€Π° – заядлого программиста ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ послС ΠΌΠ½ΠΎΠ³ΠΎΠ»Π΅Ρ‚Π½Π΅Π³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° языкС Π‘ (ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° Π‘++) довСлось ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌ Java-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО для Π’Π’-приставок ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Android. Π’ Ρ…ΠΎΠ΄Π΅ этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎΠ± интСрСсных различиях языков Java ΠΈ C/C++, ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ написанию ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π‘Ρ‚Π°Ρ‚ΡŒΡ Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π° Ρ€ΠΎΠ»ΡŒ справочника, Π² Π½Π΅ΠΉ Π½Π΅ рассматриваСтся ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π­Ρ‚ΠΎ скорСС сборник Π»ΠΈΡ‡Π½Ρ‹Ρ… наблюдСний. Если Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ½ΠΎΠ΅, Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ вСрсии Java SE 7.

Различия Π² синтаксисС ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ конструкции

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎ – различия ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅, синтаксис ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ. Π‘Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠ°Ρ€ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок <>. ΠŸΡ€Π°Π²ΠΈΠ»Π° составлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² – Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ для языка C/Π‘++. Бписок ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² языкС C/Π‘++. ВстроСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… – ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π² C/Π‘++. ΠœΠ°ΡΡΠΈΠ²Ρ‹ – всС Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок.

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ конструкции if-else, while, do-while, for, switch Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π² Java ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ C-программистам ΠΌΠ΅Ρ‚ΠΊΠΈ (Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом goto ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… катСгоричСски Π½Π΅ рСкомСндуСтся). Однако ΠΈΠ· Java ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° ΠΌΠ΅Ρ‚ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ goto. ΠœΠ΅Ρ‚ΠΊΠΈ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ²:

Для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ читаСмости ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Java Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° интСрСсная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ разряды Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… чисСл символом подчСркивания:

Π’Π½Π΅ΡˆΠ½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Java Π½Π΅ сильно отличаСтся ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π·Π½Π°ΠΊΠΎΠΌΠΎΠΌ C. Π“Π»Π°Π²Π½ΠΎΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ – Java Π½Π΅ допускаСт «свободно» располоТСнных Π² исходном Ρ„Π°ΠΉΠ»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (структур), констант ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ. Java – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык, поэтому всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ сущности Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ классу. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ – отсутствиС прСпроцСссора. Об этих Π΄Π²ΡƒΡ… различиях ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассказано Π½ΠΈΠΆΠ΅.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² языкС C

Когда ΠΌΡ‹ пишСм Π½Π° языкС C большиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎ сути Π½Π°ΠΌ приходится Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Роль ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° здСсь выполняСт структура, которая описываСт Π½Π΅ΠΊΡƒΡŽ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Β«Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°Β»:

Π’Π°ΠΊΠΆΠ΅ Π² C Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²Β»-структур – Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Однако Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ сути Π½Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π”Π°, ΠΈΡ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ», Π½ΠΎ Π² Β«Ρ‚ΠΈΠΏΠΎΠ²ΡƒΡŽΒ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌΒ» ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС выдСлСния памяти для Π΅Π³ΠΎ хранСния:

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β» ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΅Π³ΠΎ использованиСм:

Π’ΠΎΠ³Π΄Π° ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β» Π² C ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ пСрСчислим Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹ программистом Π² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β»:

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Java

Π‘Ρ‚Π°Π»ΠΊΠΈΠ²Π°ΡΡΡŒ с ООП – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π²Ρ‹ навСрняка ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΊΠΈΡ‚ΠΎΠ² ООП – инкапсуляции. Π’ Java, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ C, Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ вмСстС ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой «истинныС» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ООП это Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ инкапсуляциСй. Класс – это описаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, блиТайший Π°Π½Π°Π»ΠΎΠ³ класса Π² C – ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ typedef struct. Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Java Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ классу, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ.

Π’ основС ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠΈ языка Java Π»Π΅ΠΆΠΈΡ‚ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ «всС Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Java Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), Ρ‚Π°ΠΊ ΠΈ поля Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅) ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ класса. Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ main(), с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· классов.

ОписаниС класса Π² Java – это Π°Π½Π°Π»ΠΎΠ³ объявлСния структуры Π² C. Описав класс, Π²Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ создаСтС Π² памяти. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса появляСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ своСго создания ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Java – это Π°Π½Π°Π»ΠΎΠ³ выдСлСния памяти Π² языкС C, Π½ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ послСднСго, Π²ΠΎ врСмя создания автоматичСски вызываСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ – конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π±Π΅Ρ€Π΅Ρ‚ Π½Π° сСбя Ρ€ΠΎΠ»ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° – Π°Π½Π°Π»ΠΎΠ³ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ init(), рассмотрСнной Ρ€Π°Π½Π΅Π΅. Имя конструктора ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Java выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ошибок Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Java Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС, Ρ‡Π΅ΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C. Π”Π°, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ использованиСм (Ρ‡Ρ‚ΠΎ Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΌΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ NullPointerException), Π½ΠΎ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ касаСтся ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ошибок, присущих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π½Π° C, ситуация ΠΊΠΎΡ€Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ мСняСтся:

ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΈ сборщик мусора

Π’ Java сохранСны Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ C/C++-программисту понятия ΠΊΡƒΡ‡ΠΈ ΠΈ стСка. ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° заимствуСтся ΠΈΠ· ΠΊΡƒΡ‡ΠΈ. Однако ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ссылка – Π°Π½Π°Π»ΠΎΠ³ указатСля), Ссли созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, размСщаСтся Π² стСкС. Π’ ΠΊΡƒΡ‡Π΅ хранятся Β«Ρ‚Π΅Π»Π°Β» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Π² стСкС – Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Если ΠΊΡƒΡ‡Π° сущСствуСт Π½Π° протяТСнии выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ доступна для всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ стСк относится ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΈ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя Π΅Π³ΠΎ выполнСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ нСдоступСн для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ Java Π½Π΅Ρ‚ нСобходимости ΠΈ Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ – нСльзя Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π­Ρ‚Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ выполняСт сборщик мусора Π² автоматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π‘Ρ€Π΅Π΄Π° выполнСния слСдит, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ мСста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΊΡƒΡ‡Π΅, пСрСходя ΠΏΠΎ ссылкам ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Если Π½Π΅Ρ‚ – Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ признаСтся «мусором» ΠΈ становится ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠΌ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅.

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ само ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ происходит Π½Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «пСрСстал Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠΆΠ΅Π½Β» – Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ сборщик мусора, ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

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

Говоря ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, слСдуСт Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Java ΠΊ ΠΈΡ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Если Π² C/C++ нСинициализированная локальная пСрСмСнная содСрТит случайноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ компилятор Java попросту Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ:

Бсылки – Π·Π°ΠΌΠ΅Π½Π° указатСлям

Π’ Java ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, соотвСтствСнно Ρƒ Java-программиста Π½Π΅Ρ‚ возмоТности ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· мноТСства ошибок, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с указатСлями. Когда Π²Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ссылку Π½Π° этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

Π’ языкС C Ρƒ программиста Π±Ρ‹Π» Π²Ρ‹Π±ΠΎΡ€: ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ, скаТСм, структуру Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. МоТно Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ:

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»Π°, Ρ‡Ρ‚ΠΎ функция Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² структурС, Π½ΠΎ Π±Ρ‹Π»Π° нСэффСктивной с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния быстродСйствия – Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создавалась копия структуры. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивна: фактичСски Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдавался адрСс Π² памяти, Π³Π΄Π΅ располоТСна структура.

БСзусловно отсутствиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²Ρ‹Ρ… ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ошибок, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² языкС остался Π°Π½Π°Π»ΠΎΠ³ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля – нулСвая ссылка, обозначаСмая ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом null.

НулСвая ссылка – это головная боль Java-программиста, Ρ‚.ΠΊ. Π²Ρ‹Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π΅ Π½Π° null, Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ NullPointerException. Если этого Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΊΡ€Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π˜Ρ‚Π°ΠΊ, всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Java ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ссылки. ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΆΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… (int, long, char. ) – ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°Ρ… – Π½ΠΈΠΆΠ΅).

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ссылок Π² Java

Доступ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· ссылку – это ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сказываСтся Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ прСподнСсти ΡΡŽΡ€ΠΏΡ€ΠΈΠ· Π½ΠΎΠ²ΠΈΡ‡ΠΊΡƒ:

АргумСнты ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния – всС пСрСдаСтся Ρ‡Π΅Ρ€Π΅Π· ссылку. ΠšΡ€ΠΎΠΌΠ΅ прСимущСств Π² этом кроСтся нСдостаток ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с языками C/Π‘++, Π³Π΄Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ явно Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ° const:

Π’ΠΎ Π΅ΡΡ‚ΡŒ язык C позволяСт ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ Π½Π° этапС компиляции. Π’ Java Ρ‚Π°ΠΊ ΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово const, Π½ΠΎ ΠΎΠ½ΠΎ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… вСрсий ΠΈ сСйчас Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π•Π³ΠΎ Ρ€ΠΎΠ»ΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни ΠΏΡ€ΠΈΠ·Π²Π°Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово final. Однако ΠΎΠ½ΠΎ Π½Π΅ позволяСт Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

ВсС Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово final Π² Π΄Π°Π½Π½ΠΎΠΌ случаС примСняСтся ΠΊ ссылкС, Π° Π½Π΅ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ эта ссылка ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚. Если ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ final ΠΊ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρƒ, Ρ‚ΠΎ компилятор Π²Π΅Π΄Π΅Ρ‚ сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΈ оТидаСтся:

Бсылки Java ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ссылки языка C++.

ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Java

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Java ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΠΎΠ»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… содСрТит Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚ прСдставлСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚ΠΎ Π² случаС массива Π±Π°ΠΉΡ‚ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы памяти ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ объСм.
Π§Ρ‚ΠΎΠ±Ρ‹ Java ΠΎΡΡ‚Π°Π²Π°Π»Π°ΡΡŒ достаточно эффСктивной ΠΈ Π² случаях, описанных Π²Ρ‹ΡˆΠ΅, Π² язык Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² – ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π’ΠΈΠ΄Π Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ, Π±ΠΈΡ‚Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ Π² C
byteЦСлочислСнныС8char
short16short
char16wchar_t
int32int (long)
long64long
floatЧисла с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ32float
double64double
booleanЛогичСский—int (C89) / bool (C99)

ВсС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ свои Π°Π½Π°Π»ΠΎΠ³ΠΈ Π² языкС C. Однако стандарт C Π½Π΅ опрСдСляСт Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ², вмСсто этого фиксируСтся Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ программист Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Ρ€Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ для Ρ€Π°Π·Π½Ρ‹Ρ… машин, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ появлСнию Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ uint32_t, хотя всС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚Π°ΠΊΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° int.
Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ Π½ΠΈΠΊΠ°ΠΊ нСльзя отнСсти ΠΊ прСимущСствам языка.

ЦСлочислСнныС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Π² Java, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ C, ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ€Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ разрядности ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ порядкС Π±Π°ΠΉΡ‚ («сСтСвой» ΠΈΠ»ΠΈ «интСловский»). Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ «написано ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ – выполняСтся Π²Π΅Π·Π΄Π΅Β».

ΠšΡ€ΠΎΠΌΠ΅ этого, Π² Java всС цСлочислСнныС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ – Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ (Π² языкС отсутствуСт ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово unsigned). Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ трудности ΠΏΡ€ΠΈ совмСстном использовании Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄Π½ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, присущиС языку C.

Π’ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅, порядок Π±Π°ΠΉΡ‚ Π² ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°Ρ… Π² Java фиксированный (младший Π±Π°ΠΉΡ‚ ΠΏΠΎ ΠΌΠ»Π°Π΄ΡˆΠ΅ΠΌΡƒ адрСсу, Little-endian, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ порядок).

К нСдостаткам Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ Π² Java ΠΌΠΎΠΆΠ½ΠΎ отнСсти Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ здСсь, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C/C++, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ разрядной сСтки, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ этом Π½Π΅ возбуТдаСтся:

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π½Π½Ρ‹Π΅ Π² Java прСдставлСны двумя Π²ΠΈΠ΄Π°ΠΌΠΈ сущностСй: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ. ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ «всС Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β», Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях слишком эффСктивны, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

НаслСдованиС

НаслСдованиС являСтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΈΡ‚ΠΎΠΌ ООП, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ навСрняка ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ. Если ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π½Π° вопрос Β«Π·Π°Ρ‡Π΅ΠΌ наслСдованиС Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎΒ», Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Β«ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π°Β».

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

Java ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык позволяСт Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ классов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° наслСдования:

НСобходимо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Java Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ Ρ€Π°Π·Π΅ Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠ°ΠΊ способ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΡƒΠΆΠ΅ написанных классов. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ситуациях композиция оказываСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ наслСдования.

Благодаря наслСдованию классы Π² Java Π²Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ класс ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ «родитСля» ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ Β«Π΄Π΅Ρ‚Π΅ΠΉΒ». Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ C++, класс Π² Java Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ родитСля (Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Β«Ρ€ΠΎΠΌΠ±ΠΎΠ²ΠΈΠ΄Π½ΠΎΠ³ΠΎ наслСдования»).

ΠŸΡ€ΠΈ наслСдовании ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² своС располоТСниС всС public ΠΈ protected поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ своСго Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса своСго Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования.

На Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования находится ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€Π°Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ всСх Java классов – класс Object, СдинствСнный, ΠΊΡ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ родитСля.

ДинамичСская идСнтификация Ρ‚ΠΈΠΏΠ°

Одним ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² языка Java являСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° динамичСской ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² (RTTI). Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ простыми словами, Ρ‚ΠΎ RTTI позволяСт ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класс Ρ‚Π°ΠΌ, Π³Π΄Π΅ трСбуСтся ссылка Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ:

ИмСя ссылку Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ истинный Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ данная ссылка ссылаСтся – с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° instanceof:

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

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

Π’ Java, ΠΊΠ°ΠΊ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках ООП, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (overriding) ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½ΠΎ связано с наслСдованиСм. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ public- ΠΈ protected-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡ… Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Π½Π΅ мСняя ΠΏΡ€ΠΈ этом Π΅Π³ΠΎ сигнатуру. Для этого достаточно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС ΠΌΠ΅Ρ‚ΠΎΠ΄ с Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ сигнатурой:

ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сигнатура (имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹) с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ совпадали. Если имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° совпадаСт, Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, Ρ‚ΠΎ происходит ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° (overloading) ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΠΈΠΆΠ΅.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

Как инкапсуляция ΠΈ наслСдованиС, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠΈΡ‚ ООП – ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ – Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ΄Π΅ Π°Π½Π°Π»ΠΎΠ³ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС C.

Допустим Ρƒ нас Π΅ΡΡ‚ΡŒ нСсколько «классов»-структур, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ΅ дСйствиС, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ функция, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ это дСйствиС, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ – Π΄ΠΎΠ»ΠΆΠ½Π° Β«ΡƒΠΌΠ΅Ρ‚ΡŒΒ» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ «классом» Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ выглядит Ρ‚Π°ΠΊ:

РСшСниС выглядит Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ, Π½ΠΎ Ρ†Π΅Π»ΡŒ достигнута – ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ функция commonFunc() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β» любого «класса». ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ условиС – «класс»-структура Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ опрСдСляСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ «класс» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ благодаря использованию Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° с Ρ‚ΠΈΠΏΠΎΠΌ Β«void *Β». Однако Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ любого Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«int *Β». Ошибок компиляции это Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚, Π½ΠΎ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя нСпрСдсказуСмо.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ выглядит Π² Java (Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС ООП). ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ мноТСство классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для языка Π‘, прСдставлСнного Π²Ρ‹ΡˆΠ΅, этот ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠžΠ‘Π―Π—ΠΠ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² состав всСх классов Π΄Π°Π½Π½ΠΎΠ³ΠΎ мноТСства, ΠΈ всС Π΅Π³ΠΎ вСрсии ΠžΠ‘Π―Π—ΠΠΠ« ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ сигнатуру.

Π”Π°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ компилятор Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Ρƒ Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, которая ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ классу.

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ executor(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ Β«ΡƒΠΌΠ΅Ρ‚ΡŒΒ» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ классом ΠΈΠ· мноТСства (A, B ΠΈΠ»ΠΈ C). Надо ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Β«ΡΠΊΠ°Π·Π°Ρ‚ΡŒΒ» компилятору, Ρ‡Ρ‚ΠΎ _set_of_class_ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ нашС мноТСство классов. Π—Π΄Π΅ΡΡŒ ΠΈ пригоТдаСтся наслСдованиС – Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всС классы ΠΈΠ· мноТСства ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° любой класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся наслСдником Base (благодаря динамичСской ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°):

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ этому классу.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово abstract позволяСт ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ абстрактным, Π²Ρ‹Ρ€Π°ΠΆΠ°ΡΡΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌΠΈ ООП). ЀактичСски ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ компилятору, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² классах наслСдниках. Если это Π½Π΅ Ρ‚Π°ΠΊ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка компиляции. Класс, содСрТащий хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ абстрактным. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ классы Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом abstract.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Java

Π’ Java всС Ρ„Π°ΠΉΠ»Ρ‹ с исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ *.java. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ *.h, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ классов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ Java Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ класс. Имя класса принято Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ, начиная с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π·Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡˆΠ°Ρ€Π° прСдлагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅Β» Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ имя ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Однако это Π½Π΅ являСтся Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π² локальном ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°.

РСкомСндуСтся Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС. Π’Π°ΠΊ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ классов.

Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ аспСкт инкапсуляции – Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ интСрфСйса ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Если интСрфСйс доступСн для Π²Π½Π΅ΡˆΠ½ΠΈΡ… частСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ классу), Ρ‚ΠΎ рСализация скрыта. Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ часто проводят аналогию с Ρ‡Π΅Ρ€Π½Ρ‹ΠΌ ящиком, ΠΊΠΎΠ³Π΄Π° снаруТи Β«Π½Π΅ Π²ΠΈΠ΄Π½Π°Β» внутрСнняя рСализация, Π½ΠΎ Β«Π²ΠΈΠ΄Π½ΠΎΒ» Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ подаСтся Π½Π° Π²Ρ…ΠΎΠ΄ ящика ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅.

Π’ языкС C сокрытиС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля, помСчая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄Π½Ρ‹ ΠΈΠ·Π²Π½Π΅, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом static. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ интСрфСйс модуля, выносятся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Под ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Π² языкС C понимаСтся ΠΏΠ°Ρ€Π°: Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ *.c ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ *.h.

Π’ Java Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static, Π½ΠΎ ΠΎΠ½ΠΎ Π½Π΅ влияСт Π½Π° Β«Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΒ» ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ поля ΠΈΠ·Π²Π½Π΅. Для управлСния Β«Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽΒ» ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ 3 ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° доступа: private, protected, public.

Поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ private, доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΅Π³ΠΎ самого. Поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ protected доступны Ρ‚Π°ΠΊΠΆΠ΅ наслСдникам класса. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ public ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ элСмСнт доступСн ΠΈΠ·Π²Π½Π΅ класса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ интСрфСйса. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ отсутствиС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, Π² этом случаС доступ ΠΊ элСмСнту класса ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ класс находится.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ Π² процСссС написания класса ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ всС поля класса ΠΊΠ°ΠΊ private ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π° доступа ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ возникновСния нСобходимости.

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Одной ΠΈΠ· Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C являСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ Π·ΠΎΠΎΠΏΠ°Ρ€ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΠΎ сути ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅, Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚ΠΈΠΏΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: fabs(), fabsf(), fabsl() – Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для получСния Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ значСния для double, float ΠΈ long double Ρ‚ΠΈΠΏΠΎΠ² соотвСтствСнно.

Java (Π° Ρ‚Π°ΠΊΠΆΠ΅ Π‘++) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² – Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Ρ‚ΠΈΠΏΠΎΠΌ ΠΈ количСством Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². По количСству Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΈΡ… Ρ‚ΠΈΠΏΡƒ компилятор сам Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ Π½ΡƒΠΆΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ Java Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ C++ нСльзя ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Β«+Β» ΠΈ Β«+=Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ для строк String.

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΠΈ строки Π² Java

Π’ языкС C приходится Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΡƒΠ»ΡŒ-Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ строками, прСдставлСнными указатСлями Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ:

Π’Π°ΠΊΠΈΠ΅ строки обязаны Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом. Если Π΅Π³ΠΎ случайно Β«Π·Π°Ρ‚Π΅Ρ€Π΅Ρ‚ΡŒΒ», Ρ‚ΠΎ строкой Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ Π² памяти Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ символа. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли Π² памяти послС строки Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½ΠΎΠΉ строки ΠΈΡ… значСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ (ΠΈ скорСС всСго Π±ΡƒΠ΄ΡƒΡ‚) искаТСны.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ C-программист Π½Π΅ обязан ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классичСскиС Π½ΡƒΠ»ΡŒ-Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ строки, Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π½ΠΎ Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π² качСствС своих Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠΌΠ΅Π½Π½ΠΎ Π½ΡƒΠ»ΡŒ-Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ строки. ΠšΡ€ΠΎΠΌΠ΅ этого, стандарт C Π½Π΅ опрСдСляСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ, этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ программист.

Π’ Java ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ char (Π° Ρ‚Π°ΠΊΠΆΠ΅ Β«ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ°Β» Character, ΠΎΠ± Β«ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ°Ρ…Β» – Π½ΠΈΠΆΠ΅) ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ символ согласно стандарту Unicode. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° UTF-16, соотвСтствСнно ΠΎΠ΄ΠΈΠ½ символ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² памяти 2 Π±Π°ΠΉΡ‚Π°, Ρ‡Ρ‚ΠΎ позволяСт Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ практичСски всС символы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² настоящСС врСмя языков.

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΈΡ… Unicode:

Если Unicode символа ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ 216 для Ρ‚ΠΈΠΏΠ° char, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ символ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ прСдставлСн Ρ‚ΠΈΠΏΠΎΠΌ int. Π’ строкС ΠΆΠ΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ 2 символа ΠΏΠΎ 16 Π±ΠΈΡ‚, Π½ΠΎ ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ символы с ΠΊΠΎΠ΄ΠΎΠΌ, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰Π΅ΠΌ 216, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Java Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ встроСнным классом String ΠΈ хранят 16-Π±ΠΈΡ‚Π½Ρ‹Π΅ символы char. Π’ классС String собрано всС ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ всС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками. Π—Π΄Π΅ΡΡŒ Π½Π΅ Π½Π°Π΄ΠΎ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ строка Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½ΡƒΠ»Π΅ΠΌ, здСсь Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Β«Π·Π°Ρ‚Π΅Ρ€Π΅Ρ‚ΡŒΒ» этот Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΉ символ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ памяти Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ строки. И Π²ΠΎΠΎΠ±Ρ‰Π΅, работая со строками Π² Java, программист Π½Π΅ задумываСтся ΠΎ Ρ‚ΠΎΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ строка хранится Π² памяти.

Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Java Π½Π΅ допускаСт ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² (ΠΊΠ°ΠΊ Π² Π‘++), ΠΎΠ΄Π½Π°ΠΊΠΎ класс String являСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅Π³ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ слияния строк Β«+Β» ΠΈ Β«+=Β».

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ строки Π² Java Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ – Π±ΡƒΠ΄ΡƒΡ‡ΠΈ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· созданы, ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ своСго измСнСния. Когда ΠΌΡ‹ пытаСмся ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ строку, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

TΠΎ исходная строка Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ мСняСтся. ВмСсто этого создаСтся измСнСнная копия исходной строки, которая Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ являСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ строки Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ оборачиваСтся созданиСм Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π½Π° самом Π΄Π΅Π»Π΅ Π² случаях слияния строк компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс StringBuilder, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ рассказано ΠΏΠΎΠ·ΠΆΠ΅).

Π‘Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ часто ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ строку. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π² цСлях ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ быстродСйствия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ потрСблСния памяти ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ созданиС Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²-строк. Для этих Ρ†Π΅Π»Π΅ΠΉ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс StringBuilder:

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ стоит ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ сравнСнии строк. Випичная ошибка Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ Java-программиста, это сравнСниС строк с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«==Β»:

Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ содСрТит ошибок Π½Π° стадии компиляции ΠΈΠ»ΠΈ ошибок Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ½ ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ это ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ строки, Π² Ρ‚ΠΎΠΌ числС Π² Java, прСдставлСны ссылками, Ρ‚ΠΎ сравнСниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Β«==Β» Π΄Π°Π΅Ρ‚ сравнСниС ссылок, Π° Π½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ true Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли 2 ссылки Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ строку. Если ΠΆΠ΅ строки – Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² памяти, ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΈΡ… содСрТимоС, Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ equals():

Π‘Π°ΠΌΠΎΠ΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях сравнСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«==Β» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ:

Π’Π°ΠΊ происходит ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ссылки someString ΠΈ anotherString ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ Π² ΠΏΡƒΠ» строк – происходит Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ появляСтся Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ссылка Π½Π° строку ΠΈΠ· ΠΏΡƒΠ»Π°. Π˜Π½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк ΠΊΠ°ΠΊ Ρ€Π°Π·-Ρ‚Π°ΠΊΠΈ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ благодаря свойству нСизмСнности строк.

Π₯отя сравнСниС содСрТимого строк допускаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ equals(), Π² Java Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ строки Π² switch-case конструкциях (начиная с вСрсии Java 7):

Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Java ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² строку. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ toString() ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ для всСх классов классС Object.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡ Π½Π° C, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок. КаТдая функция ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ int. Если функция Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ этот Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π²Π΅Π½ 0. Если ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ нуля – это ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎΠ± ошибкС. Π§Π°Ρ‰Π΅ всСго ΠΊΠΎΠ΄ ошибки ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ функция ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ лишь ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ ΠΎΠ½ΠΎ ΡƒΠΆΠ΅ занято ΠΊΠΎΠ΄ΠΎΠΌ ошибки, Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ приходится Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² Π²ΠΈΠ΄Π΅ указатСля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

ΠšΡΡ‚Π°Ρ‚ΠΈ, это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· случаСв, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² использовании указатСля Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

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

Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C ΠΊΠΎΠ΄, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Β«ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽΒ» Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΈ ΠΊΠΎΠ΄, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΠΆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, Ρ‡Ρ‚ΠΎ явно Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ.

Π’ Java ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹, описанныС Π²Ρ‹ΡˆΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ здСсь ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΈΠ½ΠΎΠΉ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ошибками – ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π² C++). ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² этом случаС Β«ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉΒ» ΠΊΠΎΠ΄ ΠΈ ΠΊΠΎΠ΄, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок ΠΈ Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… ситуаций, логичСски ΠΎΡ‚Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

ДостигаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкций try-catch: Π² сСкции try размСщаСтся Β«ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉΒ» ΠΊΠΎΠ΄, Π° Π² сСкции catch – ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок.

Π‘Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² мСстС Π΅Π΅ возникновСния Π½Π΅ прСдставляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π² сигнатуру ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π·ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°ΠΌΠ»Π΅Π½ Π² Π±Π»ΠΎΠΊ try-catch, ΠΈΠ»ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ прСпроцСссора

Как Π±Ρ‹ Π½ΠΈ Π±Ρ‹Π» ΡƒΠ΄ΠΎΠ±Π΅Π½ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ C/C++-программистам прСпроцСссор, Π² языкС Java ΠΎΠ½ отсутствуСт. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Java вСроятно Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для обСспСчСния пСрСносимости ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π° Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Java выполняСтся Π²Π΅Π·Π΄Π΅ (ΠΏΠΎΡ‡Ρ‚ΠΈ) Ρ‚ΠΎ ΠΈ прСпроцСссор Π² Π½Π΅ΠΉ Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

ΠšΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ отсутствиС прСпроцСссора ΠΌΠΎΠΆΠ½ΠΎ использованиСм статичСского поля-Ρ„Π»Π°Π³Π° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π³Π΄Π΅ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Если ΠΆΠ΅ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΠ± ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстирования, Ρ‚ΠΎ здСсь Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Π² совокупности с ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (рСфлСксиСй).

Массив – это Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами Π½Π° C, Π²Ρ‹Ρ…ΠΎΠ΄ индСкса Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива прСдставляСт собой ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΠ²Π°Ρ€Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½ΠΈ ΠΊΠΎΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ сообщит ΠΎ Π½Π΅ΠΉ, Π° Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ остановлСна с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ сообщСниСм:

Π‘ΠΊΠΎΡ€Π΅Π΅ всСго ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Π»Π°ΡΡŒ слСдом Π·Π° массивом array Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅, окаТСтся искаТСнным. ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ошибки ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ простым Π΄Π΅Π»ΠΎΠΌ.

Π’ языкС Java программист Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° труднодиагностируСмых ошибок. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива возбуТдаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ArrayIndexOutOfBoundsException. Если Π½Π΅ Π±Ρ‹Π» Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкции try-catch, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Π° Π² стандартный ΠΏΠΎΡ‚ΠΎΠΊ ошибок отправляСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»Π° с исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° строки, Π³Π΄Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива. Π’ΠΎ Π΅ΡΡ‚ΡŒ диагностика ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ошибок становится Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ.

Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стало Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ массив Π² Java прСдставлСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Массив Java Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ТСстко задаСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выдСлСния памяти. Π’ΠΎ врСмя выполнСния ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΡ€ΠΎΡ‰Π΅ простого:

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивах, Ρ‚ΠΎ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с языком C Π² Java открываСтся интСрСсная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ «лСстничныС» массивы. Для случая Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строки ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…:

Как ΠΈ Π² C, элСмСнты массива Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² памяти ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ, поэтому доступ ΠΊ массиву считаСтся самым эффСктивным. Если ΠΆΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вставки/удалСния элСмСнтов, ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС структуры Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ мноТСство (Set), список (List), ΠΊΠ°Ρ€Ρ‚Π° (Map).

Π—Π° отсутствиСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ссылки доступ ΠΊ элСмСнтам массива Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСксов.

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

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

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ C, стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java содСрТит Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ динамичСских структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, Π²Ρ‹Ρ€Π°ΠΆΠ°ΡΡΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌΠΈ Java. ВсС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ дСлятся Π½Π° 3 Π±ΠΎΠ»ΡŒΡˆΠΈΡ… класса: списки, мноТСства ΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹.

Бписки – динамичСскиС массивы – ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ/ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ порядка Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… элСмСнтов, Π½ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ отсутствиС Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² элСмСнтов. ΠšΠ°Ρ€Ρ‚Ρ‹ ΠΈΠ»ΠΈ ассоциативныС массивы ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠΈ Β«ΠΊΠ»ΡŽΡ‡ – Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β», ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ – Π² ΠΊΠ°Ρ€Ρ‚Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ 2 ΠΏΠ°Ρ€Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ.

Для списков, мноТСств ΠΈ ΠΊΠ°Ρ€Ρ‚ сущСствуСт мноТСство Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. НапримСр, списки Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ классами ArrayList ΠΈ LinkedList, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ArrayList обСспСчиваСт Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ доступС ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ элСмСнту, Π° LinkedList – Π±ΠΎΠ»Π΅Π΅ эффСктивСн ΠΏΡ€ΠΈ вставкС/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов Π² сСрСдину списка.

Π’ коллСкциях ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ Java-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (фактичСски – ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), поэтому ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСпосрСдствСнно ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² (int, char, byte ΠΈ Π΄Ρ€.) нСльзя. Π’ этом случаС слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ классы-Β«ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈΒ»:

ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠšΠ»Π°ΡΡ-Β«ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ°Β»
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, программируя Π½Π° Java, Π½Π΅Ρ‚ нСобходимости ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ совпадСниСм ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ Π΅Π³ΠΎ Β«ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈΒ». Если ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΈΠΏΠ° Integer, Ρ‚ΠΎ Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ int. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π³Π΄Π΅ трСбуСтся Ρ‚ΠΈΠΏ int, смСло ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Integer. Π­Ρ‚ΠΎ стало Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ благодаря Π½Π°Π»ΠΈΡ‡ΠΈΡŽ Π² Java встроСнного ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ/распаковки ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ².

Из нСприятных ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² слСдуСт ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java содСрТит старыС классы ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… вСрсиях Java ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ классах Enumeration, Vector, Stack, Dictionary, Hashtable, Properties.

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΡƒΡ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π² этом случаС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π·Π°Π΄Π°Π΅ΠΌ основной Ρ‚ΠΈΠΏ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ArrayList, Π° Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ‚ΠΈΠΏ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС опрСдСляСт Ρ‚ΠΈΠΏ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π² спискС элСмСнтов:

Π­Ρ‚ΠΎ позволяСт компилятору ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ добавлСния Π² Ρ‚Π°ΠΊΠΎΠΉ список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π΅ΠΆΠ΅Π»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€:

ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚ΠΈΠΏ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ стираСтся, ΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Как слСдствиС Π½Π΅Ρ‚ возмоТности ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Частичным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ:

Но Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ сработаСт, Ссли список пуст.

Π’ этом ΠΏΠ»Π°Π½Π΅ обобщСния Java Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ обобщСниям C++. ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Java фактичСски слуТат для «отсСчСния» части ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок Π½Π° стадии компиляции.

ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх элСмСнтов массива ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡ Π½Π° Π‘ часто приходится ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС элСмСнты массива:

ΠžΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ здСсь ΠΏΡ€ΠΎΡ‰Π΅ простого, достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива SIZE ΠΈΠ»ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Β«

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

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

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