Что такое Java и зачем он нужен

Про­грам­ми­сты Java ценят­ся, они дела­ют слож­ные про­ек­ты, осо­бен­но их любят в сре­де раз­ра­бот­ки под Android и в раз­лич­ных кор­по­ра­тив­ных сфе­рах. Вот что это за язык и поче­му его сто­ит изу­чать.

Глав­ное — крат­ко:

  • Мно­го­плат­фор­мен­ность. Рабо­та­ет на огром­ном коли­че­стве опе­ра­ци­о­нок и желе­за.
  • ООП. Для тех, кто любит чёт­кие струк­ту­ры и раз­гра­ни­че­ние дан­ных.
  • Боль­шое сооб­ще­ство и мно­го уже напи­сан­но­го кода. Нет про­блем с рабо­той и с гото­вы­ми реше­ни­я­ми.

Мину­сы — тоже крат­ко:

  • Не хва­та­ет ско­ро­сти. Ино­гда это кри­тич­но.
  • Мно­го­слов­ный код. Там, где С++ исполь­зу­ет одну коман­ду, Java тре­бу­ет пять.

Виртуальная машина

Допу­стим, у нас есть некий код на язы­ке Java. Пока неваж­но, что там за син­так­сис, как устро­е­ны клас­сы и т. д. Про­сто код. Как его испол­нить?

Если бы это был язык типа C++, нам нуж­но было бы ском­пи­ли­ро­вать его под тре­бу­е­мое желе­зо или опе­ра­ци­он­ную систе­му. Ском­пи­ли­ро­вать — то есть пре­об­ра­зо­вать понят­ный нам код в понят­ные про­цес­со­ру инструк­ции. Так как про­цес­со­ров мно­го, ком­пи­ли­ро­вать нуж­но будет по-разному. Плюс в раз­ных опе­ра­ци­он­ных систе­мах по-разному устро­е­ны ком­по­нен­ты, кноп­ки, рабо­та с сетью и т. д. Перед ком­пи­ля­ци­ей про­грам­му нуж­но будет допи­лить под эти осо­бен­но­сти.

Сила Java — в вир­ту­аль­ной машине JVM (Java Virtual Machine). Это такая про­грам­ма, кото­рая пере­во­дит Java-код, понят­ный чело­ве­ку, в код, понят­ный про­цес­со­ру. Что­бы код стал уни­вер­саль­ным, раз­ра­бот­чи­ки сде­ла­ли вир­ту­аль­ные маши­ны для каж­дой опе­ра­ци­он­ной систе­мы и про­цес­со­ров. Эти маши­ны учи­ты­ва­ют все осо­бен­но­сти архи­тек­ту­ры сво­ей плат­фор­мы и зна­ют, как обра­бо­тать любую Java-команду. Это зна­чит, что один и тот же Java-код мож­но запу­стить и на теле­фоне, и на ком­пью­те­ре, и где угод­но ещё.

Спе­ци­аль­но для про­грам­ми­стов: мы наме­рен­но упро­сти­ли прин­ци­пы рабо­ты JRE и JVM и не гово­рим про байт-код, ком­пи­ля­цию и про­чее. Вме­сто это­го мы сосре­до­то­чи­лись на прин­ци­пах, кото­рые помо­га­ют понять саму суть рабо­ты Java. Если вам кажет­ся, что из-за про­сто­ты мы не опи­са­ли что-то важ­ное — рас­ска­жи­те об этом в ком­мен­та­ри­ях.

Где можно запускать Java-код

Поэто­му запус­кать код на Java мож­но вез­де, для чего уже была раз­ра­бо­та­на JVM, то есть вир­ту­аль­ная маши­на Java. Напри­мер:

  • уль­тра­мощ­ные сер­ве­ры,
  • ком­пью­те­ры,
  • смарт­фо­ны,
  • кно­поч­ные теле­фо­ны,
  • робо­ты и мик­ро­кон­трол­ле­ры типа Arduino, Raspberry Pi и мно­гих дру­гих,
  • фитнес-браслеты,
  • GPS-трекеры,
  • умные часы,
  • умные теле­ви­зо­ры, холо­диль­ни­ки, мик­ро­вол­нов­ки, чай­ни­ки и про­чие домаш­ние гад­же­ты,
  • смарт-карты для досту­па в поме­ще­ния.

Пред­ставь­те такую ситу­а­цию: вы напи­са­ли Java-программу, кото­рая сле­дит за сво­бод­ным местом на дис­ке, и как толь­ко его ста­но­вит­ся мень­ше 20% — выво­дит сооб­ще­ние, мол, уда­ли ненуж­ные фай­лы. Теперь вы може­те запу­стить эту про­грам­му вез­де, где есть JVM. Она сама раз­бе­рёт­ся с кодом, пой­мёт, для како­го про­цес­со­ра она это дела­ет, и запу­стит вашу про­грам­му. В резуль­та­те один и тот же код будет сле­дить за сво­бод­ным местом на ком­пью­те­ре, кно­поч­ном теле­фоне, смарт­фоне, план­ше­те, умной мик­ро­вол­нов­ке или домаш­ней сиг­на­ли­за­ции.

Преимущества Java-программирования

Неза­ви­си­мость от архи­тек­ту­ры и плат­фор­мы. Вы пише­те код, не заду­мы­ва­ясь об осо­бен­но­стях опе­ра­ци­он­ной систе­мы или про­цес­со­ра. Всё это берёт на себя вир­ту­аль­ная маши­на, а вы толь­ко пише­те логи­ку рабо­ты.

Объектно-ориентированное про­грам­ми­ро­ва­ние. ООП — это совре­мен­ный стан­дарт про­грам­ми­ро­ва­ния в ком­мер­че­ских и про­мыш­лен­ных систе­мах. В слу­чае с Java это полу­чит­ся само собой: дело в том, что, как и Ruby, Java — чистый ООП-язык. В нём даже функ­ции пре­вра­ти­лись в мето­ды и могут суще­ство­вать толь­ко внут­ри клас­са.

Рабо­та с памя­тью. Про­грам­ми­сту не нуж­но сле­дить за тем, сколь­ко памя­ти рас­хо­ду­ет его про­грам­ма и как её осво­бо­дить, когда какая-то пере­мен­ная боль­ше не нуж­на. Для это­го в Java встро­е­но авто­ма­ти­че­ское управ­ле­ние памя­тью: Java не допус­ка­ет её уте­чек и раз­рас­та­ния объ­ё­ма, а после завер­ше­ния про­грам­мы осво­бож­да­ет все ресур­сы.

Без­опас­ность. Вир­ту­аль­ная маши­на сама сле­дит за тем, что­бы про­грам­ма не полу­чи­ла доступ к тому, что выхо­дит за её пол­но­мо­чия. Напри­мер, Java-программа не смо­жет про­чи­тать содер­жи­мое осталь­ной опе­ра­тив­ной памя­ти или свя­зать­ся с дру­гим ком­пью­те­ром, если это не преду­смот­ре­но изна­чаль­ны­ми пра­ва­ми досту­па.

Боль­шое сооб­ще­ство и под­держ­ка. Java — тре­тий по попу­ляр­но­сти язык про­грам­ми­ро­ва­ния в мире. В Сети есть тыся­чи сай­тов, кото­рые рас­ска­зы­ва­ют об этом язы­ке, помо­га­ют разо­брать­ся в коде или содер­жат гото­вые реше­ния.

Стан­дарт в кор­по­ра­тив­ном про­грам­ми­ро­ва­нии. Боль­шим ком­па­ни­ям в про­грам­мах нуж­на надёж­ность, ста­биль­ность рабо­ты и воз­мож­ность под­дер­жи­вать их дол­гое вре­мя. Соче­та­ние ООП, управ­ле­ния памя­тью и неза­ви­си­мо­сти от архи­тек­ту­ры дела­ет Java иде­аль­ным реше­ни­ем для это­го.

Недостатки Java

Всё это зву­чит хоро­шо, но есть у Java и недо­стат­ки, весь­ма суще­ствен­ные.

Не самая высо­кая про­из­во­ди­тель­ность. У С и С++ есть толь­ко ком­пи­ля­тор, кото­рый пере­во­дит про­грам­му в машин­ный код. У Java тако­го нет, и всё дела­ет вир­ту­аль­ная маши­на. Полу­ча­ет­ся, что для выпол­не­ния Java-кода нуж­но делать двой­ную рабо­ту: про­цес­сор запус­ка­ет JVM, а JVM выпол­ня­ет сам код. Из-за тако­го под­хо­да Java-программы в полтора-два раза мед­лен­нее, чем тот же код, напи­сан­ный на С++.

Плат­ная лицен­зия. С 2019 года ком­па­ния Oracle, кото­рая вла­де­ет лицен­зи­ей на Java, раз­де­ли­ла её на две части: плат­ную и бес­плат­ную. Если вам нуж­на дол­гая под­держ­ка сре­ды раз­ра­бот­ки и ста­биль­ная рабо­та про­грамм — бери­те плат­ную лицен­зию, ино­гда ста­биль­ность важ­нее. Если вам не нуж­на под­держ­ка и вы може­те уста­но­вить каж­дую новую бес­плат­ную сбор­ку само­сто­я­тель­но — отда­вать день­ги не нуж­но.

Гро­мозд­кий код. Раз­ра­бот­чи­ки Java ста­ви­ли сво­ей целью упро­стить про­грам­ми­ро­ва­ние на С++, и им это уда­лось. Цена, кото­рую при­шлось за это запла­тить, — боль­шие и длин­ные кон­струк­ции в язы­ке, кото­рые часто меша­ют пони­ма­нию сути того, что про­ис­хо­дит. Срав­ни­те код, кото­рый рису­ет пира­мид­ку из звёз­до­чек, на Java и Python:

    
language: Java
public class JavaPyramid {
public static void main(String[] args) {
for (int i=1; i = 5; i++){
for (int j=0; j i; j++){
System.out.print("*");
}
System.out.println(" ");
}
}
}


Ско­пи­ро­вать код
Код ско­пи­ро­ван
    
language: Python
def create_pyramid (rows):
for i in range (rows):
print('*'*(i+1))


Ско­пи­ро­вать код
Код ско­пи­ро­ван

Кто и для чего использует Java

Для нача­ла — спи­сок ком­па­ний и тех­но­ло­гий, кото­рые исполь­зу­ют Java в каче­стве основ­но­го язы­ка про­грам­ми­ро­ва­ния:

  • Amazon,
  • LinkedIn,
  • eBay,
  • Yahoo!
  • OpenOffice,
  • IBM, Intel и Oracle.

Раз­ра­бот­ка под Android. Java до сих пор оста­ёт­ся основ­ным язы­ком мобиль­ной раз­ра­бот­ки для этой опе­ра­ци­он­ной систе­мы, несмот­ря на рас­ту­щую попу­ляр­ность Kotlin. Android Studio — офи­ци­аль­ная сре­да Java-разработки, при­знан­ная ком­па­ни­ей Google.

Тер­ми­на­лы и пла­тёж­ные систе­мы. Бла­го­да­ря вир­ту­аль­ной машине Java-код может рабо­тать на обо­ру­до­ва­нии, кото­рое сто­ит в пла­тёж­ных тер­ми­на­лах и бан­ко­ма­тах.

Рабо­та с финан­са­ми. Если нужен про­стой и надёж­ный сайт по обра­бот­ке пла­те­жей или пере­во­ду денег — исполь­зуй­те Java. Встро­ен­ные систе­мы без­опас­но­сти помо­гут избе­жать несанк­ци­о­ни­ро­ван­ных дей­ствий про­грам­мы.

Зарплаты Java-программистов

По дан­ным Хабр Карье­ры на нача­ло 2020 года, Java-программисты полу­ча­ют так:

Джу­ни­ор — 65 тысяч руб­лей.
Мидл — 116 тысяч.
Сеньор — 169 тысяч.

Учи­ты­вая боль­шое коли­че­ство уже напи­сан­но­го кода, кото­рый надо под­дер­жи­вать, Java-специалисты будут вос­тре­бо­ва­ны ещё очень дол­го. Поэто­му если вы до сих пор дума­е­те над язы­ком для стар­та карье­ры про­грам­ми­ста — посмот­ри­те в сто­ро­ну Java.

С чего начать

Java — Учеб­ник для начи­на­ю­щих про­грам­ми­стов. Подой­дёт для стар­та, хотя сам учеб­ник напи­сан места­ми тяжё­лым и ака­де­ми­че­ским язы­ком.

Гер­берт Шил­дт — мож­но брать любую кни­гу, в назва­нии кото­рой есть Java 8. Если нуж­но совсем с нуля — читай­те «Java 8. Руко­вод­ство для начи­на­ю­щих».

Если вам нуж­на допол­ни­тель­ная тео­рия и нестан­дарт­ные при­ё­мы, почи­тай­те «Java. Эффек­тив­ное про­грам­ми­ро­ва­ние» Джо­шуа Бло­ха. Подой­дёт и тем, у кого уже есть опыт Java-разработки.