Mājas / Drošība / Tika izveidota java programmēšanas valoda. Ievads Java. Java kā programmēšanas valodas priekšrocības

Tika izveidota java programmēšanas valoda. Ievads Java. Java kā programmēšanas valodas priekšrocības

Java valoda. Ievads.

Ilgu laiku bija grūti iedomāties datoržurnālu bez raksta par Java valodu. Par viņu rakstīja pat tādi populāri laikraksti un žurnāli kā The New York Times, The Washington Post un Business Week.

Nav iespējams atcerēties, ka Nacionālais sabiedriskais radio jebkad būtu veltījis desmit minūšu raidījumu programmēšanas valodai. Tas, vai tas ir labi vai slikti, ir atkarīgs no skatījuma. 100 miljonu dolāru ieguldījums ražošanā programmatūra izveidots, izmantojot konkrētu programmēšanas valodu?! CNN, CNBC un citi plašsaziņas līdzekļi ir runājuši un joprojām runā par to, kā Java var un darīs to.

Tomēr šī grāmata ir domāta nopietniem programmētājiem, un, tā kā Java ir nopietna programmēšanas valoda, mums ir daudz ko aptvert. Tāpēc mēs neiedziļināsimies reklāmas solījumu analīzē un mēģināsim noskaidrot, kas tajos ir patiesība un kas ir fikcija. Tā vietā mēs pietiekami detalizēti aprakstīsim Java valodu kā programmēšanas valodu (ieskaitot, protams, iespējas, kas ļauj to izmantot darbam internetā, kas patiesībā izraisīja tik lielu reklāmas ažiotāžu). Pēc tam mēs mēģināsim nošķirt realitāti no fantāzijas, paskaidrojot, ko Java valoda var un ko nevar.

Sākumā starp reklāmas solījumiem un Java valodas reālajām iespējām bija bezdibenis. Pieaugot tehnoloģijai, tā kļuva stabilāka un uzticamāka, un cerības samazinājās līdz saprātīgam līmenim. Java valoda tagad arvien vairāk tiek izmantota, lai izveidotu "starpprogrammatūru", kas sazinās starp klientiem un servera resursiem (piemēram, datu bāzēm).

Lai gan šīs svarīgās lietojumprogrammas nav pārsteidzošas, tieši šajā jomā Java valoda ir izrādījusies visnoderīgākā, pateicoties tās mašīnas neatkarībai, daudzpavedienu un tīkla programmēšanas iespējām. Turklāt Java valoda ir ieņēmusi vadošo lomu iegulto sistēmu jomā, kļūstot par de facto standartu pārnēsājamām ierīcēm, virtuālajiem kioskiem, borta datoru datoriem un tamlīdzīgi. Tomēr pirmie mēģinājumi pārrakstīt plaši izmantotās Java programmas personālajiem datoriem bija neveiksmīgi - iegūtās lietojumprogrammas izrādījās mazjaudīgas un lēnas. Līdz ar jaunās versijas parādīšanos dažas no šīm problēmām ir atrisinātas, un tomēr jāatzīst, ka lietotājiem kopumā ir pilnīgi vienalga, kādā valodā ir rakstītas viņu iegādātās programmas. Mēs uzskatām, ka galvenās Java valodas priekšrocības parādīsies jauna veida ierīču un lietojumprogrammu izveidē, nevis esošo programmu pārrakstīšanā.

Java valoda kā programmēšanas rīks

Kā Java programmēšanas valoda ir pārsniegusi reklāmas solījumus. Neapšaubāmi, tā ir viena no labākajām valodām, kas pieejama nopietniem programmētājiem. Java var būt lieliska programmēšanas valoda, taču tagad, iespējams, ir par vēlu. Kad parādās jauna programmēšanas valoda, nekavējoties rodas satraucoša problēma par tās saderību ar iepriekš izveidoto programmatūru. Turklāt, pat ja izmaiņas šajās programmās var veikt, nepārkāpjot to tekstu, tādas valodas, kuru sabiedrība ir tik ļoti atzinīgi novērtējusi, piemēram, Java valodas, veidotājiem ir grūti tieši pateikt: "Jā, mēs varam ir pieļāvuši kļūdu, izstrādājot versiju X, bet Y versija būs labāka." Rezultātā, gaidot turpmāko uzlabojumu parādīšanos, jākonstatē, ka Java valodas struktūra tuvākajā laikā būtiski nemainīsies.

Acīmredzamais jautājums ir: Kā ir uzlabota Java valoda?". Izrādās, tas tika darīts nevis pilnveidojot pašu programmēšanas valodu, bet gan fundamentāli mainot Java valodā rakstīto programmu bibliotēkas. Sun Microsystems ir mainījis visu: no atsevišķu bibliotēkas funkciju nosaukumiem (padarot tās jēgpilnākas) un grafisko moduļu darbības metodes (mainot notikumu apstrādes veidu un daļēji pārrakstot darba programmas), un beidzot ar jaunu valodas līdzekļu izveidi, piemēram, drukāšanas iespējas, kas nebija Java 1.0. Rezultāts ir daudz noderīgāka programmēšanas platforma nekā visas iepriekšējās versijas Java valoda.

Microsoft ir izlaidusi savu produktu ar nosaukumu J++, kas ir saistīts ar Java valodu. J++ valodu interpretē virtuālā mašīna, kas ir saderīga ar Java virtuālo mašīnu, izpildot baitkodu, taču saskarnes ar ārējiem kodiem šajās valodās ievērojami atšķiras. J++ un Java valodām ir gandrīz tāda pati sintakse. Tomēr Microsoft ir izveidojis papildu valodas konstrukcijas. Visi no tiem ir diezgan apšaubāmas vērtības, izņemot Windows saskarne API. Papildus tam, ka šīm valodām ir vienāda sintakse, to galvenās bibliotēkas (virknes, utilītas, tīkla programmēšanas rīki, daudzpavedienu rīki, matemātikas bibliotēkas utt.) būtībā ir vienādas.

Tomēr grafiskās bibliotēkas, lietotāja interfeiss un piekļuve attāliem objektiem šīm valodām ir pilnīgi atšķirīgas. Pašlaik Microsoft vairs neatbalsta J++ valodu, jo ir izstrādājusi jaunu C# valodu, kurai ir daudz līdzību ar Java, bet tiek izmantota cita virtuālā mašīna. Šī grāmata neaptver J++ vai C#.

Java valodas priekšrocības

1) Viena no galvenajām Java valodas priekšrocībām ir neatkarība no platformas, kurā programmas tiek izpildītas: To pašu kodu var palaist operētājsistēmās Windows, Solaris, Linux, Machintosh utt.
Tas patiešām ir nepieciešams, ja programmas tiek lejupielādētas no interneta, lai tās vēlāk izpildītu dažādās operētājsistēmās.

2) Vēl viena priekšrocība ir tā Java valodas sintakse ir līdzīga C ++ valodas sintakse, un programmētājiem, kuri zina C un C ++ valodas, to nav grūti apgūt. Tiesa, programmētājiem, kuri zina Visual Basic valodu, šī sintakse var būt neparasta.

Ja jūs nekad neesat programmējis C++ valodā, daži šajā sadaļā lietotie termini var jums nebūt skaidri. Šajā gadījumā varat to izlaist. Līdz 6. nodaļas beigām šie termini jums kļūs pazīstami.

3) arī Java - pilnībā objektorientēta valoda, pat vairāk nekā C++. Visas Java valodas entītijas ir objekti, izņemot dažus primitīvus veidus, piemēram, skaitļus. (Tā kā ir viegli izstrādāt sarežģītus projektus, izmantojot objektorientēto programmēšanu, tā ir aizstājusi vecāko strukturēto programmēšanu. Ja neesat pazīstams ar objektorientēto programmēšanu, 3.-6. nodaļā būs sniegta visa nepieciešamā informācija par to.)

Tomēr nepietiek, lai izstrādātu citu, nedaudz uzlabotu C++ valodas dialektu. Ir ļoti svarīgi, lai Java ir vieglāk izstrādāt programmas bez kļūdām nekā C++. Kāpēc? Java valodas dizaineri ir ilgi un smagi domājuši par to, kāpēc programmās, kas rakstītas C++ valodā, ir tik daudz kļūdu. Viņi nodrošināja Java valodu ar rīkiem, lai novērstu iespēju izveidot programmas, kas slēptu visbiežāk sastopamās kļūdas. Lai to izdarītu, Java valodā tiek veiktas šādas darbības.

4) Atmiņas skaidras piešķiršanas un atbrīvošanas iespēja ir izslēgta.
Atmiņu Java valodā automātiski atbrīvo atkritumu savākšanas mehānisms. Programmētājs tiek garantēts pret kļūdām, kas saistītas ar nepareizu atmiņas izmantošanu.

5) Tiek ieviesti patiesi masīvi, un rādītāja aritmētika ir aizliegta.
Tagad programmētāji principā nevar izdzēst datus no atmiņas ļaunprātīga izmantošana norādes.

6) Ir izslēgta iespēja sajaukt piešķiršanas operatoru ar vienlīdzības salīdzināšanas operatoru.
Tagad jūs pat nevarat kompilēt if(ntries = 3) . . . (Visual Basic programmētāji šeit var nepamanīt nekādu problēmu, jo šī kļūda ir vislielākās neskaidrības C un C++ valodā).

7) Daudzkārtēja mantošana ir izslēgta. Tas ir aizstāts ar jaunu koncepciju - interfeisu, kas aizgūts no Objective C valodas.
Interfeiss programmētājam sniedz gandrīz visu, ko programmētājs var iegūt no vairākkārtējas mantojuma, vienlaikus izvairoties no sarežģītības, kas rodas, pārvaldot klašu hierarhiju.

Java valodas raksturīgās iezīmes

Vienkārši
Interpretēja
Izplatīts
Uzticams
Drošs
mašīna neatkarīga
Objektorientēts
augsta veiktspēja
daudzpavedienu
dinamisks
Neatkarīga no datora arhitektūras

Mēs jau esam pieskārušies dažiem no šiem punktiem pēdējā sadaļā. Šajā sadaļā mēs: sniegsim citātus no Java valodas rokasgrāmatas, atklājot valodas iezīmes; Dalīsimies ar lasītājiem dažās pārdomās par noteiktām valodas īpašībām, pamatojoties uz mūsu pašu pieredzi ar tās jaunāko versiju.

Vienkārši

Mēs vēlējāmies izveidot sistēmu, kas ir viegli programmējama, neprasa papildu apmācību un ņem vērā pastāvošo praksi un programmēšanas standartus. Tāpēc, lai gan mēs uzskatījām, ka C++ nav šim nolūkam piemērota, Java tika izstrādāta tā, lai tā būtu pēc iespējas līdzīga, lai padarītu sistēmu pieejamāku. Java valodā nav daudz nepietiekami izmantotu, neskaidru un neskaidru C++ līdzekļu, kas, mūsuprāt, nodara vairāk ļauna nekā laba.

Java valodas sintakse būtībā ir C++ valodas sintakses pilnveidota versija. Šai valodai nav galvenes failu, rādītāju aritmētikas (un pašu rādītāju), struktūru, savienību, operatoru pārslodzes, virtuālo bāzes klašu utt. (Atšķirības starp Java un C++ valodām ir aprakstītas piezīmēs par C++ valodu, kas izkaisītas visā grāmatā.) Tomēr izstrādātāji necentās novērst visus C++ valodas trūkumus.

Piemēram, slēdža priekšraksta sintakse Java valodā ir palikusi nemainīga. Zinot C++ valodu, būs viegli pārslēgties uz Java valodas sintaksi.
Ja parasti izmantojat vizuālās programmēšanas vidi (piemēram, Visual Basic), Java valoda jums būs sarežģīta.
Tā sintakse bieži izskatās diezgan dīvaina (lai gan nav grūti saprast izteiciena nozīmi). Vēl svarīgāk ir tas, ka, strādājot Java valodā, jums ir jāprogrammē daudz vairāk. Visual Basic valodas skaistums ir tāds, ka tās vizuālās programmēšanas vide ļauj gandrīz automātiski izveidot lietojumprogrammu infrastruktūru. Lai sasniegtu tādu pašu rezultātu, izmantojot Java valodu, ir jāprogrammē ar roku, taču tā rezultātā programmas ir daudz īsākas.

Tomēr ir arī trešais programmēšanas vides veids, kas ļauj izveidot programmas, izmantojot vilkšanas un nomešanas tehnoloģiju.

Vēl viens vienkāršības aspekts ir īsums. Viens no Java valodas mērķiem ir dot iespēju izstrādāt programmas, kuras mazās iekārtās var palaist pilnīgi neatkarīgi. Galvenā tulka un klases atbalsta lielums ir aptuveni 40 KB; standarta bibliotēkas un vītņu veidošanas rīki (īpaši autonomais mikrokodolu) aizņem vēl 17:Kb.
Tas ir milzīgs panākums. Tomēr ņemiet vērā, ka GUI atbalsta bibliotēkas ir daudz lielākas.

Objektorientēts

Vienkārši sakot, objektorientētā programmēšana ir programmēšanas tehnika, kas koncentrējas uz datiem (t.i., objektiem) un līdzekļiem, lai tiem piekļūtu. Zīmējot galdniecības analoģiju, uz objektu orientētais meistars galvenokārt koncentrējas uz krēslu, ko viņš izgatavo, un tikai sekundāri interesējas par tam nepieciešamajiem instrumentiem; tajā pašā laikā galdnieks, kas nav orientēts uz objektiem, domā tikai par saviem darbarīkiem. Java un C++ objektorientētās īpašības būtībā ir vienādas.

Objektorientācija jau ir pierādījusi savu vērtību pēdējo 30 gadu laikā, un bez tās nav iespējams iedomāties modernu programmēšanas valodu. Patiešām, Java valodas objektorientētās funkcijas ir salīdzināmas ar C++ funkcijām. Galvenā atšķirība starp tām slēpjas daudzkārtējās mantošanas mehānismā, kuram Java valoda atrada labāku risinājumu, kā arī Java valodas metaklases modelī.

Refleksijas (5. nodaļa) un objektu serializācijas (12. nodaļa) mehānismi ļauj realizēt pastāvīgus objektus un rīkus grafisku lietotāja interfeisu izveidei, pamatojoties uz gataviem komponentiem.

Ja jūs nekad neesat programmējis objektorientētā valodā, uzmanīgi izlasiet 4.-6. nodaļu. Šīs nodaļas iepazīstina ar objektorientētās programmēšanas pamatiem un parāda, kā to var izmantot, lai izstrādātu sarežģītus projektus, izmantojot tradicionālās procesuālās valodas, piemēram, C vai Basic.

Izplatīts

Java ir liela programmu bibliotēka datu pārsūtīšanai, pamatojoties uz TCP/IP (Transmission Control Protocol/Internet Protocol) protokoliem, piemēram, HTTP (Hypertext Transfer Protocol) vai FTP (File Transfer Protocol). failu pārsūtīšanas protokols). Programmas, kas rakstītas Java valodā, var atvērt un piekļūt objektiem tīklā, izmantojot unURL (Uniform Resource Location — universālā resursa adrese) tikpat vienkārši kā lokālais tīkls.

Java valoda nodrošina jaudīgus un ērtus rīkus darbam tīklā. Ikviens, kurš kādreiz ir mēģinājis rakstīt programmas internetam citās valodās, būs patīkami pārsteigts par to, cik viegli Java tiek atrisināti vissarežģītākie uzdevumi, piemēram, tīkla savienojumu atvēršana (ligzdas savienojums). Elegants mehānisms, kas sastāv no tā sauktajiem servlets (servlets), padara darbu serverī ārkārtīgi efektīvu.

Servletus atbalsta daudzi populāri tīmekļa serveri. (Tīklošana tiks apskatīta otrajā sējumā.) Komunikāciju starp izplatītajiem objektiem Java valodā nodrošina attālo metožu izsaukšanas mehānisms (šī tēma ir apskatīta arī otrajā sējumā).

Uzticams

Java valoda ir izstrādāta, lai izveidotu programmas, kurām ir jādarbojas uzticami visās situācijās. Java valodas uzmanības centrā ir agrīna atklāšana iespējamās kļūdas, dinamiska pārbaude (izpildlaikā) un izvairīšanās no situācijām, kurās ir iespējamas kļūdas... Vienīgā būtiskā atšķirība starp Java un C++ ir Java valodas rādītāja modelis, kas novērš atmiņas pārrakstīšanas un datu sabojāšanas iespēju.

Šis īpašums ir arī ļoti noderīgs. Java valodas kompilators atklāj kļūdas, kas citās valodās tiek atklātas tikai izpildes laikā. Turklāt programmētāji, kuri ir pavadījuši daudzas stundas, meklējot atmiņas bojājumu kļūdu slikta rādītāja dēļ, būs ļoti priecīgi, ka principā šādas problēmas nevar rasties Java valodā.

Ja kādreiz esat programmējis Visual Basic vai COBOL valodās, kurās netiek tieši izmantoti norādes, iespējams, nesaprotat, kāpēc tas ir tik svarīgi. C programmētājiem ir daudz mazāk paveicies. Viņiem ir nepieciešami norādes, lai piekļūtu virknēm, masīviem, objektiem un pat failiem. Programmējot Visual Basic, nekas no tā nav nepieciešams, un programmētājam nav jāuztraucas par atmiņas piešķiršanu šīm entītijām. No otras puses, daudzas datu struktūras valodā, kurā nav norādes, ir ļoti grūti ieviest. Parastām struktūrām, piemēram, virknēm un masīviem, norādes nav vajadzīgas. Rādītāju pilns spēks izpaužas tikai tur, kur no tiem nevar iztikt, piemēram, veidojot saistītie saraksti. Java programmētājs ir uz visiem laikiem saudzējis sliktas norādes, nepareizas sadales un atmiņas noplūdes.

Drošs

Java valoda ir paredzēta lietošanai tīklā vai izplatītā vidē. Šī iemesla dēļ liela uzmanība ir pievērsta drošībai. Java valoda ļauj izveidot sistēmas, kas ir aizsargātas pret vīrusiem un manipulācijām.

Pirmajā izdevumā mēs rakstījām: "Nekad nesaki nekad", un mums bija taisnība. Prinstonas universitātes drošības ekspertu grupa atklāja pirmās Java 1.0 drošības kļūdas neilgi pēc pirmās JDK versijas nonākšanas pārdošanā. Turklāt gan viņi, gan citi speciālisti turpināja atrast arvien vairāk kļūdu visu nākamo Java valodas versiju drošības mehānismos.

Šīs situācijas pozitīvā puse ir tā, ka Java valodu izstrādes grupa ir paziņojusi par nulles toleranci pret jebkādām kļūdām drošības sistēmā un nekavējoties sākusi novērst visas sīklietotnes drošības mehānismā konstatētās problēmas. Jo īpaši, publicējot Java valodas tulka iekšējās specifikācijas, Sun ir ievērojami atvieglojusi slēpto drošības kļūdu atrašanu un nodevusi tās neatkarīgiem ekspertiem.

Tas palielināja iespējamību, ka visas drošības ievainojamības drīz tiks atklātas. Jebkurā gadījumā ir ārkārtīgi grūti apkrāpt Java valodas drošības sistēmu. Līdz šim atrastās kļūdas ir bijušas gandrīz nemanāmas, un to skaits ir (salīdzinoši) neliels.

Sun drošības tīmekļa lapai ir šāds URL: http://java.sun.com/sfaq/.

Tālāk ir norādītas dažas situācijas, kuru rašanos Java drošības sistēma novērš.

1) Izpildāmās programmas steka pārpilde, ko izraisīja bēdīgi slavenais "tārps", kas izplatījās internetā.

2) Bojājumi atmiņas apgabaliem, kas atrodas ārpus procesam atvēlētās vietas.

3) lokālo failu lasīšana un rakstīšana, izmantojot drošu klases ielādētāju, piemēram, tīmekļa pārlūkprogrammu, kas aizliedz piekļuvi šādiem failiem.

Visi šie drošības pasākumi ir piemēroti un parasti darbojas nevainojami, taču rīcības brīvība nekad nenāk par ļaunu. Lai gan līdz šim atklātās kļūdas nebūt nav bijušas triviālas un to atrašanas detaļas bieži tiek turētas noslēpumā, jāatzīst, ka pierādīt Java valodas drošību, visticamāk, vairs nav iespējams.

Laika gaitā valodai ir pievienoti jauni drošības līdzekļi. Sākot ar versiju 1.1, Java valoda ieviesa digitāli parakstītu klašu jēdzienu. Izmantojot klasi ar ciparparakstu, varat būt drošs par tās autoru. Ja tam uzticaties, varat piešķirt šai klasei visas jūsu datorā pieejamās privilēģijas.

Microsoft piedāvātais alternatīvais koda piegādes mehānisms ir balstīts uz ActiveX tehnoloģiju un drošības nolūkos izmanto tikai ciparparakstus. Acīmredzot ar to nepietiek – ikviens Microsoft programmatūras lietotājs var apliecināt, ka pazīstamu ražotāju programmas bieži avarē, tādējādi radot datu sabojāšanas risku. Drošības sistēma Java valodā ir daudz spēcīgāka par ActiveX tehnoloģiju, jo tā kontrolē aplikāciju no tās palaišanas brīža un neļauj tai nodarīt kaitējumu.

neatkarīga arhitektūra

Kompilators ģenerē objekta failu, kura formāts nav atkarīgs no datora arhitektūras – sastādīto programmu var izpildīt uz jebkuriem Java programmu izpildes sistēmas kontrolē esošajiem procesoriem. Lai to izdarītu, Java valodas kompilators ģenerē komandas, baitu kodu, kas nav atkarīgas no konkrētās datora arhitektūras. Baitkods ir izveidots tā, lai to varētu viegli interpretēt jebkura mašīna vai pārtulkot no mašīnas atkarīgā kodā.

Nav jauna ideja. Pirms vairāk nekā 20 gadiem gan Niclaus Wirth izstrādātā Pascal ieviešanas sistēma, gan UCSD Pascal sistēma izmantoja vienu un to pašu tehnoloģiju. Baitkodu izmantošana dod lielu ieguvumu programmas izpildē (tomēr sinhronā kompilācija daudzos gadījumos to kompensē). Java valodas izstrādātāji ir paveikuši lielisku darbu, izstrādājot baitkoda instrukciju kopu, kas lieliski darbojas lielākajā daļā mūsdienu datori, viegli pārvēršot reālās mašīnas instrukcijās.

mašīna neatkarīga

Atšķirībā no C un C++ valodām, Java specifikācijā nav aspektu, kas būtu atkarīgi no ieviešanas sistēmas. Gan pamatdatu tipu lielums, gan aritmētiskās darbības ar tiem ir precīzi definētas.

Piemēram, tips int Java valodā vienmēr nozīmē 32 bitu veselu skaitli. Programmā C un C++ tips int var nozīmēt vai nu 16 bitu veselu skaitli, 32 bitu veselu skaitli vai patvaļīga lieluma veselu skaitli, kā to ir izvēlējies konkrēta kompilatora izstrādātājs. Vienīgais ierobežojums ir tāds, ka int izmērs nevar būt mazāks par īso int izmēru un lielāks par garo int izmēru. Fiksētais ciparu veidu lielums novērš daudzus traucējumus, kas saistīti ar programmu palaišanu dažādi datori. Binārie dati tiek glabāti un pārsūtīti fiksētā formātā, kas arī ļauj izvairīties no pārpratumiem, kas saistīti ar atšķirīgu baitu secību dažādās platformās (konflikts “lielais endians/mazais endians”). Līnijas tiek saglabātas standarta formāts Unicode.

Bibliotēkas, kas ir sistēmas daļa, definē no mašīnas neatkarīgu interfeisu. Piemēram, valoda nodrošina abstraktu Window klasi un tās implementācijas operētājsistēmām Unix, Windows un Macintosh.

Ikviens, kurš kādreiz ir mēģinājis uzrakstīt programmu, kas vienlīdz labi darbojas operētājsistēmās Windows, Macintosh un desmit Unix versijās, zina, ka tas ir ļoti grūts uzdevums. Java versija veica varonīgu mēģinājumu atrisināt šo problēmu, nodrošinot vienkāršu rīku komplektu, kas pielāgo izplatītos lietotāja interfeisa elementus lielam skaitam programmatūras platformu. Diemžēl bibliotēka, pie kuras tika ieguldīts liels darbs, neļāva sasniegt pieņemamus rezultātus dažādās platformās. (Tajā pašā laikā grafikas programmās dažādās platformās parādījās dažādas kļūdas.)

Tomēr tas bija tikai sākums. Daudzās lietojumprogrammās mašīnas neatkarība ir daudz svarīgāka par grafiskā lietotāja interfeisa izsmalcinātību. Šīs lietojumprogrammas ir guvušas labumu no Java 1.0 ieviešanas. Tomēr GUI rīkkopa tagad ir pilnībā pārveidota un vairs nav atkarīga no resursdatora lietotāja interfeisa. Jauna versija jēgpilnāki un, mūsuprāt, lietotājam pievilcīgāki nekā iepriekšējie.

Interpretēja

Java valodas tulku var nosūtīt uz jebkuru mašīnu un izpildīt baitkodu tieši tajā. Tā kā saišu rediģēšana ir vienkāršāks process, programmēšana var kļūt daudz ātrāka un efektīvāka.

Varbūt tā ir priekšrocība lietojumprogrammu izstrādē, taču citāts ir nepārprotams pārspīlējums. Jebkurā gadījumā JSDK (Java Software Development Kit) iekļautais Java valodas kompilators ir diezgan lēns. (Daži trešā veida kompilatori, piemēram, IBM, ir daudz ātrāki.) Pārkompilācijas ātrums ir tikai viens no programmēšanas vides efektivitātes faktoriem. Salīdzinot Java un Visual Basic programmēšanas vides ātrumu, jūs varētu būt vīlušies.

augsta veiktspēja

Lai gan parasti interpretētajiem baitkodiem ir vairāk nekā pietiekama veiktspēja, ir situācijas, kad ir nepieciešama vēl labāka veiktspēja. Baitkodus var tulkot lidojumā (izpildlaikā) mašīnkodos konkrētajam procesoram, kurā darbojas lietojumprogramma.

Ja baitkodu izpildei tiek izmantots tulks, nevajadzētu lietot frāzi " augsta veiktspēja Tomēr daudzās platformās ir iespējama cita veida kompilācija, ko nodrošina sinhronie kompilatori (just-in-time kompilatori-JIT). Tie pārvērš baitkodu no mašīnas atkarīgā kodā, saglabā rezultātu atmiņā un pēc tam to izsauc. Tā kā šī interpretācija tiek izpildīta tikai vienu reizi, šī pieeja palielina ātrumu vairākas reizes.

Lai gan sinhronie kompilatori joprojām ir lēnāki nekā mašīnas specifiskie kompilatori, tie ir vismaz daudz ātrāki par tulkiem, nodrošinot dažām programmām 10x vai pat 20x paātrinājumus. Šī tehnoloģija tiek pastāvīgi uzlabota, un galu galā tā var sasniegt ātrumu, ko tradicionālie kompilatori nekad nepārsniegs. Piemēram, sinhronais kompilators var noteikt, kura koda daļa tiek izpildīta biežāk, un optimizēt to izpildes ātrumam.

DAUDZVIETNES

Nodrošina labāku interaktivitāti un programmas izpildi.

Ja kādreiz esat izmēģinājis daudzpavedienu izmantošanu jebkurā citā programmēšanas valodā, jūs būsiet patīkami pārsteigts, cik viegli to izdarīt Java. Java valodas pavedieni var izmantot daudzprocesoru sistēmu priekšrocības, ja operētājsistēma to atļauj. Diemžēl straumju ieviešana lielākajā daļā platformu ir ļoti atšķirīga, un Java valodas izstrādātāji nemēģina panākt vienveidību. Tikai pavedienu izsaukšanas kods paliek nemainīgs visām mašīnām; Java valoda atstāj vairākpavedienu ieviešanu pamatā esošās operētājsistēmas vai pavedienu bibliotēkas ziņā. (Plūsmas ir aprakstītas 2. sējumā.) Neskatoties uz to, tā ir organizēšanas vienkāršība daudzpavedienu skaitļošana padara Java valodu tik pievilcīgu servera programmatūras izstrādei.

dinamisks

Daudzos veidos Java ir dinamiskāka nekā C vai C++. Tas ir izstrādāts, lai viegli pielāgotos pastāvīgi mainīgai videi. Jūs varat brīvi pievienot jaunas metodes un objektus bibliotēkām, neradot nekādu kaitējumu. Java valoda ļauj viegli iegūt informāciju par programmas norisi.

Tas ir ļoti svarīgi, ja vēlaties pievienot kodu programmai, kas jau darbojas. Lielisks piemērs tam ir kods, kas tiek lejupielādēts no interneta, lai to izpildītu pārlūkprogramma. Programmā Java 1.0 informācijas iegūšana par izpildprogrammas gaitu nepavisam nebija vienkārša, taču pašreizējā Java valodas versija programmētājam atklāj gan izpildprogrammas objektu struktūru, gan uzvedību.
Tas ir ļoti vērtīgi sistēmām, kurām programmas izpildes laikā jāanalizē objekti. Šīs sistēmas ietver GUI rīkus, viedos atkļūdotājus, spraudņus un objektu datu bāzes.

Java valoda un internets

Ideja ir vienkārša – lietotāji lejupielādē Java baitu kodus no interneta un palaiž tos savās iekārtās. Java programmas, kas darbojas tīmekļa pārlūkprogrammās, sauc par sīklietotnēm. Lai lietotu sīklietotni, ir nepieciešama tīmekļa pārlūkprogramma, kas atbalsta Java valodu un spēj interpretēt baitu kodus. Java avota kodu licencē uzņēmums Sun, kas uzstāj uz pašas valodas un tās galveno bibliotēku struktūras nemainīgumu. Diemžēl realitāte nav tāda. Dažādas pārlūkprogrammu Netscape un Internet Explorer versijas atbalsta dažādas Java valodas versijas, un dažas no šīm versijām ir ievērojami novecojušas. Šī neveiksmīgā situācija rada arvien vairāk šķēršļu sīklietotņu izstrādē, kuras izmanto priekšrocības jaunākā versija Java valoda. Lai atrisinātu šo problēmu, uzņēmums Sun ir izstrādājis Java spraudni, kas nodrošina vismodernāko vidi Java programmu palaišanai, kuru pamatā ir pārlūkprogrammas Netscape un Internet Explorer.

Sīklietotnes ielāde ir kā attēla iegulšana tīmekļa lapā. Sīklietotne kļūst par lapas daļu, un teksts apņem vietu, ko tā aizņem. Tomēr atšķirība ir tāda, ka attēls tagad ir dzīvs. Tā reaģē uz lietotāja komandām, maina tās izskats un nodrošina datu pārsūtīšanu starp datoru, kurā tiek skatīta sīklietotne, un datoru, kas kontrolē sīklietotni.

Sīklietotnes ielāde ir kā attēla ievietošana tīmekļa lapā. Sīklietotne kļūst par lapas daļu, un teksts apņem vietu, ko tā aizņem. Fakts ir tāds, ka attēls ir "dzīvs". Tas reaģē uz lietotāja komandām, maina savu izskatu un pārsūta datus starp datoru, kurā darbojas sīklietotne, un datoru, kurā darbojas sīklietotne.

Uz att. Attēlā 1.1 ir parādīts labs piemērs dinamiskai Web lapai, kas veic sarežģītus aprēķinus un izmanto sīklietotni, lai zīmētu molekulas. Lai labāk izprastu molekulas struktūru, varat to pagriezt vai tuvināt, izmantojot peli. Šādas manipulācijas nevar īstenot statiskās Web lapās, taču sīklietotnes to ļauj. (Šo sīklietotni var atrast vietnē http://jmol.sourceforge.net.)

Rīsi. 1.1. Jmol sīklietotne

Sīklietotnes var izmantot, lai Web lapai pievienotu jaunas pogas un teksta laukus. Tomēr šādas sīklietotnes pa tālruņa līniju tiek ielādētas lēni.

To pašu var izdarīt ar dinamisko HTML, HTML formām (hiperteksta iezīmēšanas valoda) vai skriptu valodu, piemēram, JavaScript. Protams, pirmās sīklietotnes bija paredzētas animācijai: vērpjošie globusi, dejojoši multfilmu varoņi, mākslinieciski teksti utt. Tomēr lielākā daļa no iepriekšminētajiem var izveidot arī animētus GIF, un dinamiskais HTML apvienojumā ar skriptu nodrošina daudz vairāk nekā sīklietotnes.

Pārlūkprogrammas nesaderības un lejupielādes procesa nekonsekvences dēļ lēna tīkla savienojumi Web lapām izstrādātās sīklietotnes nav bijis milzīgs sasniegums. Vietējos tīklos (iekštīklos) situācija ir pavisam cita. Viņiem parasti nav joslas platuma problēmu, tāpēc sīklietotnes ielādes laiks nav nozīmīgs. Vietējā tīklā varat izvēlēties vajadzīgo pārlūkprogrammu vai izmantot Java spraudni. Darbinieki nevar pārvietot tīklā piegādāto programmu uz nepareizu vietu vai instalēt to nepareizi, un sistēmas administrators nav nepieciešams apiet visas klientu mašīnas un atjaunināt tajās esošās programmas. Daudzas korporācijas ir izstrādājušas daudzas programmas krājumu pārvaldībai, atvaļinājumu plānošanai, ceļojumu atlīdzināšanai un tamlīdzīgi sīklietotņu veidā, izmantojot pārlūkprogrammas.

Kamēr mēs rakstījām šo grāmatu, svārsts pagriezās atpakaļ no klienta puses programmēšanas uz servera puses programmēšanu. Jo īpaši lietojumprogrammu serveri var izmantot uzraudzības iespējas virtuālā iekārta Java automātiskai slodzes līdzsvarošanai, datu bāzes saišu apvienošanai, objektu sinhronizācijai, drošai izslēgšanai un atkārtotai ielādei un citiem procesiem, kas nepieciešami mērogojamām servera lietojumprogrammām, kuras ir gandrīz neiespējami pareizi ieviest. Tādējādi programmētājiem, kas veido aplikācijas, ir iespēja iegādāties šos sarežģītos mehānismus, nevis pašiem tos izstrādāt. Tas palielināja programmētāju produktivitāti – viņi koncentrējās uz savu programmu loģiku, nenovēršot uzmanību no detaļām, kas saistītas ar serveru darbību.

Java ir Sun microsystems programmēšanas valoda. Sākotnēji izstrādāta kā programmēšanas valoda elektroniskās ierīces, bet vēlāk tika izmantots servera programmatūras lietojumprogrammu rakstīšanai. Java programmas ir vairāku platformu, tas ir, tās var darboties jebkurā operētājsistēmā.

Java programmēšanas pamati

Java kā objektu orientēta valoda ievēro OOP pamatprincipus:

  • mantojums;
  • polimorfisms;
  • iekapsulēšana.

"Java" centrā, tāpat kā citos OOP, atrodas objekts un klase ar konstruktoriem un īpašībām. Java programmēšanas valodu labāk sākt apgūt nevis no oficiālajiem resursiem, bet gan no rokasgrāmatām iesācējiem. Šādās rokasgrāmatās funkcijas ir sīki aprakstītas, ir sniegti kodu piemēri. Grāmatas, piemēram, Java programmēšanas valoda iesācējiem, sīki izskaidro nosauktās valodas pamatprincipus un funkcijas.

Īpatnības

Java programmēšanas valodas kods tiek tulkots baitkodā un pēc tam izpildīts JVM virtuālajā mašīnā. Konvertēšana uz baitkodu tiek veikta Javac, Jikes, Espresso, GCJ. Ir kompilatori, kas tulko C valodu Java baitkodā. Tādējādi C lietojumprogramma var darboties jebkurā platformā.

"Java" sintaksi raksturo šādi:

  1. Klases nosaukumiem jāsākas ar lielo burtu. Ja nosaukums sastāv no vairākiem vārdiem, tad otrajam jāsākas ar lielajiem burtiem.
  2. Ja metodes veidošanai tiek izmantoti vairāki vārdi, tad otrajam no tiem jāsākas ar lielo burtu.
  3. Apstrāde sākas ar main() metodi - tā ir daļa no katras programmas.

Veidi

Java programmēšanas valodai ir 8 primitīvi veidi. Tie ir parādīti zemāk.

  • Būla veids ir Būla veids, kam ir tikai divas vērtības patiesa un nepatiesa.
  • Baits ir mazākais veselo skaitļu veids, kura izmērs ir 1 baits. To izmanto, strādājot ar failiem vai neapstrādātiem binārajiem datiem. Ir diapazons no -128 līdz 127.
  • Short ir diapazons no -32768 līdz 32767, un to izmanto, lai attēlotu skaitļus. Šāda veida mainīgo lielums ir 2 baiti.
  • Int apzīmē arī skaitļus, taču tā izmērs ir 4 baiti. To visbiežāk izmanto, lai strādātu ar veseliem skaitļiem, un baiti un saīsinājumi dažkārt tiek paaugstināti par int.
  • Garie tiek izmantoti lieliem veseliem skaitļiem. Iespējamās vērtības ir no -9223372036854775808 līdz 9223372036854775807.
  • Funkciju apzīmēšanai izmanto pludiņu un dubulto. To atšķirība ir tāda, ka pludiņš ir ērts, ja nav nepieciešama augsta precizitāte skaitļa daļā.
  • Double parāda visas rakstzīmes aiz norobežotāja ".", un peldēt - tikai pirmo.
  • Virkne ir visbiežāk izmantotais primitīvais veids, ar kuru definēt virknes.

Klases un objekti

Klasēm un objektiem ir svarīga loma Java programmēšanas valodas apguvē iesācējiem.

Klase definē objekta veidni, tai jābūt atribūtiem un metodēm. Lai to izveidotu, izmantojiet atslēgvārdu Class. Ja tas ir izveidots atsevišķā failā, tad klases un faila nosaukumam ir jābūt vienādam. Pats nosaukums sastāv no divām daļām: nosaukuma un paplašinājuma.Java.

Programmā Java varat izveidot apakšklasi, kas pārmantos vecāku metodes. Šim nolūkam tiek izmantots vārds paplašināt:

  • klases klases nosaukums paplašina superclassname();

Konstruktors ir jebkuras klases dalībnieks, pat ja tas nav skaidri noteikts. Šajā gadījumā kompilators to izveido pats:

  • publiskā klase Klase(publiskā klase()( ) publiskā klase(virknes nosaukums)( ))

Konstruktora nosaukums ir tāds pats kā klases nosaukums, pēc noklusējuma tam ir tikai viens parametrs:

  • publisks kucēns (virknes nosaukums)

Objekts tiek izveidots no klases, izmantojot operatoru new():

  • Punkts p = jauns punkts()

Tas saņem visas klases metodes un īpašības, ar kuru palīdzību tas mijiedarbojas ar citiem objektiem. Vienu objektu var izmantot vairākas reizes saskaņā ar dažādiem mainīgajiem.

    Punkts p = jauns punkts()

    klase divi punkti (

    public static void main(String args) (

    Punkts p1 = new Point();

    Punkts p2 = new Point();

    Objektu mainīgie un objekti ir pilnīgi dažādas entītijas. Objektu mainīgie ir saites. Tie var norādīt uz jebkuru neprimitīva tipa mainīgo. Atšķirībā no C++, to tipa pārveidošana ir stingri reglamentēta.

    Lauki un metodes

    Lauki ir visi mainīgie, kas saistīti ar klasi vai objektu. Pēc noklusējuma tie ir lokāli, un tos nevar izmantot citās klasēs. Operators "." tiek izmantots, lai piekļūtu laukiem:

    • klases nosaukuma mainīgais

    Statiskus laukus var norādīt ar statisko atslēgvārdu. Šādi lauki ir vienīgais veids, kā saglabāt globālos mainīgos. Tas ir saistīts ar faktu, ka Java vienkārši nav globālu mainīgo.

    Ieviesta iespēja importēt mainīgos, lai piekļūtu no citām pakotnēm:

    • importēt statisko klases nosaukumu;

    Metode ir apakšprogramma tām klasēm, kurās tā ir deklarēta. Aprakstīts tādā pašā līmenī kā mainīgie. Norādīts kā funkcija un var būt jebkura veida, ieskaitot nederīgus:

    • klase Punkts ( int x, y;

      void init(int a, int b) (

    Iepriekš minētajā piemērā Point klasei ir vesels skaitlis x un y, init() metode. Metodēm, tāpat kā mainīgajiem, var piekļūt, izmantojot operatoru ".":

    • point.init();

    Init rekvizīts neko neatgriež, tāpēc tas ir spēkā neesošs.

    Mainīgie lielumi

    Java programmēšanas valodas apmācībā mainīgie ieņem atsevišķu vietu. Visiem mainīgajiem ir noteikts tips, tas nosaka vajadzīgo vietu vērtību glabāšanai, iespējamo vērtību diapazonu, darbību sarakstu. Pirms manipulācijas ar vērtībām tiek deklarēti mainīgie.

    Vienlaikus var deklarēt vairākus mainīgos. Lai tos uzskaitītu, tiek izmantots komats:

    • int a, b, c;

    Inicializācija tiek veikta pēc deklarācijas vai tās laikā:

    int a = 10, b = 10;

    Ir vairāki veidi:

    • vietējie mainīgie (lokāli);
    • instances mainīgie (instance variables);
    • statiskie mainīgie (statiskie).

    Vietējie mainīgie tiek deklarēti metodēs un konstruktoros, tie tiek izveidoti pēdējo startēšanas laikā un pēc pabeigšanas tiek iznīcināti. Viņiem ir aizliegts norādīt piekļuves modifikatorus un kontrolēt pieejamības līmeni. Tie nav redzami ārpus deklarētā bloka. Java versijā mainīgajiem nav sākotnējās vērtības, tāpēc tā ir jāpiešķir pirms pirmās lietošanas reizes.

    Gadījumu mainīgie ir jādeklarē klasē. Tās tiek izmantotas kā metodes, taču tām var piekļūt tikai pēc objekta izveides. Mainīgais tiek iznīcināts, kad objekts tiek iznīcināts. Instanču mainīgajiem, atšķirībā no vietējiem mainīgajiem, ir noklusējuma vērtības:

    • skaitļi - 0;
    • loģika - nepatiesa;
    • atsauces ir nulles.

    Statiskos mainīgos sauc par klases mainīgajiem. Viņu nosaukumi sākas ar lielajiem burtiem un tiek norādīti ar statisko modifikatoru. Tie tiek izmantoti kā konstantes, attiecīgi, tiem tiek pievienots viens precizētājs no saraksta:

    • fināls;
    • Privāts;
    • publiski.

    Palaist programmas sākumā, iznīcināta pēc izpildes apstāšanās. Tāpat kā gadījumu mainīgajiem, tiem ir noklusējuma vērtības, kas tiek piešķirtas tukšiem mainīgajiem. Cipariem ir vērtība 0, Būla vērtība ir false, objektu atsauces sākotnēji ir nulles. Statiskie mainīgie tiek izsaukti šādā formā:

    • ClassName.VariableName.

    Atkritumu savācējs

    Apmācībā Java programmēšanas valoda iesācējiem visinteresantākā ir automātiskā atkritumu savācēja sadaļa.

    Java, atšķirībā no C valodas, tas nav iespējams manuāla noņemšana objekts no atmiņas. Šim nolūkam tiek ieviesta automātiskās dzēšanas metode - atkritumu savācējs. Izmantojot tradicionālo dzēšanu, izmantojot nulli, tiek noņemta tikai atsauce uz objektu un pats objekts. Ir metodes piespiedu atkritumu savākšanai, lai gan tās nav ieteicamas parastai lietošanai.

    Neizmantoto objektu automātiskās dzēšanas modulis darbojas fonā un tiek palaists, kad programma ir neaktīva. Lai dzēstu objektus no atmiņas, programma apstājas, pēc atmiņas atbrīvošanas pārtrauktā darbība tiek atsākta.

    Modifikatori

    Atšķirt dažādi veidi modifikatori. Papildus tiem, kas nosaka piekļuves metodi, ir arī metožu, mainīgo un klases modifikatori. Metodes, kas deklarētas kā privātas, ir pieejamas tikai deklarētajā klasē. Šādus mainīgos nevar izmantot citās klasēs un funkcijās. Publisks nodrošina piekļuvi jebkurai klasei. Ja jums ir jāiegūst publiska klase no citas pakotnes, vispirms tā ir jāimportē.

    Aizsargātais modifikators darbībā ir līdzīgs publiskajam - tas atver piekļuvi klases laukiem. Abos gadījumos mainīgos var izmantot citās klasēs. Bet publiskais modifikators ir pieejams absolūti visiem, un aizsargātais modifikators ir pieejams tikai mantotajām klasēm.

    Modifikators, kas tiek lietots, veidojot metodes, ir statisks. Tas nozīmē, ka ģenerētā metode pastāv neatkarīgi no klases gadījumiem. Final modifikators nekontrolē piekļuvi, bet norāda uz neiespējamību turpmāk manipulēt ar objekta vērtībām. Tas aizliedz mainīt elementu, kuram tas ir norādīts.

    Lauku galīgā vērtība neļauj mainīt mainīgā lieluma pirmo vērtību:

      public static void mthod(String args) (

      gala int Vārds = 1;

      int Vārds = 2;// radīs kļūdu

    Mainīgie ar galīgo modifikatoru ir konstantes. Tos parasti raksta tikai ar lielajiem burtiem. CamelStyle un citi veidi nedarbojas.

    Metožu galīgā vērtība norāda uz aizliegumu mainīt metodi mantotā klasē:

      final void myMethod() (

      System.out.printIn("Sveika pasaule");

    Fināls klasēm nozīmē, ka jūs nevarat izveidot klases pēcnācējus:

      pēdējā publiskā klase klase (

    Abstract - modifikators abstraktu klašu izveidei. Jebkura abstraktā klase un abstraktās metodes ir paredzēts tālākai paplašināšanai citās klasēs un blokos. Modifikators transient liek virtuālajai mašīnai neapstrādāt doto mainīgo. Šajā gadījumā tas vienkārši netiks saglabāts. Piemēram, pārejošs int Name = 100 nepastāvēs, bet int b saglabāsies.

    Platformas un versijas

    Esošās Java programmēšanas valodu ģimenes:

    • standarta izdevums.
    • Enterprise Edition.
    • Mikro izdevums.
    • karti.

    1. SE - ir galvenais, ko plaši izmanto, lai izveidotu pielāgotas lietojumprogrammas individuālai lietošanai.
    2. EE ir uzņēmuma programmatūras izstrādes specifikāciju kopums. Tas satur vairāk funkciju nekā SE, tāpēc tas tiek izmantots komerciālā mērogā lielos un vidējos uzņēmumos.
    3. ME - paredzēts ierīcēm ar ierobežotu jaudu un atmiņu, tām parasti ir mazs displeja izmērs. Šādas ierīces ir viedtālruņi un plaukstdatori, uztvērēji digitālā televīzija.
    4. Karte – paredzēta ierīcēm ar ārkārtīgi ierobežotiem skaitļošanas resursiem, piemēram, viedkartēm, sim kartēm, bankomātiem. Šiem nolūkiem ir mainīts baitkods, prasības platformai un bibliotēku komponenti.

    Pieteikums

    Programmas Java programmēšanas valodā mēdz darboties lēnāk un aizņem vairāk brīvpiekļuves atmiņa. Java un C valodu salīdzinošā analīze parādīja, ka C ir nedaudz produktīvāka. Pēc daudzām Java virtuālās mašīnas izmaiņām un optimizācijām tā ir uzlabojusi savu veiktspēju.

    Aktīvi izmantots Android lietojumprogrammām. Programma tiek apkopota nestandarta baitkodā un tiek izpildīta virtuālajā mašīnā ART. Kompilācijai tiek izmantota Android Studio. Šis Google IDE ir oficiālā Android izstrādes IDE.

    Microsoft ir izstrādājusi savu Java virtuālās mašīnas MSJVM ieviešanu. Tam bija tādas atšķirības, kas lauza starpplatformu pamatjēdzienu - nebija atbalsta dažām tehnoloģijām un metodēm, bija nestandarta paplašinājumi, kas darbojās tikai uz Windows platformas. Microsoft izlaida J# valodu, kuras sintakse un kopējā darbība ir ļoti līdzīga Java. Tas neatbilda oficiālajai specifikācijai un galu galā tika noņemts no standarta Microsoft Visual Studio izstrādātāju rīkkopas.

    Java programmēšanas valoda un vide

    Programmatūras izstrāde tiek veikta šādās IDE:

    1. NetBeans IDE.
    2. Eclipse IDE.
    3. IntelliJ IDEJA.
    4. jDeveloper.
    5. Java operētājsistēmai iOS.
    6. Dženija.

    JDK izplata Oracle kā Java izstrādes komplektu. Ietver kompilatoru, standarta bibliotēkas, utilītus, izpildsistēmu. Mūsdienu integrētās izstrādes vides balstās uz JDK.

    Ir ērti rakstīt kodu Java programmēšanas valodā Netbeans un Eclipse IDE. Tās ir bezmaksas integrētās izstrādes vides, tās ir piemērotas visām Java platformām. Izmanto arī programmēšanai Python, PHP, JavaScript, C++.

    IntelliJ IDE no Jetbrains tiek izplatīts divās versijās: bezmaksas un komerciālā. Atbalsta koda rakstīšanu daudzās programmēšanas valodās, ir trešo pušu spraudņi no izstrādātājiem, kas ievieš vēl vairāk programmēšanas valodu.

    JDeveloper ir vēl viena Oracle izstrāde. Pilnībā rakstīts Java, tāpēc tas darbojas visās operētājsistēmās.

Ievads

Šis darbs ir veltīts vienai no mūsdienu daudzsološākajām programmēšanas valodām - Java valodai. Tehnoloģiju ar nosaukumu "Java" bez pārspīlējuma var saukt par revolucionāru programmatūras izstrādes nozarē.

Kārtošanu var ieviest citās programmēšanas valodās, piemēram, PHP, C++ utt. Tas vienkārši ir daudz izdevīgāk Java. Sīkāka informācija ir apspriesta tālāk. Jaunums slēpjas apstāklī, ka šajā valodā un šādā interpretācijā iepriekš nav ieviesta šķirošanas programma.

Uzdevuma īstenošanai tika piedāvāts programmas rakstīšanas algoritms. Turklāt šis algoritms tika ieviests Java.

Java programmēšanas valodas apraksts

Java vispārīgās īpašības

Šķirotāja programmas rakstīšanai tika izvēlēta Java valoda. Java ir objektorientēta programmēšanas valoda, ko Sun Microsystems izstrādājusi kopš 1991. gada un oficiāli izlaista 1995. gada 23. maijā. Sākotnēji jauno programmēšanas valodu sauca par Oak (Džeimss Goslings), un tā tika izstrādāta plaša patēriņa elektronikai, bet vēlāk tika pārdēvēta par Java un sāka izmantot sīklietotņu, lietojumprogrammu un servera programmatūras rakstīšanai.

Java programmēšanas valoda atšķiras no jebkuras citas pastāvošās valodas. Tas ir izstrādāts, lai atvieglotu darbu ar datoriem WWW, izmantojot pārlūkprogrammas. Mūsdienās katram datoram ir pārlūkprogramma. Savukārt katra pārlūkprogramma atbalsta Java. Tas nozīmē, ka jūs varat apskatīt dokumentus, kas glabājas visā pasaulē, un, noklikšķinot uz saites, aktivizēt Java programmu, kas tiks pārsūtīta pa tīklu un darbosies jūsu datorā.

Viena no galvenajām Java valodas priekšrocībām ir tās neatkarība no platformas un datora veida, kurā darbojas programmas. Tādējādi vienu un to pašu kodu var palaist operētājsistēmās Windows, Linux, FreeBSD, Solaris, Apple Mac uc Tas kļūst ļoti svarīgi, kad programmas tiek lejupielādētas caur globālo internetu un izmantotas dažādās platformās. Java programmēšanas valoda var strādāt ne tikai ar statiskiem tekstiem un grafikām, bet arī ar dažādiem dinamiskiem objektiem.

Vēl viena tikpat svarīga Java priekšrocība ir tās lielā līdzība ar C++ programmēšanas valodu. Tāpēc tiem programmētājiem, kuri pārzina C un C ++ sintaksi, būs viegli iemācīties Java.

Turklāt Java ir pilnībā uz objektu orientēta valoda, pat vairāk nekā C++. Visas Java valodas entītijas ir objekti, izņemot dažus primitīvus veidus, piemēram, skaitļus.

Svarīgi ir arī tas, ka Java ir daudz vieglāk izstrādāt programmas, kurās nav kļūdu, nekā C ++.

Lieta ir tāda, ka Java valodas izstrādātāji no uzņēmuma Sun veica programmu fundamentālu analīzi C ++ valodā. Tika analizētas avota koda "šaurās vietas", kas noveda pie grūti pamanāmu kļūdu parādīšanās. Tāpēc tika pieņemts lēmums izstrādāt Java valodu ar iespēju izveidot programmas, kas slēptu biežāk sastopamās kļūdas.

Šim nolūkam tika veiktas šādas darbības:

izstrādātāji ir novērsuši iespēju skaidri piešķirt un atbrīvot atmiņu.

Piemēram, Java atmiņa tiek atbrīvota automātiski, savācot atkritumus. Izrādās, ka programmētājs ir apdrošināts pret kļūdām, kas rodas no nepareizas atmiņas izmantošanas.

patieso masīvu ieviešana un rādītāju aizliegums.

Tagad programmētāji nevar izdzēst datus no atmiņas nepareizas norādes izmantošanas dēļ.

tika izslēgta iespēja sajaukt piešķiršanas operatoru ar salīdzināšanas operatoru vienlīdzībai. Parasti problēma ar zīmi "=" ļoti bieži noved pie loģiskām kļūdām C un C ++, kuras nav tik viegli atklāt. Īpaši lielās programmās.

vairākkārtēja mantošana ir pilnībā izslēgta. Tas ir aizstāts ar jaunu koncepciju - interfeisu, kura ideja tika aizgūta no Objective C valodas.

Interfeiss programmētājam sniedz gandrīz visu, ko programmētājs var iegūt no vairākkārtēja mantojuma, vienlaikus izvairoties no sarežģītības, kas rodas, pārvaldot klašu hierarhiju.

Jaunākā versija ir versija 1.6, kurā ir uzlabota drošība, uzlabots atbalsts Mozilla Rhino skriptu valodai, uzlabota darbvirsmas integrācija un pievienotas dažas jaunas funkcijas grafisko saskarņu izveidē.

Java un Microsoft

Tālāk minētie uzņēmumi galvenokārt koncentrējas uz Java (J2EE) tehnoloģijām, nevis .NET, lai gan tie nodarbojas arī ar pēdējo: IBM, Oracle. Jo īpaši Oracle DBVS kā komponents ietver JVM, kas nodrošina iespēju tieši programmēt DBVS Java valodā, ieskaitot, piemēram, saglabātās procedūras.

Galvenās iezīmes

Programmas piemērs

Programma, kas drukā "Sveika, pasaule!":

Publiskā klase HelloWorld (publisks statisks void main(String args) ( System .out .println ("Sveika, pasaule!") ; ) )

Veidņu izmantošanas piemērs:

Importēt java.util.*; publiskās klases paraugs ( public static void main(String args) ( // Izveidojiet objektu no veidnes. Saraksts virknes = jauns LinkedList () ; strings.add("Sveiki" ) ; strings.add("pasaule" ); strings.add("!"); for (String s: strings) ( System .out .print (s) ; System .out .print (" " ) ; ) )

Galvenās idejas

Primitīvie veidi

Java valodā ir tikai 8 skalāri veidi: Būla, baits, char, īss, int, long, float, double.

Iesaiņojuma klases primitīviem tipiem

Primitīvo tipu garumus un vērtību diapazonus nosaka standarts, nevis ieviešanu, un tie ir norādīti tabulā. Lokalizācijas ērtībai (viens no Java ideoloģiskajiem principiem) tika izveidots char tips ar diviem baitiem: standarta veidošanā jau pastāvēja Unicode-16, bet ne Unicode-32. Tā kā rezultātā nebija palicis viena baita veids, tika pievienots jauns baita veids. Veidiem peldošais un dubultais var būt īpašas vērtības, un tie nav "skaitļi" (

Tips Garums (baitos) Vērtību diapazons vai kopa
Būla nenoteikts patiess, nepatiess
baits 1 −128..127
char 2 0..2 16 -1 vai 0..65535
īss 2 −2 15 ..2 15 -1 vai −32768..32767
starpt 4 −2 31 ..2 31 -1 vai −2147483648..2147483647
garš 8 −2 63 ..2 63 -1 jeb aptuveni −9,2 10 18 ..9,2 10 18
peldēt 4 -(2-2 -23) 2 127 ..(2-2 -23) 2 127 jeb aptuveni –3,4 10 38 ..3,4 10 38 , kā arī , , NaN
dubultā 8 -(2-2 -52) 2 1023 ..(2-2 -52) 2 1023 jeb aptuveni –1,8 10 308 ..1,8 10 308 un arī , , NaN

Šāda stingra standartizācija bija nepieciešama, lai padarītu valodu neatkarīgu no platformas, kas ir viena no Java ideoloģiskajām prasībām un viens no tās panākumu iemesliem. Tomēr joprojām pastāvēja viena neliela problēma ar platformas neatkarību. Daži procesori izmanto 10 baitu reģistrus rezultātu starpposma glabāšanai vai citos veidos uzlabo aprēķinu precizitāti. Lai Java būtu pēc iespējas sadarbspējīgāka starp dažādām sistēmām, sākotnējās versijās bija aizliegts jebkāds veids, kā uzlabot aprēķinu precizitāti. Tomēr tas izraisīja lēnāku veiktspēju. Izrādījās, ka precizitātes pasliktināšanās platformas neatkarības labad ir nepieciešama retajam, īpaši, ja par to ir jāmaksā, palēninot programmu darbu. Pēc daudziem protestiem šis aizliegums tika noņemts, taču tika pievienots atslēgvārds strictfp, lai atspējotu precizitātes uzlabošanu.

Transformācijas matemātiskajās operācijās

Java valodai ir šādi noteikumi:

  1. Ja viens operands ir dubultā tipa, arī otrs tiek pārveidots par dubulto tipu.
  2. Pretējā gadījumā, ja viens operands ir float tipa, otrs arī tiek pārveidots par float tipu.
  3. Pretējā gadījumā, ja viens operands ir garš, otrs arī tiek pārveidots par garo tipu.
  4. Pretējā gadījumā abi operandi tiek pārveidoti par int.

Pēdējais noteikums atšķir Java no vecākām implementācijām un C++ un padara kodu drošāku. Tā, piemēram, Java valodā pēc koda izpildes

Īss x = 50, y = 1000; int z = x*y;

mainīgajam z tiek piešķirta vērtība 50000, nevis −15536, kā tas ir lielākajā daļā bezcerīgi novecojušo C un C++ implementāciju. Programmā, ko kompilējis MS VC++ kopš 7. versijas, kā arī daudzi citi mūsdienu kompilatori (gcc , Intel C++, Borland C++, Comeau u.c.) arī vērtība būs 50000.

Objektu mainīgie, objekti, atsauces un norādes

Java valodā ir tikai dinamiski izveidoti objekti. Turklāt objektu tipa mainīgie un objekti Java ir pilnīgi atšķirīgas entītijas. Objekta tipa mainīgie ir atsauces, tas ir, netiešas norādes uz dinamiski izveidotiem objektiem. To uzsver mainīgo deklarācijas sintakse. Piemēram, Java jūs nevarat rakstīt:

Double a[10] [20]; Foo b(30) ;

Double a = jauns dubultnieks [ 10 ] [ 20 ] ; Foo b = jauns Foo(30 ) ;

Piešķiršanas laikā, pārejot uz apakšprogrammām un salīdzināšanu, objektu mainīgie darbojas kā norādes, tas ir, objektu adreses tiek piešķirtas, kopētas un salīdzinātas. Un, piekļūstot objekta datu laukiem vai metodēm, izmantojot objekta mainīgo, nav nepieciešamas nekādas īpašas atsauces darbības - šī piekļuve tiek veikta tā, it kā objekta mainīgais būtu pats objekts.

Objektu mainīgie ir jebkura veida mainīgie, izņemot vienkāršus ciparu tipus. Java valodā nav skaidru norāžu. Atšķirībā no norādēm C, C++ un citās programmēšanas valodās, Java atsauces ir ļoti drošas to izmantošanas stingru ierobežojumu dēļ, jo īpaši:

  • Jūs nevarat pārvērst objektu, kura tips ir int vai kāds cits primitīvs veids, par rādītāju vai atsauci un otrādi.
  • Saitēm aizliegts veikt darbības ++, −−, +, − vai jebkādas citas aritmētiskas darbības.
  • Tipu pārveidošana starp atsaucēm ir stingri reglamentēta. Izņemot masīvu atsauces, ir atļauts tikai pārveidot atsauces starp mantotu tipu un tā pēcnācēju, un pārveide no mantotā tipa uz mantoto tipu ir skaidri jānorāda un izpildes laikā ir jāpārbauda, ​​vai tā ir jēgpilna. Masīva atsauces reklāmguvumi ir atļauti tikai tad, ja ir atļauti to pamatā esošo veidu reklāmguvumi un nav kategoriju konfliktu.
  • Java programmā nav adreses take-address (&) vai take-at-address (*) operāciju. Zvaigznīte Java valodā nozīmē reizināšanu, tas arī viss. Ampersands (&) nozīmē tikai "bitu un" (dubultā un ir "loģisks un").

Tādu Java īpaši ieviesto ierobežojumu dēļ tieša atmiņas manipulācija fizisko adrešu līmenī nav iespējama (lai gan ir atsauces, kas nenorāda uz neko: šādas atsauces vērtību apzīmē ar nulli).

Saišu dublikāti un klonēšana

Tā kā objektu mainīgie ir atsauces mainīgie, piešķiršana nekopē objektu. Tātad, ja jūs rakstāt

Foo foo, bārs; ... bārs = foo;

tad adrese tiks kopēta no foo uz joslu . Tas ir, foo un bar norādīs uz vienu un to pašu atmiņas apgabalu, tas ir, uz vienu un to pašu objektu; mēģinot mainīt tā objekta laukus, uz kuru atsaucas foo, tiks mainīts objekts, uz kuru atsaucas josla, un otrādi. Ja jums ir nepieciešams iegūt vēl tikai vienu kopiju avota objekts, izmantojiet metodi (C++ terminoloģijā) clone() , kas izveido objekta kopiju, vai kopiju konstruktoru.

Metode Clone() prasa, lai klase ieviestu Cloneable interfeisu (interfeisus skatiet tālāk). Ja klase ievieš klonējamo saskarni, pēc noklusējuma clone() kopē visus laukus ( maza kopija). Ja vēlaties klonēt laukus (kā arī to laukus utt.), nevis kopēt, jums ir jāignorē klona () metode. Klona() metodes definēšana un izmantošana bieži vien nav mazsvarīgs uzdevums.

Atkritumu kolekcija

Java valodā nav iespējams tieši noņemt objektu no atmiņas - tā vietā tiek īstenota atkritumu savākšana. Tradicionālais triks, lai sniegtu atkritumu savācējam "mājienu", lai atbrīvotu atmiņu, ir iestatīt mainīgo uz null . Tomēr tas nenozīmē, ka objekts ir nomainīts nulles, noteikti un nekavējoties tiks izdzēsts. Šis paņēmiens tikai noņem atsauci uz objektu, tas ir, atsaista rādītāju no objekta atmiņā. Šajā gadījumā jāpatur prātā, ka atkritumu savācējs objektu neizdzēsīs, kamēr uz to norāda vismaz viena atsauce no izmantotajiem mainīgajiem vai objektiem. Ir arī metodes, kā uzsākt piespiedu atkritumu savākšanu, taču netiek garantēts, ka tās tiks izsauktas izpildlaikā, un tās nav ieteicamas parastai lietošanai.

Klases un funkcijas

Java nav procesuāla valoda: jebkura funkcija var pastāvēt tikai klasē. To uzsver Java valodas terminoloģija, kurā nav jēdzienu "funkcija" vai "locekļa funkcija" (Eng. dalībnieka funkcija), bet tikai metodi. Arī standarta funkcijas ir kļuvušas par metodēm. Piemēram, Java nav sin() funkcijas, bet ir Math klases metode Math.sin() (kurā papildus sin() ir cos() , exp() , sqrt() , abs() un daudzas citas metodes).

Statiskās metodes un lauki

Lai neveidotos matemātikas klases (un citu līdzīgu klašu) objekts katru reizi, kad nepieciešams izsaukt sin () (un citas līdzīgas funkcijas), jēdziens statiskās metodes(Angļu) statiskā metode; dažreiz krievu valodā tos sauc par statiskiem). Statisko metodi (aprakstā atzīmēta ar statisko atslēgvārdu) var izsaukt, neveidojot tās klases objektu. Tāpēc var rakstīt

Double x = Math .sin(1) ;

Math m = new Math(); dubultā x = m.sin(1) ;

Statisko metožu ierobežojums ir tāds, ka tās var piekļūt tikai statiskajiem laukiem un metodēm šajā objektā.

Statiskajiem laukiem ir tāda pati nozīme kā C++: katram ir tikai viens gadījums.

Galīgums

Pēdējais atslēgvārds nozīmē dažādas lietas, aprakstot mainīgo, metodi vai klasi. Galīgais mainīgais (nosaukts par konstanti) tiek inicializēts, kad tas ir deklarēts, un to vairs nevar mainīt. Galīgo metodi nevar ignorēt mantojuma dēļ. Galīgajai klasei vispār nevar būt mantinieku.

Abstrakcija

Java metodes, kas nav skaidri pasludinātas par galīgām vai privātām, ir virtuālas C++ terminoloģijā: izsaucot metodi, kas bāzes klasēs ir atšķirīgi definēta, un mantojuma klasēs vienmēr tiek veikta izpildlaika pārbaude.

Abstraktā metode (abstraktais deskriptors) Java ir metode, kurai ir norādīti parametri un atgriešanas veids, bet ne pamatteksts. Abstrakta metode ir definēta atvasinātās klasēs. C++ valodā to pašu sauc par tīru virtuālo funkciju. Lai klase varētu aprakstīt abstraktas metodes, arī pati klase ir jāpasludina par abstraktu. Abstraktus klases objektus nevar izveidot.

Saskarnes

Java augstākā abstrakcijas pakāpe ir saskarne. Visas saskarnes metodes ir abstraktas: abstraktais deskriptors pat nav vajadzīgs. Interfeiss nav klase. Klase var mantot, vai paplašināt(paplašina) citu klasi, vai īstenot(ievieš) saskarni. Turklāt saskarne var mantot vai paplašināt citu saskarni.

Java valodā klase nevar mantot vairāk kā vienu klasi, taču tas var ieviest neierobežotu skaitu saskarņu.

Saskarnes var nodot metodēm kā parametrus, bet to tipu objektus nevar izveidot.

Marķieru saskarnes

Ir dažas Java saskarnes, kas nesatur metodes, kas jāīsteno, bet kuras JVM apstrādā īpašā veidā. Šīs ir saskarnes:

  • java.lang.Klonējams
  • java.io.Serializējams
  • java.rmi.Remote

Veidnes Java valodā (vispārīgi)

Sākot ar Java 5, valodai ir vispārīgs programmēšanas mehānisms - veidnes, kas ārēji ir tuvas C++ veidnēm. Izmantojot īpašu sintaksi klašu un metožu aprakstā, varat norādīt tipa parametrus, kurus var izmantot aprakstā kā lauku veidus, parametrus un metožu atgriešanas vērtības.

// Vispārējās klases deklarācija klase GenericClass ( E getFirst() ( ... ) void add(E obj) ( ... ) ) // Vispārīgas klases izmantošana kodā GenericClass var = jauns GenericClass () ; var.add("qwerty") ; Virkne p = var.getFirst();

Ir atļauta vispārīga klašu, saskarņu un metožu deklarēšana. Turklāt sintakse atbalsta ierobežotas parametru tipu deklarācijas: norāde deklarācijā par veidlapas uzbūvi nepieciešams tipa parametrs T, lai ieviestu saskarnes A, B, C un tā tālāk, kā arī konstrukciju nosaka, ka tipa parametram T jābūt C tipam vai vienam no tā priekštečiem.

Atšķirībā no C# veidnēm, Java veidnes neatbalsta izpildlaiks - kompilators vienkārši izveido baitkodu, kurā nav nevienas veidnes. Veidņu ieviešana Java būtiski atšķiras no līdzīgu mehānismu ieviešanas programmā C ++: kompilators neģenerē atsevišķu klases vai veidnes metodes variantu katram veidnes izmantošanas gadījumam, bet vienkārši izveido vienu baitu kodu, kas satur nepieciešamās tipa pārbaudes un konvertācijas. Tas rada vairākus ierobežojumus veidņu lietošanai Java programmās.

Klases dalības pārbaude

Programmā Java varat skaidri pārbaudīt, kurai klasei objekts pieder. Izteiksme foo instanceof Foo ir patiesa, ja objekts foo pieder klasei Foo vai tās pēcnācējam vai īsteno Foo interfeisu (vai, vispārīgi runājot, manto klasi, kas ievieš saskarni, ko Foo manto).

Pēc tam visiem objektiem definētā funkcija getClass() atgriež objektu, kura tips ir Class . Šos objektus var salīdzināt. Tātad, piemēram, foo.getClass()==bar.getClass() būs patiess, ja objekti foo un bar pieder tieši vienai klasei (bet tas nenozīmē, ka tie ir divi identiski objekti).

Turklāt jebkura veida klases objektu var iegūt šādi: Integer.class , Object.class .

Tomēr tieša klašu salīdzināšana ne vienmēr ir labākais veids, kā pārbaudīt piederību klasē. Bieži vien tā vietā tiek izmantota funkcija isAssignableFrom(). Šī funkcija ir definēta Klases tipa objektā un kā parametru ņem klases tipa objektu. Tādējādi, izsaucot Foo.class.isAssignableFrom(Bar.class), tiks atgriezta vērtība True, ja Foo ir Bar klases priekštecis. Tā kā visi objekti ir objekta tipa pēcteči, izsaucot Object.class.isAssignableFrom() vienmēr tiks atgriezta vērtība true . Kopā ar minētajām Class tipa objekta funkcijām tiek izmantotas arī funkcijas isInstance() (ekvivalents instanceof) un cast() (pārvērš parametru par izvēlētās klases objektu).

klašu bibliotēkas

Programmatūras izstrādes rīki

  • JDK - papildus Java SE un Java EE platformu bibliotēku komplektam, tajā ir arī kompilators komandrinda javac un utilītu komplektu, kas darbojas arī komandrindas režīmā.
  • NetBeans IDE ir bezmaksas IDE visām Java platformām - Java ME, Java SE un Java EE. To reklamē Sun Microsystems, Java izstrādātājs, kā bāzes līniju programmatūras izstrādei Java un citās valodās (, C++, Fortran utt.).
  • Java SE un Java EE. Notiek darbs pie Java ME platformas atbalsta Eclipse. C, C++, Fortran utt.)
  • IntelliJ IDEA ir komerciāla izstrādes vide Java SE, Java EE un Java ME platformām.

Piezīmes

  1. java (angļu valodā). Merriam-Webster tiešsaistes vārdnīca. Meriams Vebsters. - vārda "Java" izruna angļu valodā. Iegūts 2009. gada 5. jūnijā.
  2. Roberts Tolksdorfs. Programmēšanas valodas Java virtuālās mašīnas JVM. ir Research GmbH. - JVM alternatīvo valodu un valodu paplašinājumu tiešsaistes katalogs. Iegūts 2009. gada 5. jūnijā.
  3. Microsoft Java virtuālās mašīnas atbalsts. Microsoft (2003-09-12). - Microsoft oficiālais paziņojums par MSJVM atbalsta programmu. Iegūts 2009. gada 5. jūnijā.
  4. Tods Hofs Amazon arhitektūra (angļu valodā) (2007-09-18). - Diskusija par Amazon arhitektūru, izmantojot Java tehnoloģijas. Iegūts 2009. gada 6. jūnijā.
  5. Amazon Elastic Compute Cloud (Amazon EC2). Amazon Web Services LLC. - Amazon EC2 kā tīmekļa pakalpojuma tehnoloģijas un iespēju apraksts. Iegūts 2009. gada 6. jūnijā.
  6. Tods Hofs eBay arhitektūra (angļu valodā) (2008-05-27). - Diskusija par eBay arhitektūru Java platformā. Iegūts 2009. gada 6. jūnijā.
  7. Rendijs Šops, Dens Pričets eBay arhitektūra (angļu valodā) (PDF). SD forums 2006(2006-11-29). - Prezentācija par eBay arhitektūras attīstības vēsturi. Iegūts 2009. gada 6. jūnijā.
  8. Alens Šterns Ekskluzīva intervija ar Yandex CTO Iļju Segaloviču (angļu valodā). CenterNetworks (2008-01-14). - Intervija ar Yandex CTO Iļju Segaloviču. Iegūts 2009. gada 6. jūnijā.
  9. Anatolijs Orlovs Yandex.Search arhitektūra (krievu valodā) (PowerPoint). Jekaterinburgas JUG sanāksmes materiāli(2008-05-24). Iegūts 2009. gada 6. jūnijā.
  10. Braiens Guans LinkedIn emuārs. Emuāra arhīvs. Grāls vietnē LinkedIn. (Angļu) . LinkedIn.com (2008-06-11). - LinkedIn sistēmas izveides vēsture, kuras pamatā ir Grails Java tehnoloģija. Iegūts 2009. gada 5. jūnijā.
  11. OracleJVM un Java saglabātās procedūras. Oracle Inc. — Oracle portāla sadaļa, kas veltīta Java tehnoloģijām kā daļa no Oracle DBMS servera. Iegūts 2009. gada 5. jūnijā.
  12. Saite uz metodes Object.clone() dokumentāciju

Literatūra

  • Monakhovs Vadims Java programmēšanas valoda un NetBeans vide, 2. izdevums. - Sanktpēterburga .: "BHV-Petersburg", 2009. - S. 720. - ISBN 978-5-9775-0424-9
  • Džošua Blohs. Java. Efektīva programmēšana = efektīva Java. - M .: "Lori", 2002. - S. 224. - ISBN 5-85582-169-2
  • Java 2. Profesionāļu bibliotēka, 1. sējums. Fundamentals = Core Java™ 2, Volume I — Fundamentals. - 7. izd. - M .: "Williams", 2007. - S. 896. - ISBN 0-13-148202-5
  • Keja S. Horstmane, Gerijs Kornels. Java 2. Profesionāļu bibliotēka, 2. sējums. Programmēšanas padomi = Core Java™ 2, sējums II — papildu līdzekļi. - 7. izd. - M .: "Williams", 2007. - S. 1168. - ISBN 0-13-111826-9
  • Brūss Ekels. Java filozofija = Domāšana Java valodā. - 3. izdevums - Sanktpēterburga: "Piter", 2003. - S. 976. - ISBN 5-88782-105-1
  • Herberts Šilds, Džeimss Holmss. Java programmēšanas māksla = Java māksla. - M .: "Dialektika", 2005. - S. 336. - ISBN 0-07-222971-3
  • Lubos Bruga.Ātrā Java: praktiskais ekspreskurss = Luboš Brůha. Java Hotová řešení.. - M .: Zinātne un tehnoloģija, 2006. - 369. lpp. - ISBN 5-94387-282-5

Java ir SunMicrosystems izstrādāta programmēšanas valoda. Java lietojumprogrammas parasti tiek apkopotas īpašā baitkodā, lai tās varētu darboties jebkurā Java virtuālajā mašīnā (JVM) neatkarīgi no datora arhitektūras. Oficiālais izlaišanas datums ir 1995. gada 23. maijs. Mūsdienās Java tehnoloģija nodrošina līdzekļus, lai statiskas Web lapas pārvērstu interaktīvos, dinamiskos dokumentos un izveidotu izplatītas, no platformas neatkarīgas lietojumprogrammas.

Java programmas tiek tulkotas baitkodā, ko izpilda Java virtuālā mašīna (JVM), programma, kas apstrādā baita kodu un nodod instrukcijas aparatūrai kā tulks.

Šī programmu izpildes veida priekšrocība ir pilnīga baitu koda neatkarība no operētājsistēma un aparatūru, kas ļauj palaist Java lietojumprogrammas jebkurā ierīcē, kurai ir atbilstoša virtuālā mašīna. Cits svarīga iezīme Java tehnoloģija ir elastīga drošības sistēma, jo programmas izpildi pilnībā kontrolē virtuālā mašīna. Jebkura darbība, kas pārsniedz programmas iestatītās atļaujas (piemēram, mēģinājums nesankcionēti piekļūt datiem vai izveidot savienojumu ar citu datoru), izraisa tūlītēju pārtraukšanu.

Bieži vien virtuālās mašīnas jēdziena trūkumi ietver faktu, ka virtuālās mašīnas baitkoda izpilde var samazināt Java valodā ieviesto algoritmu programmas veiktspēju. Nesen ir veikti vairāki uzlabojumi, kas nedaudz palielina Java programmu izpildes ātrumu:

Tehnoloģijas pielietošana baitkoda tulkošanai mašīnkodā tieši programmas darbības laikā (JIT tehnoloģija) ar iespēju saglabāt klases versijas mašīnkodā,

Plaši izplatīts uz platformu orientēts kods (vietējais kods) standarta bibliotēkās,

Aparatūra, kas nodrošina paātrinātu baitkoda apstrādi (piemēram, Jazelle tehnoloģija, ko atbalsta daži ARM procesori).



Galvenās valodas iezīmes:

Automātiska atmiņas pārvaldība;

Paplašinātas iespējas rīkoties ārkārtas situācijās;

Bagātīgs ievades / izvades filtrēšanas rīku komplekts;

Standarta kolekciju kopums, piemēram, masīvs, saraksts, kaudze utt.;

Vienkāršu rīku pieejamība tīkla lietojumprogrammu izveidei (tostarp izmantojot RMI protokolu);

Klašu klātbūtne, kas ļauj veikt HTTP pieprasījumus un apstrādāt atbildes;

Iebūvēti valodas rīki daudzpavedienu lietojumprogrammu izveidei;

Vienota piekļuve datubāzei:

Atsevišķu SQL vaicājumu līmenī - pamatojoties uz JDBC, SQLJ;

Objektu koncepcijas līmenī ar iespēju uzglabāt datu bāzē - pamatojoties uz Java Data Objects un Java Persistence API;

Atbalsts veidnēm (sākot no versijas 1.5);

Programmu paralēla izpilde.

1.4.3 C# programmēšanas valoda

2000. gada jūnijā kļuva zināms par jaunu programmēšanas valodu, kas dzima Microsoft zarnās. Viņš kļuva par daļu jauna tehnoloģija Microsoft sauca .NET (izrunā "Dot Net"). Šīs tehnoloģijas ietvaros tiek nodrošināta vienota izpildes vide programmām (Common Language Runtime, CLR), kas rakstītas dažādās programmēšanas valodās. Viena no šīm valodām, galvenā šajā vidē, ir C # (C #, lasiet “C Sharp”, “C Sharp”). Ar valodas nosaukumu, protams, gribējās uzsvērt tās saistību ar C++, jo # ir divi krustojoši plusi. Bet galvenokārt jaunā valoda ir līdzīga Java. Un nav šaubu, ka viens no tā parādīšanās iemesliem bija Microsoft vēlme atbildēt uz Sun izaicinājumu.

Lai gan C# autori oficiāli netiek nosaukti, viena no valodas ceļveža provizoriskajiem izdevumiem titullapā norādīts Turbo Pascal un Delphi radītājs Anderss Hejlsbergs, kurš 1996. gadā pārcēlās uz Microsoft, un Skots Viltamuts.

Vienotās programmas izpildes vides pamatā ir starpvalodas IL (Intermediate Language – starpvaloda) izmantošana, kas pilda gandrīz tādu pašu lomu kā Java virtuālās mašīnas baitkods. Kompilatori no dažādām .NET tehnoloģijā izmantotajām valodām tulko programmas IL kodā. Tāpat kā Java baitkods, IL kods apzīmē hipotētiska steka datora norādījumus. Taču atšķirība ir arī IL dizainā un lietošanā.

Pirmkārt, atšķirībā no JVM, IL nav piesaistīta vienai programmēšanas valodai. Sākotnējās Microsoft.NET versijās ir iekļauti kompilatori priekš C++, C#, Visual Basic. Neatkarīgi izstrādātāji var pievienot citas valodas, izveidojot kompilatorus no šīm valodām uz IL kodu.

Otrkārt, IL nav paredzēts programmatiskai interpretācijai, bet gan turpmākai kompilācijai mašīnkodā. Tas ļauj sasniegt ievērojami augstākas veiktspējas programmas. Faili, kas satur IL kodu, satur pietiekami daudz informācijas, lai optimizācijas kompilators varētu darboties.

“C# ir vienkārša, moderna, tipa droša objektorientēta valoda, kas iegūta no C un C++. C# būs ērts un saprotams programmētājiem, kuri zina C un C++. C# apvieno Visual Basic produktivitāti ar C++ jaudu." Šie vārdi sāk C# aprakstu.

Apsveriet tehniskās īpašības valoda:

Kompilācijas vienība ir fails (kā C, C++, Java). Fails var saturēt vienu vai vairākus tipu aprakstus: klases (klase), saskarnes (interfeiss), struktūras (struct), uzskaitījumi (enum), delegātu tipi (delegate) ar vai bez norādes par to sadalījumu pa nosaukumvietām;

Vārdtelpas (nosaukumtelpas) regulē programmas objektu redzamību (kā C++). Nosaukumvietas var būt ligzdotas. Ir atļauts izmantot programmas objektus, skaidri nenorādot nosaukumvietu, kurai šis objekts pieder. Pietiek tikai vispārīgi pieminēt šīs nosaukumvietas izmantošanu lietošanas direktīvā (kā Turbo Pascal). Izmantošanas direktīvā (tāpat kā Oberon valodā) ir pseidonīmi nosaukumvietu nosaukumiem;

Elementārie datu tipi: 8 bitu (sbaits, baits), 16 bitu (īss, ushort), 32 bitu (int, uint) un 64 bitu (gars, ulong) veseli skaitļi ar zīmi un neparakstīti, atsevišķi reāli (float ) un dubultā (dubultā) precizitāte, unikoda rakstzīmes (char), Būla tips (bool, nav savietojams ar veseliem skaitļiem), decimāldaļa, kas nodrošina 28 nozīmīgos precizitātes ciparus (decimāldaļa);

Strukturētie veidi: klases un saskarnes (kā Java), viendimensiju un daudzdimensiju (atšķirībā no Java) masīvi, virknes (string), struktūras (gandrīz tādas pašas kā klases, bet nav novietotas kaudzē un bez mantojuma), uzskaitījumi, nesaderīgi ar veseliem skaitļiem (kā Paskālā);

Delegātu veidi vai vienkārši "deleģēti" (piemēram, procesuālie veidi Module-2 un Oberon, funkciju norādes programmā C un C++);

Veidus iedala atsauces tipos (klases, interfeisi, masīvi, delegāti) un vērtību tipos (elementārie veidi, uzskaitījumi, struktūras). Atsauces tipu objekti tiek piešķirti dinamiskajā atmiņā (kaudzē), un atsauces tipu mainīgie faktiski ir norādes uz šiem objektiem. Vērtību veidu gadījumā mainīgie nav norādes, bet gan paši vērtības. Netieša tipa pārveidošana ir atļauta tikai tad, ja tā nepārkāpj tipa drošību vai neizraisa informācijas zudumu. Visi tipi, tostarp elementārie tipi, ir saderīgi ar objekta tipu, kas ir visu pārējo tipu bāzes klase. Pastāv netieša vērtību tipu pārveidošana par objekta tipu, ko sauc par boksu, un tieša apgrieztā pārveidošana — unboxing;

Automātiska atkritumu savākšana (kā Oberon un Java);

Plašs darbību kopums ar 14 prioritāšu līmeņiem. Operāciju pārdefinēšana (kā Algol-68, Ada, C++). Izmantojot atzīmētos un neatzīmētos operatorus, varat kontrolēt pārpildes kontroli, veicot darbības ar veseliem skaitļiem;

Metodes ar vērtību parametriem, atsauces parametriem (ref) un izvades parametriem (out). Vārdi ref un out ir jāraksta pirms parametra ne tikai metodes aprakstā, bet arī izsaucot. Izvades parametru klātbūtne ļauj kontrolēt definējošo uzdevumu izpildi. Saskaņā ar valodas noteikumiem jebkuram mainīgajam ir jāgarantē vērtība, pirms tiek mēģināts to izmantot;

Vadības priekšraksti: if, switch, while, do, for, break, turpināt (kā C, C++ un Java). Foreach paziņojums, kas iziet cauri katram "kolekcijas" elementam, vairākas goto jump paziņojuma šķirnes;

Izņēmumu apstrāde (kā Java);

Rekvizīti - klašu (objektu) elementi, kuriem piekļuve tiek veikta tāpat kā laukiem (varat piešķirt vai iegūt vērtību), bet tiek īstenoti ar netieši izsauktām get un set apakšprogrammām (kā Object Pascal - ievades valoda Delphi sistēma);

Indeksētāji ir klašu (objektu) elementi, kas ļauj piekļūt objektiem tādā pašā veidā kā masīviem (norādot indeksu kvadrātiekavās). Ieviests, izmantojot netieši izsauktās get and set rutīnas. Piemēram, piekļuvi (lasīšanai) virknes rakstzīmēm var veikt kā masīva elementus, jo standarta virkņu klasei ir ieviests indeksētājs;

Notikumi ir procesuāla tipa klašu (lauku vai rekvizītu) elementi (deleģēti), kuriem ārpus klases, kurā tie ir definēti, ir piemērojamas tikai += un -= darbības, kas ļauj objektiem pievienot vai noņemt notikumu apdarinātāja metodes. šīs klases;

Nedrošs (nedrošs) kods, izmantojot rādītājus un adreses aritmētiku, tiek lokalizēts programmas daļās, kas atzīmētas ar nedrošo modifikatoru;

Priekšprocesors, kas atšķirībā no C un C++ nodrošina tikai nosacījumu kompilācijas iespējas.

Protams, apspriestie C # trūkumi nemaz neatņem valodai izredzes. Tas daudzējādā ziņā ir labāks par C++. Vispārējā neapmierinātība ar C++ valodu, ko atpazīst pēc pašas jaunas valodas parādīšanās, ir viens no galvenajiem C# veiksmes priekšnosacījumiem.

Salīdzinot C# ar Java, var redzēt daudzas līdzības. Tiesa, ja Java sistēmas ir daudzplatformas, tad C # ieviešana pastāv tikai operētājsistēmai. Windows sistēmas un tikai viens. Bet, neskatoties uz smagumu, var sagaidīt, ka valoda tiks ieviesta citām sistēmām. Turklāt pašu Microsoft .NET platformu ar vienu programmas izpildes vidi var virzīt uz alternatīvām arhitektūrām, galvenokārt UNIX sistēmām.

Šķiet, ka C# ir reālistiskāka valoda nekā Java. Atšķirībā no Java, tas ir pašpietiekams. Tas ir, jūs varat rakstīt jebkuru programmu C#, neizmantojot citas valodas. Tas ir iespējams, pateicoties "nedrošu" koda bloku klātbūtnei, kas atver tiešu piekļuvi aparatūrai. Java, lai piekļūtu zema līmeņa iekārtām, ir jāizmanto "vietējās metodes" (vietējās metodes), kas jāieprogrammē citās valodās.

Un, protams, C # izredzes galvenokārt ir saistītas ar centieniem, ko Microsoft, protams, pieliks, lai to reklamētu.