Programovanie

Naučte sa Javu od základov

Chcete teda programovať v prostredí Java? To je skvelé a ste na správnom mieste. The Séria Java 101 poskytuje samoobslužný úvod do programovania v jazyku Java, počnúc základmi a pokrývajúci všetky základné koncepty, ktoré potrebujete vedieť, aby ste sa mohli stať produktívnym vývojárom v prostredí Java. Táto séria je technická a má veľa príkladov kódov, ktoré vám pomôžu pochopiť pojmy, ktoré ideme ďalej. Budem predpokladať, že už máte nejaké skúsenosti s programovaním, len nie v Jave.

Tento prvý článok predstavuje platformu Java a vysvetľuje rozdiel medzi jej tromi vydaniami: Java SE, Java EE a Java ME. Dozviete sa tiež o úlohe virtuálneho stroja Java (JVM) pri nasadzovaní aplikácií Java. Pomôžem vám s nastavením Java Development Kit (JDK) vo vašom systéme, aby ste mohli vyvíjať a spúšťať programy Java, a dám vám úvod do architektúry typickej Java aplikácie. Na záver sa naučíte, ako zostaviť a spustiť jednoduchú aplikáciu Java.

Aktualizované pre Javu 12 a nový JShell

Táto séria bola aktualizovaná na verziu Java 12 a obsahuje rýchly úvod do novej jshell: interaktívny nástroj na výučbu jazyka Java a vytváranie prototypov kódu Java.

stiahnuť Získajte kód Stiahnite si zdrojový kód napríklad pre aplikácie v tejto príručke. Vytvoril Jeff Friesen pre JavaWorld.

Čo je to Java?

O Jave si môžete myslieť ako o univerzálnom, objektovo orientovanom jazyku, ktorý sa veľmi podobá na C a C ++, ale ktorý sa ľahšie používa a umožňuje vám vytvárať robustnejšie programy. Táto definícia, bohužiaľ, neposkytuje veľký prehľad o prostredí Java. V roku 2000 spoločnosť Sun Microsystems (pôvodca platformy Java) opísala Javu takto:

Java je jednoduchý, objektovo orientovaný, sieťovo zdatný, interpretovaný, robustný, bezpečný, neutrálny v architektúre, prenosný, vysoko výkonný, viacvláknový a dynamický počítačový jazyk.

Zvážme každú z týchto definícií osobitne.

Java je jednoduchý jazyk. Java bola pôvodne modelovaná po C a C ++, bez niektorých potenciálne mätúcich funkcií. Ukazovatele, viacnásobná dedičnosť implementácie a preťaženie operátora sú niektoré funkcie C / C ++, ktoré nie sú súčasťou Javy. Funkciou, ktorá nie je v C / C ++ nariadená, ale pre Javu je nevyhnutná, je zariadenie na zber odpadu, ktoré automaticky získava objekty a polia.

Java je objektovo orientovaný jazyk. Objektovo zamerané zameranie Javy umožňuje vývojárom pracovať na prispôsobení Javy tak, aby problém vyriešila, a nie nás nútiť manipulovať s problémom tak, aby vyhovoval jazykovým obmedzeniam. Toto sa líši od štruktúrovaného jazyka ako C. Ako príklad môžete uviesť, že zatiaľ čo Java umožňuje sústrediť sa na objekty sporiaceho účtu, C vyžaduje, aby ste o sporiteľnom účte premýšľali osobitne. štát (taká rovnováha) a správanie (ako vklad a výber).

Java je sieťovo zdatný jazyk. Vďaka rozsiahlej sieťovej knižnici Java je ľahké zvládnuť sieťové protokoly Transmission Control Protocol / Internet Protocol (TCP / IP), ako sú HTTP (HyperText Transfer Protocol) a FTP (File Transfer Protocol), a zjednodušuje sa vytváranie sieťových pripojení. Programy Java môžu navyše pristupovať k objektom v sieti TCP / IP prostredníctvom serverov Uniform Resource Locators (URL) rovnako ľahko, ako by ste k nim mali prístup z lokálneho súborového systému.

Java je interpretovaný jazyk. Za behu programu Java program nepriamo vykonáva na základnej platforme (napríklad Windows alebo Linux) prostredníctvom virtuálneho stroja (čo je softvérová reprezentácia hypotetickej platformy) a súvisiaceho vykonávacieho prostredia. Virtuálny stroj preloží program Java bytecodes (pokyny a súvisiace údaje) na pokyny špecifické pre platformu prostredníctvom tlmočenia. Výklad je akt zisťovania, čo znamená inštrukcia bytecode, a následného výberu ekvivalentných „konzervovaných“ pokynov pre konkrétnu platformu, ktoré sa majú vykonať. Virtuálny stroj potom vykoná tieto pokyny špecifické pre danú platformu.

Interpretácia uľahčuje ladenie chybných programov Java, pretože za behu je k dispozícii viac informácií v čase kompilácie. Interpretácia tiež umožňuje odložiť krok spojenia medzi časťami programu Java do spustenia, čo urýchľuje vývoj.

Java je robustný jazyk. Programy Java musia byť spoľahlivé, pretože sa používajú v spotrebiteľských aj kritických aplikáciách, od prehrávačov Blu-ray až po navigačné systémy vozidiel alebo systémy riadenia letu. Medzi jazykové funkcie, ktoré pomáhajú zabezpečiť robustnosť jazyka Java, patria deklarácie, kontrola duplikátu typu v čase kompilácie a behu programu (aby sa zabránilo problémom s nesúladom verzií), skutočné polia s automatickou kontrolou hraníc a vynechanie ukazovateľov. (Ak sa chcete dozvedieť viac o typoch jazykov Java, ich literáloch, premenných a ďalších, prečítajte si časť „Základné funkcie jazyka Java“.)

Ďalším aspektom robustnosti Javy je, že slučky musia byť riadené booleovskými výrazmi namiesto celočíselných výrazov, kde 0 je nepravdivé a nenulová hodnota je pravdivá. Napríklad Java nepovoľuje slučku v štýle C, ako je napr while (x) x ++; pretože slučka nemusí skončiť tam, kde sa očakávalo. Namiesto toho musíte výslovne uviesť boolovský výraz, ako je napr while (x! = 10) x ++; (čo znamená, že slučka potrvá do X sa rovná 10).

Java je bezpečný jazyk. Programy Java sa používajú v sieťových / distribuovaných prostrediach. Pretože programy Java môžu migrovať na rôzne platformy v sieti a vykonávať ich, je dôležité chrániť tieto platformy pred škodlivým kódom, ktorý by mohol šíriť vírusy, kradnúť informácie o kreditných kartách alebo vykonávať iné škodlivé činy. Funkcie jazyka Java, ktoré podporujú robustnosť (napríklad vynechanie ukazovateľov), pracujú s bezpečnostnými funkciami, ako je napríklad bezpečnostný model Java sandbox a šifrovanie pomocou verejného kľúča. Spoločne tieto funkcie zabraňujú vírusom a iným nebezpečným kódom spôsobiť katastrofu na nič netušiacej platforme.

Teoreticky je Java bezpečná. V praxi boli zistené a zneužité rôzne chyby zabezpečenia. Výsledkom je, že spoločnosti Sun Microsystems a Oracle teraz naďalej vydávajú bezpečnostné aktualizácie.

Java je architektonicky neutrálny jazyk. Siete prepájajú platformy s rôznymi architektúrami založenými na rôznych mikroprocesoroch a operačných systémoch. Nemôžete čakať, že Java vygeneruje pokyny špecifické pre danú platformu a nechá im tieto pokyny „pochopiť“ všetky druhy platforiem, ktoré sú súčasťou siete. Namiesto toho Java generuje pokyny na bajódových kódoch nezávislé na platforme, ktoré sú pre každú platformu ľahko interpretovateľné (prostredníctvom implementácie JVM).

Java je prenosný jazyk. Neutralita architektúry prispieva k prenosnosti. Prenositeľnosť Javy však nespočíva len v pokynoch k bytecode nezávislých na platforme. Zvážte, že veľkosti celých čísel sa nesmú líšiť. Napríklad 32-bitový celočíselný typ musí byť vždy podpísaný a zaberať 32 bitov bez ohľadu na to, kde sa 32-bitové celé číslo spracováva (napr. Platforma so 16-bitovými registrami, platforma s 32-bitovými registrami alebo platforma so 64-bitovými registrami). Knižnice Java tiež prispievajú k prenosnosti. V prípade potreby poskytujú typy, ktoré čo najprenosnejším spôsobom prepájajú kód Java s funkciami špecifickými pre jednotlivé platformy.

Java je vysoko výkonný jazyk. Tlmočenie vedie k úrovni výkonu, ktorá je zvyčajne viac ako primeraná. Pre veľmi výkonné aplikačné scenáre používa Java kompiláciu just-in-time, ktorá analyzuje interpretované sekvencie inštrukcií bytecode a kompiluje často interpretované sekvencie inštrukcií do inštrukcií špecifických pre platformu. Následné pokusy o interpretáciu týchto sekvencií inštrukcií bytecode majú za následok vykonanie ekvivalentných pokynov špecifických pre platformu, čo má za následok zvýšenie výkonu.

Java je viacvláknový jazyk. Na zlepšenie výkonu programov, ktoré musia splniť niekoľko úloh naraz, podporuje Java koncept závitové prevedenie. Napríklad program, ktorý spravuje grafické používateľské rozhranie (GUI) počas čakania na vstup zo sieťového pripojenia, používa iné vlákno na vykonanie čakania namiesto použitia predvoleného vlákna GUI pre obe úlohy. Toto udržuje GUI v pohotovosti. Synchronizačné primitívy Java umožňujú vláknam bezpečne komunikovať údaje medzi sebou bez toho, aby ich poškodili. (Pozrite si programovanie pomocou závitov v prostredí Java, o ktorom sa hovorí inde v sérii Java 101.)

Java je dynamický jazyk. Pretože prepojenia medzi programovým kódom a knižnicami prebiehajú dynamicky za behu, nie je potrebné ich výslovne prepájať. Výsledkom je, že keď sa program alebo niektorá z jeho knižníc vyvíja (napríklad kvôli oprave chyby alebo zlepšeniu výkonu), vývojárovi stačí distribuovať aktualizovaný program alebo knižnicu. Aj keď dynamické správanie vedie pri zmene verzie k menšiemu množstvu kódu na distribúciu, táto politika distribúcie môže tiež viesť ku konfliktom verzií. Napríklad vývojár odstráni typ triedy z knižnice alebo ju premenuje. Keď spoločnosť distribuuje aktualizovanú knižnicu, existujúce programy, ktoré závisia od typu triedy, zlyhajú. Na výrazné zníženie tohto problému Java podporuje typ rozhrania, čo je ako zmluva medzi dvoma stranami. (Prečítajte si informácie o rozhraniach, typoch a ďalších objektovo-orientovaných jazykových vlastnostiach, ktoré sú popísané inde v sérii Java 101.)

Rozbalenie tejto definície nás veľa naučí o Jave. Najdôležitejšie je, že odhaľuje, že Java je jazyk aj platforma. Viac informácií o komponentoch platformy Java - menovite o virtuálnom stroji Java a prostredí na vykonávanie Java - sa dozviete ďalej v tomto návode.

Tri vydania Java: Java SE, Java EE a Java ME

Spoločnosť Sun Microsystems uviedla na trh vývojovú súpravu softvéru Java 1.0 (JDK) v máji 1995. Prvý JDK sa používal na vývoj desktopových aplikácií a appletov a program Java sa postupne vyvinul tak, aby zahŕňal programovanie podnikových serverov a mobilných zariadení. Uloženie všetkých potrebných knižníc do jedného JDK by spôsobilo, že by bol JDK príliš veľký na distribúciu, najmä preto, že distribúcia v 90. rokoch bola obmedzená malými CD a nízkymi rýchlosťami siete. Pretože väčšina vývojárov nepotrebovala všetky posledné API (vývojár desktopových aplikácií by sotva potreboval prístup k podnikovým API API), Sun rozdelil Javu do troch hlavných vydaní. Tieto sa nakoniec stali známymi ako Java SE, Java EE a Java ME:

  • Java Platform, Standard Edition (Java SE) je platforma Java na vývoj aplikácií na strane klienta (fungujúcich na počítačoch) a appletov (fungujúcich vo webových prehliadačoch). Upozorňujeme, že z bezpečnostných dôvodov už applety nie sú oficiálne podporované.
  • Java Platform, Enterprise Edition (Java EE) je platforma Java postavená na prostredí Java SE, ktorá sa používa výhradne na vývoj serverovo orientovaných podnikových aplikácií. Zahŕňajú aplikácie na serveri Servlety Java, čo sú programy Java, ktoré sú podobné appletom, ale bežia skôr na serveri ako na klientovi. Servlety vyhovujú API Java Servlet.
  • Java Platform, Micro Edition (Java ME) je tiež postavený na vrchole Java SE. Je to platforma Java pre vývoj MIDlety, čo sú programy Java, ktoré bežia na mobilných informačných zariadeniach, a Xlets, čo sú programy Java, ktoré bežia na zabudovaných zariadeniach.

Java SE je základná platforma pre Javu a zameriava sa na sériu Java 101. Príklady kódov budú vychádzať z najnovšej verzie Java v čase písania článku, Java 12.

Platforma Java a JVM

Java je programovací jazyk a platforma na beh kompilovaného kódu Java. Táto platforma sa skladá hlavne z JVM, ale obsahuje aj vykonávacie prostredie, ktoré podporuje vykonávanie JVM na podkladovej (natívnej) platforme. JVM obsahuje niekoľko komponentov na načítanie, overenie a vykonávanie kódu Java. Obrázok 1 zobrazuje výkon programu Java na tejto platforme.

Jeff Friesen

V hornej časti diagramu je rad súborov programových tried, z ktorých jeden je označený ako hlavný súbor triedy. Program Java pozostáva minimálne z hlavného súboru triedy, čo je súbor prvej triedy, ktorý sa má načítať, overiť a vykonať.

JVM deleguje načítanie triedy na svoju súčasť classloader. Programy na načítanie tried načítajú súbory triedy z rôznych zdrojov, ako sú napríklad systémy súborov, siete a archívne súbory. Izolujú JVM od zložitosti načítania triedy.

Načítaný súbor triedy je uložený v pamäti a predstavuje sa ako objekt vytvorený z Trieda trieda. Po načítaní overovač bytecode overuje rôzne pokyny bytecode, aby sa ubezpečil, že sú platné a neohrozia bezpečnosť.

Ak sú bytecody súboru triedy neplatné, JVM sa ukončí. Inak jeho interpretačná zložka interpretuje bajtkód jednu inštrukciu po druhej. Interpretácia identifikuje pokyny v bajtovom kóde a vykonáva ekvivalentné natívne pokyny.

Niektoré sekvencie inštrukcií bytecode sa vykonávajú častejšie ako iné. Keď tlmočník zistí túto situáciu, kompilátor JITM just-in-time (JIT) skompiluje sekvenciu bytecode do natívneho kódu na rýchlejšie vykonanie.

Počas vykonávania sa tlmočník zvyčajne stretne s požiadavkou na vykonanie bytecode iného súboru súboru (patriaceho k programu alebo knižnici). Keď sa to stane, načítavač triedy načíta súbor triedy a overovač bytecode pred vykonaním overí bytecode načítaného súboru triedy. Aj počas vykonávania môžu pokyny podľa bytecode vyžadovať, aby JVM otvoril súbor, niečo zobrazil na obrazovke, vydal zvuk alebo vykonal inú úlohu vyžadujúcu spoluprácu s natívnou platformou. Spoločný podnik JVM reaguje pomocou svojej technológie mosta Java Native Interface (JNI) na interakciu s natívnou platformou na vykonanie úlohy.

$config[zx-auto] not found$config[zx-overlay] not found