Programmēšana

Uzziniet Java no paša sākuma

Tātad, jūs vēlaties programmēt Java? Tas ir lieliski, un jūs esat nonācis īstajā vietā. The Java 101 sērija nodrošina pašvadītu ievadu Java programmēšanā, sākot ar pamatiem un aptverot visus pamatjēdzienus, kas jums jāzina, lai kļūtu par produktīvu Java izstrādātāju. Šī sērija ir tehniska, un tajā ir daudz kodu piemēru, kas palīdzēs jums izprast jēdzienus, turpinot darbu. Es pieņemu, ka jums jau ir zināma programmēšanas pieredze, tikai ne Java.

Šis pirmais raksts iepazīstina ar Java platformu un izskaidro atšķirību starp trim tās izdevumiem: Java SE, Java EE un Java ME. Jūs arī uzzināsiet par Java virtuālās mašīnas (JVM) lomu Java lietojumprogrammu izvietošanā. Es jums palīdzēšu savā sistēmā izveidot Java izstrādes komplektu (JDK), lai jūs varētu izstrādāt un palaist Java programmas, un es jums sākšu darbu ar tipiskas Java lietojumprogrammas arhitektūru. Visbeidzot, jūs uzzināsiet, kā apkopot un palaist vienkāršu Java lietotni.

Atjaunināts Java 12 un jaunajam JShell

Šī sērija ir atjaunināta Java 12, un tā ietver ātru ievadu jaunajā jshell: interaktīvs rīks Java apguvei un Java koda prototipēšanai.

lejupielādēt Iegūt kodu Lejupielādējiet šajā apmācībā avota kodu, piemēram, lietojumprogrammām. Izveidoja Jeff Friesen JavaWorld.

Kas ir Java?

Jūs varat domāt par Java kā vispārējas nozīmes objektorientētu valodu, kas izskatās ļoti līdzīga C un C ++, bet kuru ir vieglāk izmantot un kas ļauj izveidot stabilākas programmas. Diemžēl šī definīcija nedod lielu ieskatu Java. 2000. gadā Sun Microsystems (Java platformas iniciators) aprakstīja Java šādi:

Java ir vienkārša, uz objektu orientēta, tīkla pārzinoša, interpretēta, izturīga, droša, neitrāla arhitektūra, pārnēsājama, augstas veiktspējas, daudzšķiedru, dinamiska datorvaloda.

Apskatīsim katru no šīm definīcijām atsevišķi.

Java ir vienkārša valoda. Sākotnēji Java tika modelēta pēc C un C ++, atskaitot dažas potenciāli mulsinošas funkcijas. Rādītāji, vairāku ieviešanas mantošana un operatoru pārslodze ir daži C / C ++ līdzekļi, kas nav Java daļa. Funkcija, kas nav obligāta C / C ++, bet ir būtiska Java, ir atkritumu savākšanas iekārta, kas automātiski atgūst objektus un masīvus.

Java ir uz objektu orientēta valoda. Java objektorientētais fokuss ļauj izstrādātājiem strādāt pie Java pielāgošanas problēmas risināšanai, nevis liek mums manipulēt ar problēmu, lai izpildītu valodas ierobežojumus. Tas atšķiras no strukturētas valodas, piemēram, C. Piemēram, ja Java ļauj koncentrēties uz krājkonta objektiem, C prasa atsevišķi domāt par krājkontu Valsts (tāds līdzsvars) un uzvedība (piemēram, depozīts un izņemšana).

Java ir tīkla pārzinoša valoda. Java plašā tīkla bibliotēka ļauj viegli tikt galā ar tīkla pārraides vadības protokola / interneta protokola (TCP / IP) tīkla protokoliem, piemēram, HTTP (HyperText pārsūtīšanas protokols) un FTP (failu pārsūtīšanas protokols), un vienkāršo tīkla savienojumu izveidošanu. Turklāt Java programmas var piekļūt objektiem visā TCP / IP tīklā, izmantojot vienotus resursu lokatorus (URL), tikpat viegli, kā jums būtu piekļūt tiem no vietējās failu sistēmas.

Java ir interpretēta valoda. Izpildes laikā Java programma netieši izpilda pamata platformu (piemēram, Windows vai Linux), izmantojot virtuālo mašīnu (kas ir hipotētiskas platformas programmatūras attēlojums) un saistīto izpildes vidi. Virtuālā mašīna tulko Java programmas baitkodi (instrukcijas un saistītie dati) platformai specifiskām instrukcijām, izmantojot interpretāciju. Interpretācija ir izdomāt, ko nozīmē baitkoda instrukcija, un pēc tam izpildei izvēlēties līdzvērtīgas "konservētas" platformai specifiskas instrukcijas. Pēc tam virtuālā mašīna izpilda šīs platformai specifiskās instrukcijas.

Interpretācija atvieglo kļūdainu Java programmu atkļūdošanu, jo izpildes laikā ir pieejama vairāk informācijas apkopošanas laikā. Interpretācija arī ļauj aizkavēt saites darbību starp Java programmas daļām līdz izpildlaika beigām, kas paātrina attīstību.

Java ir stabila valoda. Java programmām jābūt uzticamām, jo ​​tās tiek izmantotas gan patērētājiem, gan kritiskām vajadzībām, sākot no Blu-ray atskaņotājiem līdz transportlīdzekļu navigācijas vai gaisa vadības sistēmām. Valodas funkcijas, kas palīdz padarīt Java izturīgu, ir deklarācijas, dublikātu tipa pārbaude sastādīšanas laikā un izpildlaikā (lai novērstu problēmu neatbilstību versijās), īsti masīvi ar automātisku robežu pārbaudi un norāžu izlaišana. (Lai sāktu darbu ar Java valodas tipiem, burtniekiem, mainīgajiem un daudz ko citu, skatiet sadaļu "Java valodas pamatfunkcijas".)

Vēl viens Java robustuma aspekts ir tāds, ka cilpas jākontrolē ar Būla izteiksmēm, nevis veselu skaitļu izteiksmēm, kur 0 ir nepatiesa un vērtība ar nulli ir patiesa. Piemēram, Java nepieļauj C stila cilpu, piemēram, kamēr (x) x ++; jo cilpa var nebeigties tur, kur paredzēts. Tā vietā jums skaidri jānorāda Būla izteiksme, piemēram, kamēr (x! = 10) x ++; (kas nozīmē, ka cilpa darbosies līdz x ir vienāds ar 10).

Java ir droša valoda. Java programmas tiek izmantotas tīklā / izplatītā vidē. Tā kā Java programmas var migrēt un izpildīt dažādās tīkla platformās, ir svarīgi aizsargāt šīs platformas no ļaunprātīga koda, kas varētu izplatīt vīrusus, nozagt kredītkaršu informāciju vai veikt citas ļaunprātīgas darbības. Java valodas funkcijas, kas atbalsta noturību (piemēram, rādītāju izlaišana), darbojas ar tādiem drošības līdzekļiem kā Java smilškastes drošības modelis un publiskās atslēgas šifrēšana. Šīs funkcijas kopā neļauj vīrusiem un citiem bīstamiem kodiem izraisīt postījumus nenojaušamajā platformā.

Teorētiski Java ir droša. Praksē ir atklātas un izmantotas dažādas drošības ievainojamības. Rezultātā Sun Microsystems toreiz un Oracle tagad turpina atbrīvot drošības atjauninājumus.

Java ir arhitektūrai neitrāla valoda. Tīkli savieno platformas ar dažādu arhitektūru, pamatojoties uz dažādiem mikroprocesoriem un operētājsistēmām. Jūs nevarat sagaidīt, ka Java ģenerēs platformai specifiskas instrukcijas un ka šīs instrukcijas "sapratīs" visu veidu platformas, kas ir tīkla daļa. Tā vietā Java ģenerē no platformas neatkarīgus baitkodu norādījumus, kurus katrai platformai ir viegli interpretēt (ieviešot JVM).

Java ir pārnēsājama valoda. Arhitektūras neitralitāte veicina pārnesamību. Tomēr Java pārnesamība ir vairāk nekā no platformas neatkarīga bytecode instrukcija. Apsveriet, ka vesela skaitļa tipa izmēri nedrīkst atšķirties. Piemēram, 32 bitu vesela skaitļa tipam vienmēr jābūt parakstītam un jāaizņem 32 biti, neatkarīgi no tā, kur tiek apstrādāts 32 bitu vesels skaitlis (piemēram, platforma ar 16 bitu reģistriem, platforma ar 32 bitu reģistriem vai platforma ar 64 bitu reģistriem). Java bibliotēkas arī veicina pārnesamību. Vajadzības gadījumā tie nodrošina veidus, kas pēc iespējas pārnēsājamāk savieno Java kodu ar platformas specifiskām iespējām.

Java ir augstas veiktspējas valoda. Mutiskā tulkošana nodrošina tādu veiktspējas līmeni, kas parasti ir vairāk nekā piemērots. Ļoti augstas veiktspējas lietojumprogrammu scenārijiem Java izmanto kompilāciju tieši laikā, kas analizē interpretētās baitkodu instrukciju sekvences un apkopo bieži interpretētās instrukciju sekcijas platformas specifiskām instrukcijām. Turpmāki mēģinājumi interpretēt šīs baitkoda instrukciju secības rada līdzvērtīgu platformai specifisku instrukciju izpildi, kā rezultātā tiek palielināts veiktspēja.

Java ir daudzvalodu valoda. Lai uzlabotu to programmu darbību, kurām vienlaikus jāveic vairāki uzdevumi, Java atbalsta koncepciju vītņota izpilde. Piemēram, programma, kas pārvalda grafisko lietotāja saskarni (GUI), gaidot ievadi no tīkla savienojuma, izmanto citu pavedienu, lai veiktu gaidīšanu, nevis abiem uzdevumiem izmantotu noklusējuma GUI pavedienu. Tas uztur GUI atsaucīgu. Java sinhronizācijas primitīvi ļauj pavedieniem droši sazināties savā starpā, datus nesabojājot. (Skatiet Java vītņoto programmēšanu, kas apskatīta citur Java 101 sērijā.)

Java ir dinamiska valoda. Tā kā starpsavienojumi starp programmas kodu un bibliotēkām izpildes laikā notiek dinamiski, nav nepieciešams tos skaidri saistīt. Rezultātā, attīstoties programmai vai kādai no tās bibliotēkām (piemēram, kļūdu labošanai vai veiktspējas uzlabošanai), izstrādātājam ir jāizplata tikai atjauninātā programma vai bibliotēka. Lai gan dinamiskās uzvedības rezultātā rodas mazāks koda sadalīšanas veids, kad notiek izmaiņas versijā, šī izplatīšanas politika var izraisīt arī versiju konfliktus. Piemēram, izstrādātājs noņem klases tipu no bibliotēkas vai pārdēvē to. Kad uzņēmums izplata atjaunināto bibliotēku, esošās programmas, kas ir atkarīgas no klases veida, neizdosies. Lai ievērojami samazinātu šo problēmu, Java atbalsta saskarnes tips, kas ir kā divu pušu līgums. (Skatiet saskarnes, veidus un citus objektorientētas valodas līdzekļus, kas apspriesti citur Java 101 sērijā.)

Šīs definīcijas izpakošana mums daudz māca par Java. Vissvarīgākais ir tas, ka tas atklāj, ka Java ir gan valoda, gan platforma. Turpmāk šajā apmācībā uzzināsiet vairāk par Java platformas komponentiem - proti, Java virtuālo mašīnu un Java izpildes vidi.

Trīs Java izdevumi: Java SE, Java EE un Java ME

Sun Microsystems 1995. gada maijā izlaida Java 1.0 programmatūras izstrādes komplektu (JDK). Pirmais JDK tika izmantots darbvirsmas lietojumprogrammu un sīklietu izstrādei, un pēc tam Java attīstījās, lai aptvertu uzņēmuma, servera un mobilo ierīču programmēšanu. Visu nepieciešamo bibliotēku glabāšana vienā JDK būtu padarījusi JDK par lielu izplatīšanai, it īpaši tāpēc, ka izplatīšanu 1990. gados ierobežoja maza izmēra kompaktdiski un lēns tīkla ātrums. Tā kā lielākajai daļai izstrādātāju nebija vajadzīgi visi pēdējie API (darbvirsmas lietojumprogrammu izstrādātājiem diez vai vajadzēs piekļūt uzņēmuma Java API), Sun ražoja Java trīs galvenajos izdevumos. Tie galu galā kļuva pazīstami kā Java SE, Java EE un Java ME:

  • Java platforma, standarta izdevums (Java SE) ir Java platforma klienta lietojumprogrammu (kas darbojas uz galddatoriem) un sīklietotņu (kas darbojas tīmekļa pārlūkprogrammās) izstrādei. Ņemiet vērā, ka drošības apsvērumu dēļ sīklietotnes vairs netiek oficiāli atbalstītas.
  • Java platforma, Enterprise Edition (Java EE) ir Java platformai uzbūvēta Java platforma, kas tiek izmantota tikai uz uzņēmumu orientētu serveru lietojumprogrammu izstrādei. Servera puses lietojumprogrammas ietver Java servleti, kas ir Java programmas, kas ir līdzīgas sīklietotnēm, bet darbojas serverī, nevis klientā. Serversīklietotnes atbilst Java Servlet API.
  • Java platforma, Micro Edition (Java ME) ir uzbūvēts arī virs Java SE. Tā ir Java platforma izstrādei MIDlet, kas ir Java programmas, kas darbojas mobilajās informācijas ierīcēs, un Xlets, kas ir Java programmas, kas darbojas iegultās ierīcēs.

Java SE ir Java pamatplatforma, un tā ir Java 101 sērijas uzmanības centrā. Kodu piemēri būs balstīti uz jaunāko Java versiju rakstīšanas laikā Java 12.

Java platforma un JVM

Java ir gan programmēšanas valoda, gan platforma kompilēta Java koda palaišanai. Šī platforma sastāv galvenokārt no JVM, bet tajā ietilpst arī izpildes vide, kas atbalsta JVM izpildi pamatā esošajā (vietējā) platformā. JVM ietver vairākus komponentus Java koda ielādēšanai, pārbaudei un izpildei. 1. attēlā parādīts, kā Java programma darbojas šajā platformā.

Džefs Frīzens

Diagrammas augšdaļā ir virkne programmu klases failu, no kuriem viens tiek apzīmēts kā galvenais klases fails. Java programma sastāv no vismaz galvenās klases faila, kas ir pirmais klases fails, kas tiek ielādēts, verificēts un izpildīts.

JVM deleģē klases ielādi savam classloader komponentam. Klases ielādētāji klases failus ielādē no dažādiem avotiem, piemēram, failu sistēmām, tīkliem un arhīvu failiem. Viņi izolē JVM no klases iekraušanas sarežģījumiem.

Ielādēts klases fails tiek saglabāts atmiņā un tiek attēlots kā objekts, kas izveidots no Klase klasē. Pēc ielādes baitkoda verificētājs pārbauda dažādus baitkoda norādījumus, lai pārliecinātos, ka tie ir derīgi un neapdraud drošību.

Ja klases faila baitkodi nav derīgi, JVM tiek pārtraukts. Pretējā gadījumā tā tulka komponents baitkodu interpretē pa vienai instrukcijai. Interpretācija identificē baitkodu instrukcijas un izpilda līdzvērtīgas vietējās instrukcijas.

Daži bytecode instrukciju secības tiek izpildītas biežāk nekā citas. Kad tulks atklāj šo situāciju, JVM tieši laikā (JIT) sastādītājs apkopo baitkoda secību uz vietējo kodu, lai ātrāk izpildītu.

Izpildes laikā tulks parasti sastop pieprasījumu izpildīt citas klases faila baitkodu (kas pieder programmai vai bibliotēkai). Kad tas notiks, classloader ielādē klases failu, un baitu kodu pārbaudītājs pārbauda ielādētā klases faila baitu kodu pirms tā izpildes. Arī izpildes laikā bytecode instrukcijās var pieprasīt, lai JVM atver failu, kaut ko parāda ekrānā, izdod skaņu vai veic citu uzdevumu, kam nepieciešama sadarbība ar vietējo platformu. JVM reaģē, izmantojot Java Native Interface (JNI) tilta tehnoloģiju, lai mijiedarbotos ar vietējo platformu, lai veiktu uzdevumu.

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