Programiranje

Naučite se Jave od začetka

Torej, želite programirati v Javi? To je super in prišli ste na pravo mesto. The Java 101 serija ponuja samoumeven uvod v programiranje Java, začenši z osnovami in zajema vse temeljne koncepte, ki jih morate poznati, da postanete produktivni razvijalec Java. Ta serija je tehnična, z obilico primerov kode, ki vam pomagajo razumeti koncepte, ko gremo naprej. Predvidevam, da že imate nekaj izkušenj s programiranjem, le ne v Javi.

Ta prvi članek predstavlja platformo Java in pojasnjuje razliko med njenimi tremi izdajami: Java SE, Java EE in Java ME. Spoznali boste tudi vlogo Java navideznega stroja (JVM) pri uvajanju aplikacij Java. Pomagal vam bom nastaviti Java Development Kit (JDK) v vašem sistemu, tako da lahko razvijate in zaženete programe Java, in začel vam bom z arhitekturo tipične aplikacije Java. Na koncu se boste naučili, kako sestaviti in zagnati preprosto aplikacijo Java.

Posodobljeno za Javo 12 in novo JShell

Ta serija je bila posodobljena za Javo 12 in vključuje hiter uvod v novo jshell: interaktivno orodje za učenje Java in izdelavo prototipov Java kode.

prenos Prenesite kodo Prenesite izvorno kodo, na primer programe v tej vadnici. Ustvaril Jeff Friesen za JavaWorld.

Kaj je Java?

Javo si lahko predstavljate kot splošni, objektno usmerjeni jezik, ki je zelo podoben C in C ++, vendar je enostavnejši za uporabo in vam omogoča ustvarjanje močnejših programov. Na žalost ta definicija ne daje veliko vpogleda v Javo. Leta 2000 je Sun Microsystems (začetnik platforme Java) Javo opisal tako:

Java je preprost, objektno usmerjen, mrežno podprt, interpretiran, robusten, varen, arhitekturno nevtralen, prenosni, visokozmogljiv, večnitni, dinamični računalniški jezik.

Upoštevajmo vsako od teh opredelitev posebej.

Java je preprost jezik. Java je bila sprva oblikovana po C in C ++, brez nekaterih potencialno zmedenih funkcij. Kazalci, dedovanje več izvedb in preobremenitev operaterja so nekatere funkcije C / C ++, ki niso del Jave. Funkcija, ki ni obvezna v jeziku C / C ++, vendar je bistvenega pomena za Javo, je objekt za zbiranje smeti, ki samodejno pridobi predmete in polja.

Java je objektno usmerjen jezik. Javin objektno usmerjen poudarek omogoča razvijalcem, da delajo na prilagajanju Jave za reševanje problema, namesto da bi nas prisilili, da s težavo manipuliramo, da bi zadostili jezikovnim omejitvam. To se razlikuje od strukturiranega jezika, kot je C. Kot primer, medtem ko Java omogoča, da se osredotočite na predmete varčevalnega računa, C zahteva, da o hranilnem računu razmišljate ločeno država (takšno ravnotežje) in vedenja (na primer polog in dvig).

Java je mrežno podkovani jezik. Javna obsežna omrežna knjižnica omogoča enostavno obvladovanje omrežnih protokolov protokola za nadzor prenosa / internetnega protokola (TCP / IP), kot sta HTTP (HyperText Transfer Protocol) in FTP (File Transfer Protocol), in poenostavlja nalogo vzpostavitve omrežnih povezav. Poleg tega lahko programi Java dostopajo do objektov prek omrežja TCP / IP prek enotnih lokatorjev virov (URL-ji) z enako lahkoto, kot bi imeli dostop do njih iz lokalnega datotečnega sistema.

Java je interpretiran jezik. Med izvajanjem se program Java posredno izvaja na osnovni platformi (na primer Windows ali Linux) prek navideznega stroja (ki je programska predstavitev hipotetične platforme) in s tem povezanega okolja za izvajanje. Navidezni stroj prevaja program Java bajtkod (navodila in z njimi povezani podatki) do navodil za platformo z razlago. Tolmačenje je dejanje, kako ugotoviti, kaj pomeni navodilo bajt-kode, in nato izbrati enakovredna "konzervirana" navodila za izvajanje platforme. Nato navidezni stroj izvrši ta navodila za platformo.

Tolmačenje olajša odpravljanje napak v okvarjenih programih Java, saj je med izvajanjem na voljo več informacij o času prevajanja. Tolmačenje tudi omogoča, da se korak povezave med deli programa Java odloži do časa izvajanja, kar pospeši razvoj.

Java je robusten jezik. Programi Java morajo biti zanesljivi, ker se uporabljajo tako v potrošniških kot v kritičnih aplikacijah, od predvajalnikov Blu-ray do navigacijskih vozil ali sistemov za nadzor zraka. Jezikovne funkcije, ki pomagajo Java narediti robustno, vključujejo izjave, preverjanje podvojenih vrst med prevajanjem in izvajanjem (da se preprečijo težave z neujemanjem različic), resnične nize s samodejnim preverjanjem meja in izpuščanje kazalcev. (Glejte "Osnovne značilnosti jezika Java", če želite začeti z jezikovnimi vrstami Java, literali, spremenljivkami in še več.)

Drug vidik robustnosti Jave je, da je treba zanke nadzorovati z logičnimi izrazi namesto s celoštevilskimi izrazi, kjer je 0 false in ničelna vrednost true. Na primer, Java ne dovoljuje zanke v slogu C, kot je medtem ko (x) x ++; ker se zanka morda ne konča tam, kjer se pričakuje. Namesto tega morate izrecno navesti logični izraz, kot je medtem ko (x! = 10) x ++; (kar pomeni, da se bo zanka izvajala do x enako 10).

Java je varen jezik. Programi Java se uporabljajo v omrežnih / porazdeljenih okoljih. Ker se programi Java lahko selijo in izvajajo na različnih omrežnih platformah, je pomembno, da te platforme zaščitite pred zlonamerno kodo, ki lahko širi viruse, krade podatke o kreditnih karticah ali izvaja druga zlonamerna dejanja. Funkcije jezika Java, ki podpirajo robustnost (na primer izpustitev kazalcev), delujejo z varnostnimi funkcijami, kot sta varnostni model Java sandbox in šifriranje z javnimi ključi. Skupaj te funkcije preprečujejo, da bi virusi in druge nevarne kode uničevali nič hudega sluteče platforme.

V teoriji je Java varna. V praksi so bile odkrite in izkoriščene različne varnostne ranljivosti. Kot rezultat tega Sun Microsystems takrat in Oracle zdaj še naprej izdajata varnostne posodobitve.

Java je arhitekturno nevtralen jezik. Omrežja povezujejo platforme z različnimi arhitekturami, ki temeljijo na različnih mikroprocesorjih in operacijskih sistemih. Ne morete pričakovati, da bo Java ustvarila navodila za posamezne platforme in jih bo "razumela" vsa vrsta platform, ki so del omrežja. Namesto tega Java ustvari od platforme neodvisna navodila bytecode, ki jih je vsaka platforma enostavno interpretirati (z izvajanjem JVM).

Java je prenosni jezik. Arhitekturna nevtralnost prispeva k prenosljivosti. Vendar prenosljivost Jave vsebuje več kot navodila za bajtkod, neodvisna od platforme. Upoštevajte, da se velikosti celoštevilnih vrst ne smejo spreminjati. Na primer, 32-bitni celoštevilski tip mora biti vedno podpisan in zaseda 32 bitov, ne glede na to, kje je 32-bitno celo število obdelano (npr. Platforma s 16-bitnimi registri, platforma z 32-bitnimi registri ali platforma s 64-bitnimi registri). K prenosljivosti prispevajo tudi Javine knjižnice. Po potrebi ponujajo tipe, ki na najbolj prenosljiv način povezujejo kodo Java s posebnimi zmožnostmi platforme.

Java je zelo zmogljiv jezik. Tolmačenje prinaša raven izvedbe, ki je običajno več kot ustrezna. Za zelo zmogljive scenarije aplikacij Java uporablja pravočasno prevajanje, ki analizira interpretirana zaporedja ukazov bajt kode in pogosto razlaga zaporedja ukazov sestavi v navodila za platformo. Kasnejši poskusi interpretacije teh zaporedij bajt-kode povzročijo izvajanje enakovrednih navodil, specifičnih za platformo, kar povzroči povečanje zmogljivosti.

Java je večnitni jezik. Java za izboljšanje delovanja programov, ki morajo opraviti več nalog hkrati, podpira koncept izvedba z navojem. Program, ki na primer upravlja grafični uporabniški vmesnik (GUI), medtem ko čaka na vhod iz omrežne povezave, za izvedbo čakanja uporabi drugo nit, namesto da za obe nalogi uporablja privzeto nit GUI. Tako se GUI odziva. Java sinhronizacijski primitivi omogočajo nitim, da varno komunicirajo med seboj, ne da bi jih poškodovale. (Glejte programiranje z navoji v Javi, o katerem smo razpravljali drugje v seriji Java 101.)

Java je dinamičen jezik. Ker se medsebojne povezave med programsko kodo in knjižnicami dinamično izvajajo med izvajanjem, jih ni treba izrecno povezovati. Kot rezultat, ko se program ali ena od njegovih knjižnic razvije (na primer za odpravljanje napak ali izboljšanje učinkovitosti), mora razvijalec le razširiti posodobljeni program ali knjižnico. Čeprav dinamično vedenje povzroči manj kode za distribucijo, ko pride do spremembe različice, lahko ta pravilnik o distribuciji povzroči tudi konflikte različic. Razvijalec na primer iz knjižnice odstrani tip razreda ali ga preimenuje. Ko podjetje distribuira posodobljeno knjižnico, obstoječi programi, ki so odvisni od vrste razreda, ne bodo uspeli. Da bi to težavo močno zmanjšala, Java podpira tip vmesnika, kar je kot pogodba med dvema strankama. (Glejte vmesnike, vrste in druge objektno usmerjene jezikovne funkcije, o katerih smo razpravljali drugje v seriji Java 101.)

Razpakiranje te definicije nas nauči veliko o Javi. Najpomembneje pa je, da razkriva, da je Java hkrati jezik in platforma. Kasneje v tej vadnici boste izvedeli več o komponentah platforme Java - in sicer o virtualnem stroju Java in okolju za izvajanje Java.

Tri izdaje Java: Java SE, Java EE in Java ME

Sun Microsystems je maja 1995 izdal komplet za razvoj programske opreme Java 1.0 (JDK). Prvi JDK je bil uporabljen za razvoj namiznih aplikacij in programčkov, Java pa se je kasneje razvila tako, da je zajemala programiranje za poslovne strežnike in mobilne naprave. Če bi shranili vse potrebne knjižnice v enem samem JDK, bi bil JDK prevelik za distribucijo, še posebej zato, ker je bila distribucija v devetdesetih letih omejena z majhnimi CD-ji in počasnimi omrežnimi hitrostmi. Ker večina razvijalcev ni potrebovala vsakega zadnjega API-ja (razvijalcu namiznih aplikacij skorajda ne bi bilo treba dostopati do API-jev Java za podjetja), je Sun razdelil Javo v tri glavne izdaje. Ti so sčasoma postali znani kot Java SE, Java EE in Java ME:

  • Platforma Java, standardna izdaja (Java SE) je platforma Java za razvoj odjemalskih aplikacij (ki se izvajajo na namizjih) in apletov (ki se izvajajo v spletnih brskalnikih). Upoštevajte, da programčki iz varnostnih razlogov niso več uradno podprti.
  • Java Platform, Enterprise Edition (Java EE) je platforma Java, zgrajena na vrhu Java SE, ki se uporablja izključno za razvoj strežniških aplikacij, usmerjenih v podjetja. Vključujejo aplikacije na strani strežnika Javni programčki, ki so programi Java, ki so podobni programčkom, vendar se izvajajo na strežniku in ne na odjemalcu. Servleti ustrezajo API-ju Java Servlet.
  • Java Platforma, Micro Edition (Java ME) je zgrajen tudi na vrhu Java SE. Je Java platforma za razvoj MIDlets, ki so programi Java, ki se izvajajo na mobilnih informacijskih napravah, in Xlets, ki so programi Java, ki se izvajajo na vdelanih napravah.

Java SE je temeljna platforma za Javo in je v središču za serijo Java 101. Primeri kode bodo temeljili na najnovejši različici Jave v času pisanja, Java 12.

Platforma Java in JVM

Java je hkrati programski jezik in platforma za zagon prevedene kode Java. Ta platforma je v glavnem sestavljena iz JVM, vključuje pa tudi izvedbeno okolje, ki podpira izvajanje JVM na osnovni (izvorni) platformi. JVM vključuje več komponent za nalaganje, preverjanje in izvajanje kode Java. Slika 1 prikazuje, kako se program Java izvaja na tej platformi.

Jeff Friesen

Na vrhu diagrama je vrsta datotek programskega razreda, od katerih je ena označena kot glavna datoteka razreda. Program Java je sestavljen iz vsaj datoteke glavnega razreda, ki je prva datoteka razreda, ki jo je treba naložiti, preveriti in izvršiti.

JVM prenese nalaganje razreda na komponento nalagalnika razredov. Nalagalniki razredov naložijo datoteke razredov iz različnih virov, kot so datotečni sistemi, omrežja in arhivske datoteke. JVM izolirajo iz zapletenosti obremenitve razreda.

Naložena datoteka razreda je shranjena v pomnilniku in predstavljena kot predmet, ustvarjen iz datoteke Razred razred. Po nalaganju preveritelj bytecode preveri različna navodila bytecode, da se prepriča, ali so veljavna in ne ogrožajo varnosti.

Če bytecode kode datoteke razreda niso veljavni, JVM zaključi. V nasprotnem primeru interpretacijska komponenta interpretira bajtno kodo eno navodilo naenkrat. Interpretacija identificira navodila bytecode in izvede enakovredna izvorna navodila.

Nekatera zaporedja ukazov bytecode se izvajajo pogosteje kot druga. Ko tolmač zazna to situacijo, JVM-jev pravočasno (JIT) prevajalnik sestavi zaporedje bajt kode v izvorno kodo za hitrejše izvajanje.

Med izvajanjem tolmač običajno naleti na zahtevo za izvedbo bajtode druge datoteke razreda (ki pripada programu ali knjižnici). Ko se to zgodi, naložitelj razredov naloži datoteko razreda in preveritelj bajtkode preveri bajt kodo naložene datoteke razreda, preden se izvede. Tudi med izvajanjem lahko navodila bytecode zahtevajo, da JVM odpre datoteko, prikaže nekaj na zaslonu, odda zvok ali izvede drugo nalogo, ki zahteva sodelovanje z izvorno platformo. JVM se odzove z uporabo svoje mostne tehnologije Java Native Interface (JNI) za interakcijo z izvorno platformo za izvajanje naloge.

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