Bahay / Kaligtasan / Ang java programming language ay nilikha. Panimula sa Java. Mga kalamangan ng Java bilang isang programming language

Ang java programming language ay nilikha. Panimula sa Java. Mga kalamangan ng Java bilang isang programming language

wikang Java. Panimula.

Sa mahabang panahon mahirap isipin ang isang computer magazine na walang artikulo sa wikang Java. Kahit na ang mga sikat na pahayagan at magasin gaya ng The New York Times, The Washington Post at Business Week ay sumulat tungkol sa kanya.

Imposibleng maalala na ang Pambansang Pampublikong Radyo ay nagtalaga ng isang sampung minutong programa sa isang programming language. Kung ito ay mabuti o masama ay nakasalalay sa pananaw. Isang $100 milyon na pamumuhunan sa produksyon software nilikha gamit ang isang partikular na programming language?! Ang CNN, CNBC, at iba pang mga media outlet ay, at hanggang ngayon, pinag-uusapan kung paano ito magagawa at gagawin ng Java.

Gayunpaman, ang aklat na ito ay para sa mga seryosong programmer, at dahil ang Java ay isang seryosong programming language, marami tayong dapat takpan. Kaya, hindi kami sumisid sa pagsusuri ng mga pangako sa advertising at subukang alamin kung ano ang totoo at kung ano ang fiction sa kanila. Sa halip, ilalarawan namin ang wikang Java sa sapat na detalye bilang isang programming language (kabilang, siyempre, ang mga tampok na ginagawang posible na gamitin ito para sa pagtatrabaho sa Internet, na, sa katunayan, ay nagdulot ng napakaraming hype sa advertising). Pagkatapos nito, susubukan naming paghiwalayin ang realidad mula sa pantasya sa pamamagitan ng pagpapaliwanag kung ano ang magagawa at hindi magagawa ng wikang Java.

Sa una, nagkaroon ng kailaliman sa pagitan ng mga pangako sa advertising at ang mga tunay na posibilidad ng wikang Java. Habang tumatanda ito, naging mas matatag at maaasahan ang teknolohiya, at bumaba ang mga inaasahan sa isang makatwirang antas. Ang wikang Java ay lalong ginagamit ngayon upang lumikha ng "middleware" na nakikipag-ugnayan sa pagitan ng mga kliyente at mapagkukunan ng server (tulad ng mga database).

Bagama't hindi kahanga-hanga ang mahahalagang application na ito, sa lugar na ito napatunayang pinaka-kapaki-pakinabang ang wikang Java dahil sa pagiging independent nito sa makina, multithreading, at mga kakayahan sa network programming. Bilang karagdagan, ang wikang Java ay nanguna sa mga naka-embed na system, na naging de facto na pamantayan para sa mga portable na device, virtual kiosk, on-board na mga computer ng kotse, at iba pa. Gayunpaman, ang mga unang pagtatangka na muling isulat ang malawakang ginagamit na mga programang Java para sa mga personal na computer ay hindi matagumpay - ang mga resultang aplikasyon ay naging mahina at mabagal. Sa pagdating ng bagong bersyon, nalutas na ang ilan sa mga problemang ito, ngunit dapat tanggapin na ang mga gumagamit, sa pangkalahatan, ay walang pakialam kung anong wika ang nakasulat sa mga programang binibili nila. Naniniwala kami na ang pangunahing bentahe ng wikang Java ay lilitaw sa paglikha ng mga bagong uri ng mga device at application, at hindi sa muling pagsusulat ng mga kasalukuyang programa.

Java language bilang isang programming tool

Paano nalampasan ng Java programming language ang mga pangako nito sa advertising. Walang alinlangan, ito ay isa sa mga pinakamahusay na wika na magagamit sa mga seryosong programmer. Ang Java ay may potensyal na maging isang mahusay na programming language, ngunit malamang na huli na ngayon. Kapag lumitaw ang isang bagong programming language, ang nakakainis na problema ng pagiging tugma nito sa dating nilikha na software ay agad na lumitaw. Bukod dito, kahit na ang mga pagbabago sa mga programang ito ay maaaring gawin nang hindi pinakikialaman ang kanilang teksto, mahirap para sa mga tagalikha ng isang wika na malugod na tinatanggap ng publiko, gaya ng wikang Java, na direktang sabihin: "Oo, maaari naming nagkamali sa pagbuo ng bersyon X, ngunit ang bersyon Y ay magiging mas mahusay." Bilang resulta, habang naghihintay na lumitaw ang karagdagang mga pagpapabuti, dapat nating sabihin na ang istruktura ng wikang Java ay hindi magbabago nang malaki sa malapit na hinaharap.

Ang malinaw na tanong ay: Paano napabuti ang wikang Java?". Lumalabas na ito ay ginawa hindi sa pamamagitan ng pagpapabuti ng programming language mismo, ngunit sa panimula na pagbabago ng mga aklatan ng mga program na nakasulat sa wikang Java. Binago ng Sun Microsystems ang lahat: mula sa mga pangalan ng indibidwal na mga function ng library (ginagawa itong mas makabuluhan) at ang mga paraan ng pagpapatakbo ng mga graphic na module (sa pamamagitan ng pagbabago sa paraan ng paghawak ng mga kaganapan at bahagyang muling pagsusulat ng mga programa ng manggagawa), at nagtatapos sa paglikha ng mga bagong feature ng wika, gaya ng mga pasilidad sa pag-print, na wala sa Java 1.0. Ang resulta ay isang mas kapaki-pakinabang na platform ng programming kaysa sa lahat nakaraang bersyon wikang Java.

Naglabas ang Microsoft ng sarili nitong produkto na tinatawag na J++, na nauugnay sa wikang Java. Ang wikang J++ ay binibigyang-kahulugan ng isang virtual machine na katugma sa Java Virtual Machine kapag nagsasagawa ng bytecode, ngunit ang mga interface na may mga panlabas na code ay makabuluhang naiiba sa pagitan ng mga wikang ito. Ang mga wikang J++ at Java ay may halos parehong syntax. Gayunpaman, gumawa ang Microsoft ng mga karagdagang construct ng wika. Ang lahat ng mga ito ay medyo kaduda-dudang halaga, maliban sa Windows interface API. Bilang karagdagan sa katotohanan na ang mga wikang ito ay may parehong syntax, ang kanilang mga pangunahing aklatan (mga string, mga kagamitan, mga tool sa programming sa network, mga tool sa multithreading, mga aklatan sa matematika, atbp.) ay mahalagang pareho.

Gayunpaman, ang mga graphics library, user interface, at access sa mga malalayong bagay ay ganap na naiiba para sa mga wikang ito. Sa kasalukuyan, hindi na sinusuportahan ng Microsoft ang J++ na wika, na nakabuo ng bagong C# na wika na maraming pagkakatulad sa Java, ngunit gumagamit ng ibang virtual machine. Hindi saklaw ng aklat na ito ang J++ o C#.

Mga pakinabang ng wikang Java

1) Isa sa mga pangunahing bentahe ng wikang Java ay kalayaan mula sa plataporma kung saan isinasagawa ang mga programa: Ang parehong code ay maaaring patakbuhin sa ilalim ng Windows, Solaris, Linux, Machintosh, atbp. na mga operating system.
Ito ay talagang kinakailangan kapag ang mga programa ay nai-download sa Internet para sa kasunod na pagpapatupad sa ilalim ng iba't ibang mga operating system.

2) Ang isa pang kalamangan ay iyon ang syntax ng wikang Java ay katulad ng syntax ng wikang C ++, at para sa mga programmer na nakakaalam ng mga wikang C at C ++, hindi mahirap matutunan ito. Totoo, para sa mga programmer na alam ang Visual Basic na wika, maaaring hindi karaniwan ang syntax na ito.

Kung hindi ka pa nakapagprograma sa C++, maaaring hindi malinaw sa iyo ang ilan sa mga terminong ginamit sa seksyong ito. Sa kasong ito, maaari mong laktawan ito. Sa oras na makarating ka sa katapusan ng Kabanata 6, magiging pamilyar sa iyo ang mga terminong ito.

3) Gayundin, Java - isang ganap na object-oriented na wika, higit pa sa C++. Ang lahat ng entity sa wikang Java ay mga object, maliban sa ilang primitive na uri, gaya ng mga numero. (Dahil madaling bumuo ng mga kumplikadong proyekto gamit ang object-oriented programming, pinalitan nito ang mas lumang structured programming. Kung hindi ka pamilyar sa object-oriented programming, ibibigay sa iyo ng mga kabanata 3-6 ang lahat ng impormasyong kailangan mo tungkol dito.)

Gayunpaman, hindi sapat na bumuo ng isa pa, bahagyang pinabuting, diyalekto ng wikang C++. Napakahalaga na mas madaling bumuo ng mga programang walang bug sa Java kaysa sa C++. Bakit? Matagal nang pinag-isipan ng mga taga-disenyo ng wikang Java kung bakit ang mga program na nakasulat sa C++ ay madaling magkamali. Binigyan nila ang wikang Java ng mga tool upang maalis ang mismong posibilidad ng paglikha ng mga program na magtatago ng mga pinakakaraniwang error. Upang gawin ito, ang mga sumusunod ay ginagawa sa wikang Java.

4) Ang posibilidad ng tahasang paglalaan at pagpapalabas ng memorya ay hindi kasama.
Ang memorya sa wikang Java ay awtomatikong napalaya ng mekanismo ng pagkolekta ng basura. Ang programmer ay ginagarantiyahan laban sa mga error na nauugnay sa hindi tamang paggamit ng memorya.

5) Ang mga totoong array ay ipinakilala at ang pointer aritmetika ay ipinagbabawal.
Ngayon ang mga programmer, sa prinsipyo, ay hindi maaaring burahin ang data mula sa memorya dahil sa maling paggamit mga payo.

6) Ang posibilidad na malito ang operator ng pagtatalaga sa operator ng paghahambing ng pagkakapantay-pantay ay hindi kasama.
Ngayon ay hindi ka na makapag-compile if(ntries = 3) . . . (Ang mga programmer ng Visual Basic ay maaaring hindi mapansin ang anumang problema dito, dahil ang error na ito ay ang pinagmulan ng karamihan sa pagkalito sa C at C++).

7) Hindi kasama ang maramihang mana. Ito ay pinalitan ng isang bagong konsepto - isang interface, na hiniram mula sa Objective C na wika.
Ang isang interface ay nagbibigay sa programmer ng halos lahat ng bagay na maaaring makuha ng isang programmer mula sa maramihang pamana, habang iniiwasan ang mga kumplikado ng pamamahala ng mga hierarchy ng klase.

Mga tampok na katangian ng wikang Java

Simple
Ininterpret
Naipamahagi
Maaasahan
Ligtas
independiyenteng makina
Nakatuon sa Bagay
mataas na pagganap
multithreaded
pabago-bago
Independyente ang arkitektura ng computer

Natalakay na natin ang ilan sa mga puntong ito sa huling seksyon. Sa seksyong ito, kami ay: magbibigay ng mga panipi mula sa manwal ng wikang Java, na nagpapakita ng mga tampok ng wika; Ibahagi natin sa mga mambabasa ang ilang mga saloobin tungkol sa ilang partikular na katangian ng wika, batay sa sarili nating karanasan sa pinakabagong bersyon nito.

Simple

Nais naming lumikha ng isang sistema na madaling i-program, hindi nangangailangan ng karagdagang pagsasanay at isinasaalang-alang ang umiiral na kasanayan at mga pamantayan sa programming. Samakatuwid, kahit na itinuring namin ang C++ na hindi angkop para sa layuning ito, ang Java ay idinisenyo upang maging katulad hangga't maaari upang gawing mas madaling ma-access ang system. Ang Java ay kulang ng marami sa mga bihirang ginagamit, nakakubli, at nakakubli na mga feature ng C++ na pinaniniwalaan naming mas nakakapinsala kaysa sa kabutihan.

Ang syntax ng wikang Java ay mahalagang isang pinong bersyon ng syntax ng wikang C++. Ang wikang ito ay walang mga file ng header, pointer arithmetic (at mga pointer mismo), mga istruktura, unyon, overloading ng operator, mga virtual base na klase, at iba pa. (Ang mga pagkakaiba sa pagitan ng mga wikang Java at C++ ay inilarawan sa mga tala tungkol sa wikang C++ na nakakalat sa buong aklat.) Gayunpaman, hindi sinubukan ng mga developer na ayusin ang lahat ng mga pagkukulang ng wikang C++.

Halimbawa, ang syntax ng switch statement sa wikang Java ay nanatiling hindi nagbabago. Alam ang wikang C++, magiging madali itong lumipat sa syntax ng wikang Java.
Kung karaniwan kang gumagamit ng isang visual programming environment (tulad ng Visual Basic), mahihirapan kang magbasa ng Java language.
Ang syntax nito ay kadalasang mukhang kakaiba (bagaman hindi mahirap maunawaan ang kahulugan ng expression). Higit sa lahat, kapag nagtatrabaho sa wikang Java, kailangan mong mag-program ng higit pa. Ang kagandahan ng Visual Basic na wika ay ang visual programming environment nito ay nagpapahintulot sa iyo na halos awtomatikong lumikha ng imprastraktura ng application. Upang makamit ang parehong resulta gamit ang wikang Java, kailangan mong mag-program sa pamamagitan ng kamay, ngunit nagreresulta ito sa mas maiikling mga programa.

Gayunpaman, mayroong isang pangatlong uri ng kapaligiran ng programming na nagpapahintulot sa iyo na lumikha ng mga programa gamit ang teknolohiyang "drag-and-drop".

Ang isa pang aspeto ng pagiging simple ay ang kaiklian. Isa sa mga layunin ng wikang Java ay upang paganahin ang pagbuo ng mga programa na maaaring ganap na patakbuhin nang nakapag-iisa sa maliliit na makina. Ang laki ng pangunahing interpreter at suporta sa klase ay humigit-kumulang 40 KB; ang mga karaniwang aklatan at threading tool (lalo na ang self-contained microkernel) ay tumatagal ng isa pang 17: KB.
Ito ay isang malaking tagumpay. Tandaan, gayunpaman, na ang mga library ng suporta ng GUI ay mas malaki.

Nakatuon sa Bagay

Sa madaling salita, ang object-oriented programming ay isang programming technique na tumutuon sa data (ibig sabihin, mga bagay) at ang paraan upang ma-access ang mga ito. Ang pagguhit ng pagkakatulad ng pagkakarpintero, ang object-oriented na craftsman ay pangunahing nakatuon sa upuan na kanyang ginagawa, at pangalawa lamang na interesado sa mga tool na kailangan upang gawin ito; kasabay nito, ang karpintero na hindi nakatuon sa bagay ay iniisip lamang ang kanyang mga gamit. Ang object-oriented na mga katangian ng Java at C++ ay mahalagang pareho.

Napatunayan na ng orientation ng object ang halaga nito sa nakalipas na 30 taon, at kung wala ito imposibleng isipin ang isang modernong programming language. Sa katunayan, ang mga tampok na object-oriented ng wikang Java ay maihahambing sa C++. Ang pangunahing pagkakaiba sa pagitan ng mga ito ay nakasalalay sa mekanismo ng maramihang pamana, kung saan ang wikang Java ay nakahanap ng isang mas mahusay na solusyon, pati na rin sa metaclass na modelo ng wikang Java.

Ang mga mekanismo ng pagmuni-muni (Kabanata 5) at serialization ng object (Kabanata 12) ay nagbibigay-daan sa iyo na ipatupad ang mga persistent na bagay at tool para sa paglikha ng mga graphical na interface ng gumagamit batay sa mga handa na bahagi.

Kung hindi ka pa nakapagprograma sa isang object-oriented na wika, tingnang mabuti ang Kabanata 4-6. Ang mga kabanatang ito ay nagpapakilala sa mga pangunahing kaalaman ng object-oriented na programming at nagpapakita kung paano ito magagamit upang bumuo ng mga kumplikadong proyekto sa tradisyonal, pamamaraang mga wika tulad ng C o Basic.

Naipamahagi

Ang Java ay may malaking library ng mga programa para sa paglilipat ng data batay sa TCP/IP (Transmission Control Protocol/Internet Protocol) na mga protocol gaya ng HTTP (Hypertext Transfer Protocol) o FTP (File Transfer Protocol). file transfer protocol). Ang mga application na nakasulat sa wikang Java ay maaaring magbukas at mag-access ng mga bagay sa network gamit ang atMga URL (Uniform Resource Location - universal resource address) na kasingdali lokal na network.

Ang wikang Java ay nagbibigay ng makapangyarihan at maginhawang mga tool para sa pagtatrabaho sa network. Ang sinumang sumubok na magsulat ng mga programa sa Internet sa iba pang mga wika ay magugulat sa kung gaano kadali ang pinakamahirap na gawain, tulad ng pagbubukas ng mga koneksyon sa network (mga koneksyon sa socket), ay malulutas sa Java. Ang eleganteng mekanismo, na binubuo ng mga tinatawag na servlets (servlets), ay gumagawa ng trabaho sa server na lubos na mahusay.

Ang mga Servlet ay sinusuportahan ng maraming sikat mga web server. (Sasaklawin ang networking sa pangalawang volume.) Ang komunikasyon sa pagitan ng mga ipinamahagi na bagay sa wikang Java ay ibinibigay ng isang mekanismo para sa pagtawag sa malalayong pamamaraan (ang paksang ito ay saklaw din sa pangalawang volume).

Maaasahan

Ang wikang Java ay idinisenyo upang lumikha ng mga programa na dapat gumana nang mapagkakatiwalaan sa lahat ng sitwasyon. Ang pokus ng wikang Java ay sa maagang pagtuklas posibleng mga pagkakamali, dynamic na pagsusuri (sa panahon ng pagpapatupad ng programa), at pag-iwas sa mga sitwasyong madaling kapitan ng error... Ang tanging makabuluhang pagkakaiba sa pagitan ng Java at C++ ay ang pointer model ng Java language, na nag-aalis ng posibilidad ng memory overwriting at data corruption.

Ang ari-arian na ito ay lubhang kapaki-pakinabang din. Ang Java language compiler ay nakakakita ng mga error na sa ibang mga wika ay nakikita lamang sa runtime. Bilang karagdagan, ang mga programmer na gumugol ng maraming oras na naghahanap ng isang bug ng katiwalian sa memorya dahil sa isang masamang pointer ay magiging napakasaya na sa prinsipyo ang mga naturang problema ay hindi maaaring lumitaw sa wikang Java.

Kung nakapagprogram ka na sa Visual Basic o COBOL na mga wika na hindi tahasang gumagamit ng mga pointer, maaaring hindi mo maintindihan kung bakit ito napakahalaga. Ang mga programmer ng C ay hindi gaanong pinalad. Kailangan nila ng mga pointer para ma-access ang mga string, array, object, at kahit na mga file. Kapag nagprograma sa Visual Basic, wala sa mga ito ang kinakailangan, at ang programmer ay hindi kailangang mag-alala tungkol sa paglalaan ng memorya para sa mga entity na ito. Sa kabilang banda, maraming mga istruktura ng data sa isang wika na walang mga pointer ay napakahirap ipatupad. Ang mga ordinaryong istruktura tulad ng mga string at array ay hindi nangangailangan ng mga pointer. Ang buong kapangyarihan ng mga pointer ay ipinapakita lamang kung saan hindi sila maaaring ibigay, halimbawa, kapag lumilikha mga naka-link na listahan. Ang Java programmer ay walang hanggan na hindi masasamang pointer, maling alokasyon, at memory leaks.

Ligtas

Ang wikang Java ay idinisenyo upang magamit sa isang network o distributed na kapaligiran. Para sa kadahilanang ito, maraming pansin ang binayaran sa kaligtasan. Ang wikang Java ay nagpapahintulot sa iyo na lumikha ng mga system na protektado mula sa mga virus at pakikialam.

Sa unang edisyon ay isinulat namin ang, "Never say never," at tama kami. Natuklasan ng isang pangkat ng mga eksperto sa seguridad sa Princeton University ang mga unang bug sa seguridad sa Java 1.0 ilang sandali matapos maibenta ang unang bersyon ng JDK. Bukod dito, sila at ang iba pang mga espesyalista ay patuloy na nakahanap ng higit at higit pang mga bug sa mga mekanismo ng seguridad ng lahat ng kasunod na bersyon ng wikang Java.

Sa positibong bahagi ng sitwasyong ito, ang Java Language Development Group ay nagdeklara ng zero tolerance para sa anumang mga bug sa sistema ng seguridad at agad na nagtakda tungkol sa pag-aayos ng anumang mga problema na makikita sa mekanismo ng seguridad ng applet. Sa partikular, sa pamamagitan ng pag-publish ng mga panloob na detalye para sa interpreter ng wikang Java, pinadali ng Sun ang paghahanap ng mga nakatagong bug sa seguridad at na-outsource ang mga ito sa mga independiyenteng eksperto.

Pinataas nito ang posibilidad na ang lahat ng mga kahinaan sa seguridad ay malapit nang matuklasan. Sa anumang kaso, napakahirap na dayain ang sistema ng seguridad ng wikang Java. Ang mga bug na natagpuan sa ngayon ay halos hindi mahahalata, at ang kanilang bilang ay (medyo) maliit.

Ang web page ng seguridad ng Sun ay may sumusunod na URL: http://java.sun.com/sfaq/.

Narito ang ilang sitwasyon na pinipigilan ng Java security system na mangyari.

1) Ang stack overflow ng executable program, na sanhi ng kasumpa-sumpa na "worm" na kumalat sa Internet.

2) Pinsala sa mga bahagi ng memorya na nasa labas ng espasyong inilaan sa proseso.

3) Pagbasa at pagsulat ng mga lokal na file kapag gumagamit ng secure na class loader, gaya ng Web browser, na nagbabawal sa naturang file access.

Ang lahat ng mga hakbang sa seguridad na ito ay angkop at karaniwang gumagana nang walang kamali-mali, ngunit ang pagpapasya ay hindi kailanman masakit. Habang ang mga bug na natuklasan hanggang sa kasalukuyan ay malayo sa walang kabuluhan, at ang mga detalye ng paghahanap sa mga ito ay madalas na pinananatiling lihim, dapat itong aminin na ang pagpapatunay sa kaligtasan ng wikang Java ay malamang na hindi na posible.

Sa paglipas ng panahon, ang mga bagong tampok sa seguridad ay naidagdag sa wika. Simula sa bersyon 1.1, ipinakilala ng wikang Java ang paniwala ng mga digitally sign na klase. Sa pamamagitan ng paggamit ng isang klase na may digital signature, maaari mong tiyakin ang may-akda nito. Kung pinagkakatiwalaan mo ito, maaari mong ibigay sa klase ang lahat ng mga pribilehiyong magagamit sa iyong makina.

Ang isang alternatibong mekanismo ng paghahatid ng code na iminungkahi ng Microsoft ay batay sa teknolohiyang ActiveX at gumagamit lamang ng mga digital na lagda para sa seguridad. Malinaw, hindi ito sapat - maaaring patunayan ng sinumang gumagamit ng software ng Microsoft na ang mga programa mula sa mga kilalang tagagawa ay madalas na nag-crash, at sa gayon ay lumilikha ng panganib ng katiwalian ng data. Ang sistema ng seguridad sa wikang Java ay mas malakas kaysa sa teknolohiya ng ActiveX, dahil kinokontrol nito ang application mula sa sandaling magsimula ito at hindi pinapayagan itong magdulot ng pinsala.

independyente ang arkitektura

Ang compiler ay bumubuo ng isang object file na ang format ay hindi nakasalalay sa arkitektura ng computer - ang pinagsama-samang programa ay maaaring isagawa sa anumang mga processor sa ilalim ng kontrol ng Java program execution system. Upang gawin ito, ang Java language compiler ay bumubuo ng mga command, bytecode, na hindi nakadepende sa partikular na arkitektura ng computer. Ang bytecode ay idinisenyo sa paraang madali itong ma-interpret ng anumang makina o maisalin sa code na umaasa sa makina sa mabilisang paraan.

Ay hindi bagong ideya. Mahigit 20 taon na ang nakalilipas, ang sistema ng pagpapatupad ng Pascal na binuo ni Niclaus Wirth at ang sistema ng UCSD Pascal ay gumamit ng parehong teknolohiya. Ang paggamit ng mga bytecode ay nagbibigay ng malaking pakinabang sa pagpapatupad ng programa (gayunpaman, ang kasabay na compilation ay nagbabayad para dito sa maraming mga kaso). Ang mga nag-develop ng wikang Java ay nakagawa ng mahusay na trabaho sa pagbuo ng isang hanay ng mga tagubilin sa bytecode na gumagana nang mahusay sa karamihan mga modernong kompyuter, madaling isalin sa totoong mga tagubilin sa makina.

independiyenteng makina

Hindi tulad ng mga wikang C at C++, walang mga aspeto ng pagtutukoy ng Java na nakadepende sa sistema ng pagpapatupad. Parehong mahusay na tinukoy ang laki ng mga pangunahing uri ng data at ang mga pagpapatakbo ng aritmetika sa mga ito.

Halimbawa, ang uri ng int sa wikang Java ay palaging nangangahulugang isang 32-bit na integer. Sa C at C++, ang uri ng int ay maaaring mangahulugan ng alinman sa isang 16-bit na integer, isang 32-bit na integer, o isang integer ng di-makatwirang laki, ayon sa pinili ng developer ng isang partikular na compiler. Ang tanging paghihigpit ay ang laki ng isang int ay hindi maaaring mas maliit kaysa sa laki ng isang maikling int at mas malaki kaysa sa laki ng isang mahabang int. Ang nakapirming laki ng mga numeric na uri ay umiiwas sa marami sa mga annoyance na nauugnay sa pagpapatakbo ng mga program iba't ibang kompyuter. Ang binary data ay iniimbak at ipinapadala sa isang nakapirming format, na iniiwasan din ang mga hindi pagkakaunawaan na nauugnay sa iba't ibang byte order sa iba't ibang mga platform ("big endian/little endian" conflict). Ang mga linya ay naka-imbak sa karaniwang format Unicode.

Ang mga aklatan na bahagi ng system ay tumutukoy sa isang interface na independiyente sa makina. Halimbawa, ang wika ay nagbibigay ng abstract Window class at ang mga pagpapatupad nito para sa Unix, Windows, at Macintosh operating system.

Alam ng sinumang sumubok na magsulat ng isang programa na gumagana nang pantay-pantay sa Windows, Macintosh, at sa sampung lasa ng Unix na ito ay isang napakahirap na gawain. Ang bersyon ng Java ay gumawa ng isang kabayanihan na pagtatangka upang malutas ang problemang ito sa pamamagitan ng pagbibigay ng isang simpleng toolkit na umaangkop sa mga karaniwang elemento ng user interface sa isang malaking bilang ng mga platform ng software. Sa kasamaang palad, ang library, kung saan maraming trabaho ang ginugol, ay hindi nagpapahintulot sa amin na makamit ang mga katanggap-tanggap na resulta sa iba't ibang mga platform. (Kasabay nito, iba't ibang mga bug ang lumitaw sa mga graphics program sa iba't ibang mga platform.)

Gayunpaman, ito ay simula lamang. Sa maraming mga application, ang pagsasarili ng makina ay higit na mahalaga kaysa sa pagiging sopistikado ng isang graphical na user interface. Ang mga application na ito ang nakinabang mula sa pagpapakilala ng Java 1.0. Gayunpaman, ang toolkit ng GUI ay ganap na ngayong muling idinisenyo at hindi na nakadepende sa user interface sa host computer. Isang bagong bersyon mas makabuluhan at, sa aming opinyon, mas kaakit-akit sa gumagamit kaysa sa mga nauna.

Ininterpret

Ang Java language interpreter ay maaaring ipadala sa anumang makina at direktang magsagawa ng bytecode dito. Dahil ang pag-edit ng link ay isang mas madaling proseso, ang programming ay maaaring maging mas mabilis at mas mahusay.

Marahil ito ay isang kalamangan sa pagbuo ng application, ngunit ang quote ay isang malinaw na pagmamalabis. Sa anumang kaso, ang Java language compiler na kasama sa JSDK (Java Software Development Kit) ay medyo mabagal. (Ang ilang mga compiler ng ikatlong uri, tulad ng IBM's, ay mas mabilis.) Ang bilis ng recompilation ay isang salik lamang sa kahusayan ng isang programming environment. Kung ikukumpara ang bilis ng Java at Visual Basic programming environment, maaari kang mabigo.

mataas na pagganap

Bagama't ang mga bytecode na karaniwang binibigyang-kahulugan ay may higit sa sapat na pagganap, may mga sitwasyon kung saan kinakailangan ang mas mahusay na pagganap. Ang mga bytecode ay maaaring isalin sa mabilisang (sa runtime) sa mga machine code para sa partikular na processor kung saan tumatakbo ang application.

Kung ang isang interpreter ay ginagamit upang magsagawa ng mga bytecode, hindi mo dapat gamitin ang pariralang " mataas na pagganap". Gayunpaman, sa maraming mga platform, isa pang uri ng compilation ang posible, na ibinigay ng mga synchronous compiler (just-in-time compiler-JIT). Isinasalin nila ang bytecode sa machine-dependent code, iniimbak ang resulta sa memorya, at pagkatapos ay tinatawag itong kapag kinakailangan. Dahil ang interpretasyong ito ay isasagawa lamang, ang diskarteng ito ay nagpapataas ng bilis ng maraming beses.

Bagama't ang mga synchronous compiler ay mas mabagal pa rin kaysa sa machine-specific na compiler, ang mga ito ay hindi bababa sa mas mabilis kaysa sa mga interpreter, na nagbibigay ng 10x o kahit 20x na mga speedup para sa ilang mga programa. Ang teknolohiyang ito ay patuloy na bumubuti at kalaunan ay makakamit ang mga bilis na hindi malalampasan ng mga tradisyunal na compiler. Halimbawa, maaaring matukoy ng isang kasabay na compiler kung aling piraso ng code ang mas madalas na isinasagawa at i-optimize ito para sa bilis ng pagpapatupad.

MULTITHREADING

Nagbibigay ng mas mahusay na interaktibidad at pagpapatupad ng programa.

Kung nasubukan mo na ang multithreading sa anumang iba pang programming language, magugulat ka sa kung gaano kadaling gawin ito sa Java. Maaaring samantalahin ng mga thread sa wikang Java ang mga multiprocessor system kung pinapayagan ito ng operating system. Sa kasamaang palad, ang mga pagpapatupad ng mga thread sa karamihan ng mga platform ay malawak na nag-iiba, at ang mga taga-disenyo ng wikang Java ay walang pagsisikap na makamit ang pagkakapareho. Tanging ang code para sa pagtawag sa mga thread ay nananatiling pareho para sa lahat ng mga makina; Iniiwan ng wikang Java ang pagpapatupad ng multithreading sa pinagbabatayan na operating system o threading library. (Ang mga daloy ay inilarawan sa Tomo 2.) Sa kabila nito, ito ay ang kadalian ng organisasyon multithreaded computing ginagawang kaakit-akit ang wikang Java para sa pagbuo ng software ng server.

pabago-bago

Sa maraming paraan, ang Java ay mas dynamic kaysa sa C o C++. Ito ay idinisenyo upang madaling umangkop sa isang patuloy na nagbabagong kapaligiran. Maaari kang malayang magdagdag ng mga bagong pamamaraan at bagay sa mga aklatan nang hindi nagdudulot ng anumang pinsala. Pinapadali ng wikang Java ang pagkuha ng impormasyon tungkol sa progreso ng isang programa.

Napakahalaga nito kapag gusto mong magdagdag ng code sa isang program na tumatakbo na. Ang pangunahing halimbawa nito ay ang code na na-download mula sa Internet para sa pagpapatupad ng isang browser. Sa Java 1.0, ang pagkuha ng impormasyon tungkol sa pag-usad ng isang nagpapatupad na programa ay hindi talaga madali, ngunit ang kasalukuyang bersyon ng wikang Java ay naglalantad sa programmer ng parehong istraktura at pag-uugali ng mga bagay sa pagpapatupad ng programa.
Napakahalaga nito para sa mga system na dapat suriin ang mga bagay sa panahon ng pagpapatupad ng programa. Kasama sa mga system na ito ang mga tool sa GUI, smart debugger, plugin, at object database.

Java Language at ang Internet

Ang ideya ay simple - ang mga gumagamit ay nagda-download ng mga Java bytecode mula sa Internet at pinapatakbo ang mga ito sa kanilang mga makina. Ang mga Java program na tumatakbo sa mga Web browser ay tinatawag na mga applet. Upang magamit ang applet, kailangan mo ng isang Web browser na sumusuporta sa wikang Java at kayang bigyang-kahulugan ang mga bytecode. Ang Java source code ay lisensyado ng Sun, na iginigiit na ang wika mismo at ang istraktura ng mga pangunahing aklatan nito ay mananatiling hindi nagbabago. Sa kasamaang palad, ang katotohanan ay hindi ganoon. Ang iba't ibang bersyon ng mga browser ng Netscape at Internet Explorer ay sumusuporta sa iba't ibang bersyon ng wikang Java, at ang ilan sa mga bersyong ito ay lubhang luma na. Ang kapus-palad na sitwasyong ito ay lumilikha ng higit at higit pang mga hadlang sa pagbuo ng mga applet na sinasamantala pinakabagong bersyon wikang Java. Upang malutas ang problemang ito, bumuo ang Sun ng Java Plug-in na nagbibigay ng pinaka-advanced na kapaligiran para sa pagpapatakbo ng mga Java program batay sa mga browser ng Netscape at Internet Explorer.

Ang paglo-load ng applet ay parang pag-embed ng larawan sa isang Web page. Nagiging bahagi ng page ang applet, at bumabalot ang text sa espasyong nasasakupan nito. Gayunpaman, ang pagkakaiba ay ang imahe ay buhay na ngayon. Tumutugon ito sa mga utos ng gumagamit, nagbabago nito hitsura at nagbibigay ng data transfer sa pagitan ng computer kung saan tinitingnan ang applet at ang computer na kumokontrol sa applet.

Ang pag-load ng applet ay parang pagpasok ng larawan sa isang Web page. Nagiging bahagi ng page ang applet, at bumabalot ang text sa espasyong nasasakupan nito. Ang katotohanan ay ang imahe ay "live". Tumutugon ito sa mga utos ng user, binabago ang hitsura nito, at naglilipat ng data sa pagitan ng computer na nagpapatakbo ng applet at ng computer na nagpapatakbo ng applet.

Sa fig. Ang Figure 1.1 ay nagpapakita ng magandang halimbawa ng isang dynamic na Web page na nagsasagawa ng mga kumplikadong kalkulasyon at gumagamit ng applet upang gumuhit ng mga molekula. Upang mas maunawaan ang istraktura ng molekula, maaari mo itong paikutin o mag-zoom in gamit ang mouse. Ang ganitong mga manipulasyon ay hindi maipapatupad sa mga static na Web page, ngunit ginagawang posible ng mga applet. (Ang applet na ito ay matatagpuan sa http://jmol.sourceforge.net.)

kanin. 1.1. Jmol applet

Maaaring gamitin ang mga Applet upang magdagdag ng mga bagong button at text field sa isang Web page. Gayunpaman, ang mga naturang applet ay mabagal na mag-load sa linya ng telepono.

Ang parehong ay maaaring gawin sa Dynamic na HTML, mga anyo ng HTML (Hypertext Markup Language), o isang scripting language gaya ng JavaScript. Siyempre, ang mga unang applet ay idinisenyo para sa animation: umiikot na mga globo, sumasayaw na mga cartoon character, maarte na teksto, at iba pa. Gayunpaman, karamihan sa mga nasa itaas ay maaari ding gumawa ng mga animated na GIF, at ang Dynamic na HTML na sinamahan ng scripting ay higit pa sa mga applet.

Bilang resulta ng hindi pagkakatugma at hindi pagkakatugma ng browser sa proseso ng pag-download sa pamamagitan ng mabagal mga koneksyon sa network Ang mga Applet na idinisenyo para sa mga Web page ay hindi naging isang malaking tagumpay. Sa mga lokal na network (intranet) ang sitwasyon ay ganap na naiiba. Karaniwang wala silang mga isyu sa bandwidth, kaya hindi mahalaga ang oras ng paglo-load ng applet. Sa lokal na network, maaari mong piliin ang gustong browser o gamitin ang Java Plug-In. Hindi maaaring ilipat ng mga empleyado ang isang program na inihatid sa network sa maling lokasyon o hindi tama ang pag-install nito, at tagapangasiwa ng system hindi na kailangang i-bypass ang lahat ng mga client machine at i-update ang mga programa sa kanila. Ang isang malaking bilang ng mga programa para sa pamamahala ng imbentaryo, pagpaplano ng bakasyon, reimbursement sa paglalakbay, at mga katulad nito ay binuo ng maraming mga korporasyon sa anyo ng mga applet gamit ang mga browser.

Habang isinusulat namin ang aklat na ito, ang pendulum ay bumalik mula sa client-side programming patungo sa server-side programming. Sa partikular, ang mga server ng application ay maaaring gumamit ng mga kakayahan sa pagsubaybay virtual machine Java para sa awtomatikong pagbalanse ng pag-load, pag-pool ng database link, pag-synchronize ng object, ligtas na pag-shutdown at pag-reload, at iba pang mga prosesong kinakailangan para sa mga scalable na application ng server na halos imposibleng maipatupad nang tama. Kaya, ang mga programmer na lumikha ng mga application ay may pagkakataon na bilhin ang mga kumplikadong mekanismong ito, sa halip na sila mismo ang bumuo ng mga ito. Nadagdagan nito ang pagiging produktibo ng mga programmer - nakatuon sila sa lohika ng kanilang mga programa, na hindi ginulo ng mga detalye na nauugnay sa pagpapatakbo ng mga server.

Ang Java ay isang programming language mula sa Sun microsystems. Orihinal na binuo bilang isang programming language mga kagamitang elektroniko, ngunit kalaunan ay ginamit para sa pagsusulat ng mga application ng software ng server. Ang mga Java program ay cross-platform, ibig sabihin, maaari silang tumakbo sa anumang operating system.

Mga Batayan ng Java Programming

Ang Java, bilang isang object-oriented na wika, ay sumusunod sa mga pangunahing prinsipyo ng OOP:

  • mana;
  • polymorphism;
  • encapsulation.

Sa gitna ng "Java", tulad ng sa iba pang mga OOP, mayroong isang bagay at isang klase na may mga konstruktor at mga katangian. Mas mainam na simulan ang pag-aaral ng Java programming language hindi mula sa mga opisyal na mapagkukunan, ngunit mula sa mga manual para sa mga nagsisimula. Sa naturang mga manual, ang mga tampok ay inilarawan nang detalyado, ang mga halimbawa ng code ay ibinigay. Ang mga aklat tulad ng The Java Programming Language for Beginners ay nagpapaliwanag nang detalyado sa mga pangunahing prinsipyo at tampok ng pinangalanang wika.

Mga kakaiba

Ang code sa Java programming language ay isinalin sa bytecode at pagkatapos ay ipapatupad sa JVM virtual machine. Ang conversion sa bytecode ay ginagawa sa Javac, Jikes, Espresso, GCJ. May mga compiler na nagsasalin ng wikang C sa Java bytecode. Kaya, ang isang C application ay maaaring tumakbo sa anumang platform.

Ang "Java" syntax ay nailalarawan sa pamamagitan ng mga sumusunod:

  1. Ang mga pangalan ng klase ay dapat magsimula sa malaking titik. Kung ang pangalan ay binubuo ng ilang salita, ang pangalawa ay dapat magsimula sa malalaking titik.
  2. Kung maraming salita ang ginamit upang mabuo ang pamamaraan, kung gayon ang pangalawa sa mga ito ay dapat magsimula sa malaking titik.
  3. Nagsisimula ang pagproseso sa pangunahing() na pamamaraan - bahagi ito ng bawat programa.

Mga uri

Ang Java programming language ay may 8 primitive na uri. Ang mga ito ay ipinakita sa ibaba.

  • Ang Boolean ay isang uri ng boolean na kumukuha lamang ng dalawang value na true at false.
  • Ang byte ay ang pinakamaliit na uri ng integer na may sukat na 1 byte. Ginagamit ito kapag nagtatrabaho sa mga file o raw binary data. May saklaw na -128 hanggang 127.
  • Ang short ay may saklaw na -32768 hanggang 32767 at ginagamit upang kumatawan sa mga numero. Ang laki ng mga variable ng ganitong uri ay 2 bytes.
  • Ang Int ay nangangahulugan din ng mga numero, ngunit ang laki nito ay 4 na bait. Ito ay kadalasang ginagamit upang gumana sa integer data, at ang byte at short ay minsang pino-promote sa int.
  • Mahaba ang ginagamit para sa malalaking integer. Ang mga posibleng halaga ay mula -9223372036854775808 hanggang 9223372036854775807.
  • Ang float at double ay ginagamit upang tukuyin ang mga fraction. Ang kanilang pagkakaiba ay ang float ay maginhawa kapag ang mataas na katumpakan sa fractional na bahagi ng numero ay hindi kinakailangan.
  • Ang double ay nagpapakita ng lahat ng mga character pagkatapos ng delimiter na ".", at float - ang una lamang.
  • Ang string ay ang pinakakaraniwang ginagamit na primitive na uri kung saan tutukuyin ang mga string.

Mga Klase at Bagay

Ang mga klase at bagay ay may mahalagang papel sa Pag-aaral ng Java Programming Language para sa mga Nagsisimula.

Tinutukoy ng isang klase ang isang template para sa isang bagay, dapat itong magkaroon ng mga katangian at pamamaraan. Upang gawin ito, gamitin ang keyword na Klase. Kung ito ay nilikha sa isang hiwalay na file, ang pangalan ng klase at file ay dapat na pareho. Ang pangalan mismo ay binubuo ng dalawang bahagi: pangalan at extension.Java.

Sa Java, maaari kang lumikha ng isang subclass na magmamana ng mga pamamaraan ng magulang. Para dito, ginagamit ang salitang extend:

  • class name extends superclassname();

Ang isang constructor ay isang miyembro ng anumang klase, kahit na hindi ito tahasang itinakda. Sa kasong ito, nilikha ito ng compiler sa sarili nitong:

  • pampublikong klase Class( public Class()( ) public Class(String name)( ))

Ang pangalan ng constructor ay kapareho ng pangalan ng klase, bilang default ay mayroon lamang itong isang parameter:

  • pampublikong Puppy(String name)

Ang isang Bagay ay nilikha mula sa isang klase gamit ang new() operator:

  • Punto p = bagong Punto()

Natatanggap nito ang lahat ng mga pamamaraan at katangian ng klase, sa tulong kung saan ito nakikipag-ugnayan sa iba pang mga bagay. Ang isang bagay ay maaaring gamitin nang maraming beses sa ilalim ng iba't ibang mga variable.

    Punto p = bagong Punto()

    klase TwoPoints(

    pampublikong static void main(String args) (

    Punto p1 = bagong Punto();

    Punto p2 = bagong Punto();

    Ang mga variable at object ng object ay ganap na magkakaibang mga entity. Ang mga variable ng object ay mga link. Maaari silang tumuro sa anumang variable na hindi primitive na uri. Hindi tulad ng C++, ang kanilang uri ng conversion ay mahigpit na kinokontrol.

    Mga Patlang at Paraan

    Ang mga patlang ay lahat ng mga variable na nauugnay sa isang klase o bagay. Ang mga ito ay lokal bilang default at hindi magagamit sa ibang mga klase. Ang operator na "." ay ginagamit upang ma-access ang mga field:

    • variable ng classname

    Maaari mong tukuyin ang mga static na field gamit ang static na keyword. Ang ganitong mga field ay ang tanging paraan upang mag-imbak ng mga global variable. Ito ay dahil sa ang katunayan na walang mga pandaigdigang variable sa Java.

    Ipinatupad ang kakayahang mag-import ng mga variable upang makakuha ng access mula sa iba pang mga pakete:

    • mag-import ng static na classname;

    Ang isang pamamaraan ay isang subroutine para sa mga klase kung saan ito idineklara. Inilarawan sa parehong antas ng mga variable. Tinukoy bilang isang function at maaaring maging anumang uri, kabilang ang void:

    • class Point ( int x, y;

      void init(int a, int b) (

    Sa halimbawa sa itaas, ang Point class ay may integer x at y, isang init() na pamamaraan. Ang mga pamamaraan ay ina-access, tulad ng mga variable, sa pamamagitan ng paggamit ng "." operator:

    • point.init();

    Ang init na ari-arian ay hindi nagbabalik ng anuman, kaya ito ay may uri na walang bisa.

    Mga variable

    Sa Java programming language tutorial, ang mga variable ay sumasakop sa isang hiwalay na lugar. Ang lahat ng mga variable ay may isang tiyak na uri, tinutukoy nito ang kinakailangang lugar para sa pag-iimbak ng mga halaga, ang hanay ng mga posibleng halaga, ang listahan ng mga operasyon. Bago manipulahin ang mga halaga, idineklara ang mga variable.

    Maraming mga variable ang maaaring ipahayag nang sabay-sabay. Ginagamit ang kuwit upang ilista ang mga ito:

    • int a, b, c;

    Ang pagsisimula ay ginagawa pagkatapos o sa panahon ng deklarasyon:

    int a = 10, b = 10;

    Mayroong ilang mga uri:

    • mga lokal na variable (lokal);
    • mga variable ng halimbawa (mga variable ng halimbawa);
    • mga static na variable (static).

    Ang mga lokal na variable ay idineklara sa mga pamamaraan at konstruktor, ang mga ito ay nilikha sa panahon ng pagsisimula ng huli at nawasak pagkatapos makumpleto. Para sa kanila, ipinagbabawal na tukuyin ang mga modifier ng access at kontrolin ang antas ng accessibility. Hindi sila nakikita sa labas ng ipinahayag na bloke. Sa Java, ang mga variable ay walang paunang halaga, kaya ang isa ay dapat na italaga bago ang unang paggamit.

    Dapat ideklara ang mga variable ng instance sa loob ng klase. Ginagamit ang mga ito bilang mga pamamaraan, ngunit maa-access lamang ang mga ito pagkatapos magawa ang bagay. Ang variable ay nawasak kapag ang bagay ay nawasak. Ang mga variable ng instance, hindi tulad ng mga lokal na variable, ay may mga default na halaga:

    • mga numero - 0;
    • lohika - mali;
    • null ang mga sanggunian.

    Ang mga static na variable ay tinatawag na mga variable ng klase. Nagsisimula ang kanilang mga pangalan sa isang uppercase na character at tinukoy sa static na modifier. Ginagamit ang mga ito bilang mga constant, ayon sa pagkakabanggit, ang isang specifier mula sa listahan ay idinagdag sa kanila:

    • pangwakas;
    • pribado;
    • pampubliko.

    Patakbuhin sa simula ng programa, nawasak pagkatapos ihinto ang pagpapatupad. Tulad ng mga variable ng halimbawa, mayroon silang mga default na halaga na itinalaga sa mga walang laman na variable. Ang mga numero ay may value na 0, ang mga boolean ay may value na false, ang mga object reference sa una ay null. Ang mga static na variable ay tinatawag sa sumusunod na anyo:

    • ClassName.VariableName.

    Basurero

    Sa The Java Programming Language for Beginners Tutorial, ang seksyong awtomatikong kolektor ng basura ang pinakakawili-wili.

    Sa Java, hindi katulad ng wikang C, hindi ito posible manu-manong pag-alis bagay mula sa memorya. Para dito, ipinatupad ang isang awtomatikong paraan ng pagtanggal - ang kolektor ng basura. Sa tradisyunal na pagtanggal sa pamamagitan ng null, ang reference lamang sa object ang aalisin, at ang object mismo ay tatanggalin. May mga paraan para sa sapilitang pagkolekta ng basura, bagama't hindi ito inirerekomenda para sa normal na paggamit.

    Ang module para sa awtomatikong pagtanggal ng mga hindi nagamit na bagay ay tumatakbo sa background at magsisimula kapag ang programa ay hindi aktibo. Upang i-clear ang mga bagay mula sa memorya, huminto ang programa, pagkatapos na mapalaya ang memorya, magpapatuloy ang nagambalang operasyon.

    Mga modifier

    Makilala iba't ibang uri mga modifier. Bilang karagdagan sa mga tumutukoy sa paraan ng pag-access, may mga modifier para sa mga pamamaraan, variable, at isang klase. Ang mga pamamaraan na idineklara bilang pribado ay magagamit lamang sa ipinahayag na klase. Ang mga naturang variable ay hindi maaaring gamitin sa ibang mga klase at function. Ang publiko ay nagbibigay ng access sa anumang klase. Kung kailangan mong kumuha ng Public class mula sa isa pang package, dapat mo muna itong i-import.

    Ang protektadong modifier ay katulad ng pagkilos sa publiko - nagbubukas ito ng access sa mga field ng klase. Sa parehong mga kaso, ang mga variable ay maaaring gamitin sa ibang mga klase. Ngunit ang pampublikong modifier ay magagamit sa ganap na lahat, at ang protektadong modifier ay magagamit lamang para sa mga minanang klase.

    Ang modifier na inilalapat kapag gumagawa ng mga pamamaraan ay static. Nangangahulugan ito na ang nabuong pamamaraan ay umiiral nang hiwalay sa mga pagkakataon ng klase. Ang Panghuling modifier ay hindi kinokontrol ang pag-access, ngunit nagpapahiwatig ng imposibilidad ng karagdagang pagmamanipula ng mga halaga ng bagay. Ipinagbabawal nito ang pagbabago ng elemento kung saan ito tinukoy.

    Ang pangwakas para sa mga patlang ay ginagawang imposibleng baguhin ang unang halaga ng variable:

      pampublikong static void mthod(String args) (

      final int Name = 1;

      int Name = 2;// ay maghahagis ng error

    Ang mga variable na may panghuling modifier ay mga constant. Karaniwang isinusulat ang mga ito sa malalaking titik lamang. Ang CamelStyle at iba pang paraan ay hindi gumagana.

    Ang pangwakas para sa mga pamamaraan ay nagpapahiwatig ng pagbabawal sa pagbabago ng isang pamamaraan sa isang minanang klase:

      huling void myMethod() (

      System.out.printIn("Hello world");

    Ang pangwakas para sa mga klase ay nangangahulugan na hindi ka makakagawa ng mga inapo ng klase:

      panghuling klase ng pampublikong klase(

    Abstract - modifier para sa paglikha ng mga abstract na klase. Ang anumang abstract na klase at abstract na mga pamamaraan ay nilayon na palawigin pa sa ibang mga klase at bloke. Modifier Ang lumilipas ay nagsasabi sa virtual machine na huwag iproseso ang ibinigay na variable. Sa kasong ito, hindi lang ito makakatipid. Halimbawa, ang lumilipas na int Name = 100 ay hindi magpapatuloy, ngunit ang int b ay magpapatuloy.

    Mga platform at bersyon

    Mga kasalukuyang pamilya ng Java programming language:

    • karaniwang edisyon.
    • Enterprise Edition.
    • Micro Edition.
    • card.

    1. SE - ay ang pangunahing isa, malawakang ginagamit upang lumikha ng mga pasadyang aplikasyon para sa indibidwal na paggamit.
    2. Ang EE ay isang hanay ng mga detalye para sa pagbuo ng software ng enterprise. Naglalaman ito ng higit pang mga tampok kaysa sa SE, samakatuwid ito ay ginagamit sa isang komersyal na sukat sa malaki at katamtamang laki ng mga negosyo.
    3. ME - idinisenyo para sa mga device na may limitadong kapangyarihan at memorya, kadalasan ay mayroon silang maliit na laki ng display. Ang mga naturang device ay mga smartphone at PDA, mga receiver digital na telebisyon.
    4. Card - idinisenyo para sa mga device na may napakalimitadong mapagkukunan sa pag-compute, tulad ng mga smart card, sim card, ATM. Para sa mga layuning ito, ang bytecode, ang mga kinakailangan para sa platform, at ang mga bahagi ng mga aklatan ay binago.

    Aplikasyon

    Ang mga programa sa Java programming language ay malamang na mas mabagal at mas tumatagal random access memory. Ang isang paghahambing na pagsusuri ng mga wika ng Java at C ay nagpakita na ang C ay medyo mas produktibo. Pagkatapos ng maraming pagbabago at pag-optimize ng Java virtual machine, napabuti nito ang pagganap nito.

    Aktibong ginagamit para sa mga application para sa Android. Ang programa ay pinagsama-sama sa isang hindi karaniwang bytecode at naisakatuparan sa ART virtual machine. Ginagamit ang Android Studio para sa compilation. Ang IDE na ito mula sa Google ay ang opisyal na Android development IDE.

    Ang Microsoft ay bumuo ng sarili nitong pagpapatupad ng Java Virtual Machine MSJVM. Nagkaroon ito ng mga pagkakaiba-iba na sinira ang pangunahing konsepto ng cross-platform - walang suporta para sa ilang mga teknolohiya at pamamaraan, mayroong mga hindi karaniwang extension na gumagana lamang sa Windows platform. Inilabas ng Microsoft ang wikang J#, na ang syntax at pangkalahatang operasyon ay halos kapareho sa Java. Hindi ito umayon sa opisyal na detalye at kalaunan ay inalis mula sa karaniwang toolkit ng developer ng Microsoft Visual Studio.

    Java programming language at environment

    Ang pagbuo ng software ay isinasagawa sa mga sumusunod na IDE:

    1. NetBeans IDE.
    2. Eclipse IDE.
    3. IntelliJ IDEA.
    4. jDeveloper.
    5. Java para sa iOS.
    6. Geany.

    Ang JDK ay ipinamahagi ng Oracle bilang isang Java Development Kit. Kasama ang compiler, karaniwang mga aklatan, mga kagamitan, executive system. Ang mga modernong pinagsama-samang kapaligiran sa pag-unlad ay umaasa sa JDK.

    Maginhawang magsulat ng code sa Java programming language sa Netbeans at sa Eclipse IDE. Ito ay mga libreng integrated development environment, ang mga ito ay angkop para sa lahat ng Java platform. Ginagamit din para sa programming sa Python, PHP, JavaScript, C++.

    Ang IntelliJ IDE mula sa Jetbrains ay ipinamamahagi sa dalawang bersyon: libre at komersyal. Sinusuportahan ang pagsulat ng code sa maraming mga programming language, mayroong mga third-party na plug-in mula sa mga developer na nagpapatupad ng higit pang mga programming language.

    Ang JDeveloper ay isa pang pag-unlad mula sa Oracle. Ganap na nakasulat sa Java, kaya gumagana ito sa lahat ng mga operating system.

Panimula

Ang gawaing ito ay nakatuon sa isa sa mga pinaka-promising na mga programming language ngayon - ang wikang Java. Ang teknolohiyang tinatawag na "Java" ay maaaring, nang walang pagmamalabis, ay matatawag na rebolusyonaryo sa industriya ng software development.

Maaaring ipatupad ang pag-uuri sa iba pang mga programming language tulad ng PHP, C++, atbp. Mas kumikita lang ito sa Java. Ang mga detalye ay tinalakay sa ibaba. Ang bagong bagay ay nakasalalay sa katotohanan na ang isang programa sa pag-uuri ay hindi pa naipapatupad dati sa wikang ito at sa interpretasyong ito.

Upang maipatupad ang gawain, iminungkahi ang isang algorithm para sa pagsulat ng isang programa. Dagdag pa, ang algorithm na ito ay ipinatupad sa Java.

Paglalarawan ng Java programming language

Pangkalahatang katangian ng Java

Ang wikang Java ay pinili upang isulat ang sorter program. Ang Java ay isang object-oriented programming language na binuo ng Sun Microsystems mula noong 1991 at opisyal na inilabas noong Mayo 23, 1995. Sa una, ang bagong programming language ay tinawag na Oak (James Gosling) at binuo para sa consumer electronics, ngunit kalaunan ay pinalitan ng pangalan na Java at nagsimulang gamitin para sa pagsusulat ng mga applet, application, at server software.

Ang Java programming language ay hindi katulad ng iba pang umiiral. Ito ay idinisenyo upang gawing mas madaling magtrabaho sa mga computer sa WWW sa pamamagitan ng mga browser. Sa ngayon, ang bawat computer ay may browser. Sa turn, sinusuportahan ng bawat browser ang Java. Nangangahulugan ito na maaari mong tingnan ang mga dokumentong nakaimbak sa buong mundo at, sa pamamagitan ng pag-click sa isang link, isaaktibo ang isang Java program na ililipat sa network at tatakbo sa iyong computer.

Ang isa sa mga pangunahing bentahe ng wikang Java ay ang kalayaan nito mula sa platform at uri ng computer kung saan tumatakbo ang mga programa. Kaya, ang parehong code ay maaaring patakbuhin sa ilalim ng mga operating system na Windows, Linux, FreeBSD, Solaris, Apple Mac, atbp. Ito ay nagiging napakahalaga kapag ang mga programa ay nai-download sa pamamagitan ng pandaigdigang Internet at ginagamit sa iba't ibang mga platform. Ang Java programming language ay maaaring gumana hindi lamang sa mga static na teksto at graphics, kundi pati na rin sa iba't ibang mga dynamic na bagay.

Ang isa pang pantay na mahalagang bentahe ng Java ay ang mahusay na pagkakatulad nito sa C++ programming language. Samakatuwid, para sa mga programmer na pamilyar sa syntax ng C at C ++, magiging madali itong matutunan ang Java.

Gayundin, ang Java ay isang ganap na object-oriented na wika, higit pa sa C++. Ang lahat ng entity sa wikang Java ay mga object, maliban sa ilang primitive na uri, gaya ng mga numero.

Mahalaga rin na mas madaling bumuo ng mga programa sa Java na walang mga error kaysa sa C ++.

Ang bagay ay ang mga nag-develop ng wikang Java mula sa kumpanya ng Sun ay nagsagawa ng isang pangunahing pagsusuri ng mga programa sa wikang C ++. Nasuri ang "mga bottleneck" ng source code, na humahantong sa paglitaw ng mga error na mahirap matukoy. Samakatuwid, ang desisyon ay ginawa upang idisenyo ang wikang Java na may kakayahang lumikha ng mga programa na magtatago ng mga pinakakaraniwang error.

Para dito, ginawa ang mga sumusunod:

inalis ng mga developer ang posibilidad ng tahasang paglalaan at pagpapalaya ng memorya.

Halimbawa, ang memorya sa Java ay awtomatikong napalaya sa pamamagitan ng pagkolekta ng basura. Lumalabas na ang programmer ay nakaseguro laban sa mga error na nagmumula sa hindi tamang paggamit ng memorya.

ang pagpapakilala ng mga totoong array at ang pagbabawal ng mga pointer.

Ngayon ay hindi mabubura ng mga programmer ang data mula sa memorya dahil sa maling paggamit ng mga pointer.

ang posibilidad na malito ang operator ng pagtatalaga sa operator ng paghahambing para sa pagkakapantay-pantay ay hindi kasama. Bilang isang patakaran, ang problema sa "=" sign ay madalas na humahantong sa mga lohikal na error sa C at C ++, na hindi gaanong madaling makita. Lalo na sa malalaking programa.

ganap na hindi kasama ang maramihang mana. Ito ay pinalitan ng isang bagong konsepto - isang interface, ang ideya kung saan hiniram mula sa Objective C na wika.

Ang isang interface ay nagbibigay sa programmer ng halos lahat ng bagay na maaaring makuha ng isang programmer mula sa maramihang mana, habang iniiwasan ang mga kumplikadong kaakibat ng pamamahala ng mga hierarchy ng klase.

Ang pinakabagong release ay bersyon 1.6, na nagpabuti ng seguridad, pinahusay na suporta para sa Mozilla Rhino scripting language, pinahusay na desktop integration, at nagdagdag ng ilang bagong feature sa paggawa ng mga graphical na interface.

Java at Microsoft

Ang mga sumusunod na kumpanya ay pangunahing nakatuon sa mga teknolohiya ng Java (J2EE) sa halip na .NET, bagama't nakikitungo din sila sa huli: IBM, Oracle. Sa partikular, ang Oracle DBMS ay nagsasama ng isang JVM bilang bahagi nito, na nagbibigay ng kakayahang direktang iprograma ang DBMS sa wikang Java, kabilang ang, halimbawa, mga nakaimbak na pamamaraan.

Pangunahing tampok

Halimbawa ng programa

Programa na nagpi-print ng "Hello, World!":

Pampublikong klase HelloWorld ( public static void main(String args) ( System .out .println ("Hello, World!" ) ; ) )

Isang halimbawa ng paggamit ng mga template:

Mag-import ng java.util.*; pampublikong klase Sample ( public static void main(String args) ( // Lumikha ng isang bagay mula sa isang template. Listahan strings = bagong LinkedList (); strings.add("Hello" ); strings.add("mundo" ); strings.add("!"); para sa (String s: strings) ( System .out .print (s); System .out .print (" "); ) ) )

Mga Pangunahing Ideya

Mga primitive na uri

Mayroon lamang 8 uri ng scalar sa wikang Java: boolean, byte, char, short, int, long, float, double.

Mga klase ng wrapper para sa mga primitive na uri

Ang mga haba at hanay ng halaga ng mga primitive na uri ay tinutukoy ng pamantayan, at hindi ang pagpapatupad at ibinibigay sa talahanayan. Ang uri ng char ay ginawang two-byte para sa kaginhawaan ng localization (isa sa mga ideolohikal na prinsipyo ng Java): noong nabuo ang pamantayan, umiral na ang Unicode-16, ngunit hindi Unicode-32. Dahil walang solong-byte na uri ang natitira sa resulta, isang bagong uri ng byte ang idinagdag. Ang mga uri ng float at double ay maaaring magkaroon ng mga espesyal na halaga at "hindi isang numero" (

Uri ng Haba (sa bytes) Saklaw o hanay ng mga halaga
boolean hindi natukoy totoo, mali
byte 1 −128..127
char 2 0..2 16 -1, o 0..65535
maikli 2 −2 15 ..2 15 -1, o −32768..32767
int 4 −2 31 ..2 31 -1, o −2147483648..2147483647
mahaba 8 −2 63 ..2 63 -1, o humigit-kumulang −9.2 10 18 ..9.2 10 18
lumutang 4 -(2-2 -23) 2 127 ..(2-2 -23) 2 127 , o humigit-kumulang −3.4 10 38 ..3.4 10 38 , pati na rin ang , , NaN
doble 8 -(2-2 -52) 2 1023 ..(2-2 -52) 2 1023 , o tinatayang −1.8 10 308 ..1.8 10 308 , at gayundin , , NaN

Ang ganitong mahigpit na estandardisasyon ay kinakailangan upang gawing independyente ang platform ng wika, na isa sa mga pangangailangang pang-ideolohiya para sa Java at isa sa mga dahilan ng tagumpay nito. Gayunpaman, nananatili pa rin ang isang maliit na problema sa pagsasarili ng platform. Ang ilang mga processor ay gumagamit ng 10-byte na mga rehistro para sa intermediate na pag-iimbak ng mga resulta o pagbutihin ang katumpakan ng mga kalkulasyon sa ibang mga paraan. Upang gawing interoperable ang Java hangga't maaari sa pagitan ng iba't ibang mga system, ang anumang paraan upang mapabuti ang katumpakan ng mga kalkulasyon ay ipinagbabawal sa mga unang bersyon. Gayunpaman, nagresulta ito sa mas mabagal na pagganap. Lumalabas na kakaunti ang nangangailangan ng pagkasira ng katumpakan para sa kalayaan ng platform, lalo na kung kailangan nilang bayaran ito sa pamamagitan ng pagpapabagal sa gawain ng mga programa. Pagkatapos ng maraming protesta, inalis ang pagbabawal na ito, ngunit idinagdag ang strictfp na keyword upang huwag paganahin ang pagpapahusay ng katumpakan.

Mga pagbabagong-anyo sa mga operasyong matematikal

Ang wikang Java ay may mga sumusunod na patakaran:

  1. Kung ang isang operand ay may uri ng doble, ang isa ay na-convert din sa uri ng doble.
  2. Kung hindi man, kung ang isang operand ay nasa uri ng float, ang isa ay na-convert din sa uri ng float.
  3. Kung hindi, kung ang isang operand ay may uri na mahaba, ang isa pa ay mako-convert din sa uri ng mahaba.
  4. Kung hindi, ang parehong mga operand ay na-convert sa uri ng int.

Tinutukoy ng huling panuntunan ang Java mula sa mas lumang mga pagpapatupad at C++ at ginagawang mas ligtas ang code. Kaya, halimbawa, sa wikang Java, pagkatapos isagawa ang code

Maikling x = 50 , y = 1000 ; int z = x*y;

ang variable na z ay itinalaga ang halaga na 50000, hindi −15536, tulad ng karamihan sa mga walang pag-asa na hindi napapanahong pagpapatupad ng C at C++. Sa isang program na pinagsama-sama ng MS VC++ mula noong bersyon 7, pati na rin ng maraming iba pang modernong compiler (gcc , Intel C++, Borland C++, Comeau, atbp.), ang halaga ay magiging 50000 din.

Mga Variable ng Bagay, Mga Bagay, Mga Sanggunian, at Mga Punto

Ang wikang Java ay mayroon lamang mga dynamic na nilikha na mga bagay. Bukod dito, ang mga variable ng object type at object sa Java ay ganap na magkakaibang mga entity. Ang mga variable ng uri ng bagay ay mga sanggunian, iyon ay, mga implicit na pointer sa mga bagay na dynamic na nilikha. Ito ay binibigyang diin ng syntax ng deklarasyon ng mga variable. Halimbawa, sa Java hindi ka maaaring sumulat:

Doble ang isang[ 10 ] [ 20 ] ; Foo b(30) ;

Doble a = bagong doble [ 10 ] [ 20 ] ; Foo b = bagong Foo(30);

Sa panahon ng mga pagtatalaga, pagpasa sa mga subroutine, at paghahambing, ang mga variable ng object ay kumikilos tulad ng mga pointer, iyon ay, ang mga address ng mga bagay ay itinalaga, kinopya, at inihambing. At kapag ina-access ang mga field ng data o mga pamamaraan ng isang bagay gamit ang isang object variable, walang mga espesyal na operasyon ng dereference ang kinakailangan - ang access na ito ay ginaganap na parang ang object variable ay ang object mismo.

Ang mga variable ng object ay mga variable ng anumang uri, maliban sa mga simpleng uri ng numero. Walang mga tahasang pointer sa Java. Hindi tulad ng mga pointer sa C, C++, at iba pang mga programming language, ang mga reference sa Java ay lubos na secure dahil sa mahigpit na paghihigpit sa kanilang paggamit, lalo na:

  • Hindi mo mako-convert ang isang object ng uri int o anumang iba pang primitive na uri sa isang pointer o reference, at kabaliktaran.
  • Ipinagbabawal na isagawa ang mga pagpapatakbong ++, −−, +, − o anumang iba pang pagpapatakbo ng arithmetic sa mga link.
  • Mahigpit na kinokontrol ang uri ng conversion sa pagitan ng mga sanggunian. Maliban sa mga reference ng array, pinahihintulutan lang na mag-convert ng mga reference sa pagitan ng isang minanang uri at descendant nito, at ang conversion mula sa minanang uri patungo sa inheriting na uri ay dapat na tahasang tukuyin at suriin para sa pagiging makabuluhan sa runtime. Pinapayagan lang ang mga conversion ng reference ng array kapag pinapayagan ang mga conversion ng kanilang mga baseng uri at walang mga salungatan sa dimensyon.
  • Sa Java, walang mga pagpapatakbo ng take-address (&) o take-at-address (*). Ang asterisk sa Java ay nangangahulugan ng multiplikasyon, iyon lang. Ang ampersand (&) ay nangangahulugang "bitwise and" (ang double ampersand ay "logical and").

Dahil sa mga espesyal na ipinakilalang mga paghihigpit sa Java, ang direktang pagmamanipula ng memorya sa antas ng mga pisikal na address ay imposible (bagaman may mga sanggunian na tumuturo sa wala: ang halaga ng naturang sanggunian ay tinutukoy ng null).

Mga dobleng link at pag-clone

Dahil ang mga variable ng object ay mga reference na variable, hindi kinokopya ng assignment ang object. Kaya, kung magsusulat ka

Foo foo, bar; ... bar = foo;

pagkatapos ay kokopyahin ang address mula sa foo hanggang bar . Iyon ay, ang foo at bar ay ituturo sa parehong lugar ng memorya, iyon ay, sa parehong bagay; Ang pagtatangkang baguhin ang mga patlang ng bagay na isinangguni ng foo ay babaguhin ang bagay na isinangguni ng bar , at kabaliktaran. Kung kailangan mong makakuha ng isa pa kopya source object, gamitin ang alinman sa method (function ng miyembro, sa terminolohiya ng C++) clone() , na lumilikha ng kopya ng object, o isang copy constructor.

Ang clone() method ay nangangailangan ng klase na ipatupad ang Cloneable interface (tingnan sa ibaba para sa mga interface). Kung ang isang klase ay nagpapatupad ng Cloneable na interface, bilang default na clone() ay kinokopya ang lahat ng mga field ( maliit na kopya). Kung gusto mong i-clone ang mga field (pati na rin ang kanilang mga field, at iba pa) sa halip na kopyahin, dapat mong i-override ang clone() na paraan. Ang pagtukoy at paggamit ng clone() na pamamaraan ay kadalasang hindi isang maliit na gawain.

Pagkolekta ng basura

Sa wikang Java, hindi posibleng tahasang alisin ang isang bagay mula sa memorya - ang pagkolekta ng basura ay ipinatupad sa halip. Ang tradisyunal na panlilinlang upang bigyan ang kolektor ng basura ng isang "pahiwatig" upang i-deallocate ang memorya ay ang magtakda ng isang variable sa null . Gayunpaman, hindi ito nangangahulugan na pinalitan ang bagay wala, ay tiyak at agad na tatanggalin. Ang diskarteng ito ay nag-aalis lamang ng sanggunian sa bagay, iyon ay, i-unbinds ang pointer mula sa bagay sa memorya. Sa kasong ito, dapat tandaan na ang bagay ay hindi tatanggalin ng basurero hangga't kahit isang sanggunian mula sa ginamit na mga variable o bagay ay tumuturo dito. Mayroon ding mga pamamaraan para sa pagsisimula ng sapilitang pangongolekta ng basura, ngunit hindi sila garantisadong matatawag sa runtime at hindi inirerekomenda para sa normal na paggamit.

Mga Klase at Pag-andar

Ang Java ay hindi isang procedural na wika: ang anumang function ay maaari lamang umiral sa loob ng isang klase. Ito ay binibigyang-diin ng terminolohiya ng wikang Java, kung saan walang mga konsepto ng "function" o "member function" (Eng. function ng miyembro), ngunit lamang paraan. Ang mga karaniwang pag-andar ay naging mga pamamaraan din. Halimbawa, walang sin() function sa Java, ngunit mayroong isang Math.sin() na pamamaraan ng klase ng Math (na naglalaman, bilang karagdagan sa sin() , ang cos() , exp() , sqrt() , abs() at marami pang ibang pamamaraan).

Mga static na pamamaraan at field

Upang hindi makalikha ng object ng Math class (at iba pang katulad na klase) sa tuwing kailangan mong tawagan ang sin () (at iba pang katulad na function), ang konsepto mga static na pamamaraan(Ingles) static na pamamaraan; minsan sa Russian ay tinatawag silang static). Ang isang static na pamamaraan (minarkahan ng static na keyword sa paglalarawan) ay maaaring tawagin nang hindi lumilikha ng isang bagay ng klase nito. Samakatuwid, ang isang tao ay maaaring magsulat

Doble x = Math .sin(1) ;

Math m = bagong Math(); dobleng x = m.sin(1) ;

Ang paghihigpit sa mga static na pamamaraan ay maaari lamang nilang ma-access ang mga static na field at pamamaraan sa object na ito.

Ang mga static na patlang ay may parehong kahulugan tulad ng sa C++: mayroon lamang isang pagkakataon ng bawat isa.

Katapusan

Iba't ibang bagay ang ibig sabihin ng panghuling keyword kapag naglalarawan ng variable, pamamaraan, o klase. Ang panghuling variable (pinangalanang pare-pareho) ay sinisimulan kapag ito ay idineklara at hindi na mababago pa. Ang pangwakas na paraan ay hindi maaaring ma-override sa pamamagitan ng mana. Ang huling klase ay hindi maaaring magkaroon ng mga tagapagmana.

Abstraction

Sa Java, ang mga pamamaraan na hindi tahasang idineklara na pinal o pribado ay virtual sa terminolohiya ng C++: ang pagtawag sa isang paraan na naiiba ang kahulugan sa base at pagmamana ng mga klase ay palaging may runtime check.

Ang abstract na pamamaraan (abstract descriptor) sa Java ay isang paraan kung saan ang mga parameter at uri ng pagbabalik ay tinukoy, ngunit hindi isang katawan. Ang isang abstract na pamamaraan ay tinukoy sa mga nagmula na klase. Sa C++, ang parehong bagay ay tinatawag na purong virtual function. Upang mailarawan ng isang klase ang mga abstract na pamamaraan, ang klase mismo ay dapat ding ideklarang abstract. Hindi malikha ang mga abstract na bagay sa klase.

Mga interface

Ang pinakamataas na antas ng abstraction sa Java ay ang interface. Ang lahat ng mga pamamaraan ng interface ay abstract: ang abstract descriptor ay hindi kahit na kinakailangan. Ang isang interface ay hindi isang klase. Maaaring magmana ang isang klase, o palawakin(extend) ibang klase, o ipatupad(nagpapatupad) interface. Bilang karagdagan, ang isang interface ay maaaring magmana mula sa o mag-extend ng isa pang interface.

Sa Java ang isang klase ay hindi maaaring magmana ng higit sa isang klase, ngunit maaari itong magpatupad ng anumang bilang ng mga interface.

Ang mga interface ay maaaring ipasa sa mga pamamaraan bilang mga parameter, ngunit ang mga bagay sa kanilang mga uri ay hindi maaaring gawin.

Mga interface ng marker

Mayroong ilang mga interface sa Java na hindi naglalaman ng mga pamamaraan na ipapatupad, ngunit pinangangasiwaan sa isang espesyal na paraan ng JVM. Ito ang mga interface:

  • java.lang.Cloneable
  • java.io.Serializable
  • java.rmi.Remote

Mga template sa Java (generics)

Simula sa Java 5, ang wika ay may generic na mekanismo ng programming - mga template na panlabas na malapit sa mga template ng C++. Gamit ang isang espesyal na syntax sa paglalarawan ng mga klase at pamamaraan, maaari mong tukuyin ang mga uri ng mga parameter na maaaring magamit sa loob ng paglalarawan bilang mga uri ng mga patlang, mga parameter, at mga halaga ng pagbabalik ng mga pamamaraan.

// Generic na deklarasyon ng klase klase GenericClass ( E getFirst() ( ... ) void add(E obj) ( ... ) ) // Paggamit ng generic na klase sa code GenericClass var = bagong GenericClass (); var.add("qwerty"); String p = var.getFirst();

Ang generic na deklarasyon ng mga klase, interface at pamamaraan ay pinapayagan. Bilang karagdagan, sinusuportahan ng syntax ang limitadong mga deklarasyon ng mga uri ng parameter: isang indikasyon sa deklarasyon ng isang pagbuo ng form. ay nangangailangan na ang uri ng parameter T ipatupad ang mga interface A, B, C, at iba pa, at ang construct nangangailangan na ang uri ng parameter T ay isang uri C o isa sa mga ninuno nito.

Hindi tulad ng mga template ng C#, ang mga template ng Java ay hindi sinusuportahan ng runtime - gumagawa lang ang compiler ng bytecode na hindi naglalaman ng anumang mga template. Ang pagpapatupad ng mga template sa Java ay sa panimula ay naiiba mula sa pagpapatupad ng mga katulad na mekanismo sa C ++: ang compiler ay hindi bumubuo ng isang hiwalay na variant ng isang klase o pamamaraan ng template para sa bawat kaso ng paggamit ng isang template, ngunit lumilikha lamang ng isang solong pagpapatupad ng bytecode na naglalaman ng ang mga kinakailangang uri ng pagsusuri at conversion. Ito ay humahantong sa isang bilang ng mga paghihigpit sa paggamit ng mga template sa mga programang Java.

Class Membership Check

Sa Java, maaari mong tahasang suriin kung saang klase kabilang ang isang bagay. Ang expression na foo instanceof Foo ay totoo kung ang object na foo ay kabilang sa klase na Foo o ang descendant nito, o nagpapatupad ng Foo interface (o, sa pangkalahatan, nagmamana ng klase na nagpapatupad ng interface na minana ng Foo).

Susunod, ang getClass() function na tinukoy para sa lahat ng mga bagay ay nagbabalik ng isang bagay na may uri na Class . Ang mga bagay na ito ay maihahambing. Kaya, halimbawa, ang foo.getClass()==bar.getClass() ay magiging totoo kung ang mga bagay na foo at bar ay nabibilang sa eksaktong parehong klase (ngunit hindi ito nangangahulugan na sila ay dalawang magkaparehong bagay).

Bilang karagdagan, ang isang object ng uri ng Class ng anumang uri ay maaaring makuha tulad nito: Integer.class , Object.class .

Gayunpaman, ang direktang paghahambing ng mga klase ay hindi palaging ang pinakamahusay na paraan ng pagsuri sa pagiging miyembro ng klase. Kadalasan, ang isAssignableFrom() function ang ginagamit sa halip. Ang function na ito ay tinukoy sa isang object ng uri ng Class at tumatagal ng isang object ng uri ng Class bilang isang parameter. Kaya, ang pagtawag sa Foo.class.isAssignableFrom(Bar.class) ay magbabalik ng true kung ang Foo ay isang ninuno ng klase ng Bar. Dahil ang lahat ng mga bagay ay mga inapo ng uri na Object , ang pagtawag sa Object.class.isAssignableFrom() ay palaging magbabalik true . Kasama ng mga nabanggit na function ng isang object ng uri ng Class, ang mga function ayInstance() (katumbas ng instanceof) at cast() (nagko-convert ng parameter sa isang object ng napiling klase) ay ginagamit din.

Mga Aklatan ng Klase

Mga tool sa pagbuo ng software

  • JDK - bilang karagdagan sa isang hanay ng mga aklatan para sa mga platform ng Java SE at Java EE, naglalaman ito ng isang compiler command line javac at isang set ng mga utility na gumagana din sa command line mode.
  • Ang NetBeans IDE ay isang libreng IDE para sa lahat ng Java platform - Java ME, Java SE at Java EE. Na-promote ng Sun Microsystems, ang developer ng Java, bilang baseline para sa pagbuo ng software sa Java at iba pang mga wika (, C++, Fortran, atbp.).
  • Java SE at Java EE. Ang trabaho ay isinasagawa upang suportahan ang Java ME platform sa Eclipse. Ang C, C++, Fortran, atbp. ay na-promote.)
  • Ang IntelliJ IDEA ay isang komersyal na kapaligiran sa pagpapaunlad para sa mga platform ng Java SE, Java EE, at Java ME.

Mga Tala

  1. java (Ingles) . Merriam-Webster Online Dictionary. Merriam Webster. - English na pagbigkas ng salitang "Java". Hinango noong Hunyo 5, 2009.
  2. Robert Tolksdorf. Mga programming language para sa Java Virtual Machine JVM. ay pananaliksik GmbH. - Online na catalog ng mga alternatibong wika at mga extension ng wika para sa JVM. Hinango noong Hunyo 5, 2009.
  3. Suporta sa Microsoft Java Virtual Machine. Microsoft (2003-09-12). - Opisyal na pahayag ng Microsoft tungkol sa programa ng suporta ng MSJVM. Hinango noong Hunyo 5, 2009.
  4. Todd Hoff Arkitektura ng Amazon (Ingles) (2007-09-18). - Pagtalakay sa arkitektura ng Amazon gamit ang mga teknolohiya ng Java. Hinango noong Hunyo 6, 2009.
  5. Amazon Elastic Compute Cloud (Amazon EC2) . Amazon Web Services LLC. - Paglalarawan ng teknolohiya at mga kakayahan ng Amazon EC2 bilang isang serbisyo sa web. Hinango noong Hunyo 6, 2009.
  6. Todd Hoff eBay Architecture (Ingles) (2008-05-27). - Pagtalakay sa arkitektura ng eBay sa Java platform. Hinango noong Hunyo 6, 2009.
  7. Randy Shoup, Dan Pritchett Ang eBay Architecture (Ingles) (PDF). SD Forum 2006(2006-11-29). - Pagtatanghal sa kasaysayan ng pag-unlad ng arkitektura ng eBay. Hinango noong Hunyo 6, 2009.
  8. Allen Stern Eksklusibong Panayam Sa Yandex CTO Ilya Segalovich (Ingles) . CenterNetworks (2008-01-14). - Panayam kay Yandex CTO Ilya Segalovich. Hinango noong Hunyo 6, 2009.
  9. Anatoly Orlov Yandex.Search architecture (Russian) (PowerPoint). Mga materyales ng pulong ng JUG sa Yekaterinburg(2008-05-24). Hinango noong Hunyo 6, 2009.
  10. Brian Guan Ang LinkedIn Blog. Archive ng blog. Grails sa LinkedIn. (Ingles) . LinkedIn.com (2008-06-11). - Ang kasaysayan ng paglikha ng LinkedIn system batay sa teknolohiya ng Grails Java. Hinango noong Hunyo 5, 2009.
  11. OracleJVM at Java Stored Procedures. Oracle Inc.. - Isang seksyon ng portal ng Oracle na nakatuon sa mga teknolohiya ng Java bilang bahagi ng server ng Oracle DBMS. Hinango noong Hunyo 5, 2009.
  12. Link sa dokumentasyon para sa Object.clone() method

Panitikan

  • Monakhov Vadim Ang Java Programming Language at ang NetBeans Environment, 2nd Edition. - St. Petersburg .: "BHV-Petersburg", 2009. - S. 720. - ISBN 978-5-9775-0424-9
  • Joshua Bloch. Java. Epektibong programming = Epektibong Java. - M .: "Lori", 2002. - S. 224. - ISBN 5-85582-169-2
  • Java 2. Professional's Library, Volume 1. Fundamentals = Core Java™ 2, Volume I--Fundamentals. - ika-7 ed. - M .: "Williams", 2007. - S. 896. - ISBN 0-13-148202-5
  • Kay S. Horstmann, Gary Cornell. Java 2. The Professional's Library, Volume 2. Programming Tips = Core Java™ 2, Volume II--Advanced na Mga Tampok. - ika-7 ed. - M .: "Williams", 2007. - S. 1168. - ISBN 0-13-111826-9
  • Bruce Eckel. Java Philosophy = Pag-iisip sa Java. - Ika-3 ed. - St. Petersburg: "Piter", 2003. - S. 976. - ISBN 5-88782-105-1
  • Herbert Schildt, James Holmes. Ang Sining ng Java Programming = Ang Sining ng Java. - M .: "Dialectics", 2005. - S. 336. - ISBN 0-07-222971-3
  • Lubos Bruga. Mabilis na Java: Practical Express Course = Luboš Brůha. Java Hotová řešení.. - M .: Agham at Teknolohiya, 2006. - S. 369. - ISBN 5-94387-282-5

Ang Java ay isang programming language na binuo ng SunMicrosystems. Ang mga application ng Java ay karaniwang pinagsama-sama sa espesyal na bytecode, kaya maaari silang tumakbo sa anumang Java virtual machine (JVM) anuman ang arkitektura ng computer. Ang opisyal na petsa ng paglabas ay Mayo 23, 1995. Ngayon, ang teknolohiya ng Java ay nagbibigay ng paraan upang gawing interactive, dynamic na mga dokumento ang mga static na Web page at lumikha ng mga distributed, platform-independent na mga application.

Ang mga Java program ay isinalin sa bytecode, na pinaandar ng Java Virtual Machine (JVM), isang program na nagpoproseso ng byte code at nagpapasa ng mga tagubilin sa hardware bilang isang interpreter.

Ang bentahe ng ganitong paraan ng pagpapatupad ng mga programa ay nasa kumpletong kalayaan ng bytecode mula sa operating system at hardware, na nagbibigay-daan sa iyo na magpatakbo ng mga Java application sa anumang device kung saan mayroong katumbas na virtual machine. Isa pa mahalagang katangian Ang teknolohiya ng Java ay isang nababaluktot na sistema ng seguridad dahil sa ang katunayan na ang pagpapatupad ng programa ay ganap na kinokontrol ng virtual machine. Ang anumang operasyon na lumampas sa mga itinakdang pahintulot ng program (tulad ng pagtatangka sa hindi awtorisadong pag-access sa data o pagkonekta sa isa pang computer) ay nagdudulot ng agarang pag-abort.

Kadalasan, ang mga disadvantages ng konsepto ng isang virtual machine ay kasama ang katotohanan na ang pagpapatupad ng bytecode ng isang virtual machine ay maaaring mabawasan ang pagganap ng programa ng mga algorithm na ipinatupad sa wikang Java. Kamakailan, ilang mga pagpapabuti ang ginawa na bahagyang nagpapataas ng bilis ng pagpapatupad ng mga programa ng Java:

Application ng teknolohiya ng pagsasalin ng bytecode sa machine code nang direkta sa panahon ng pagpapatakbo ng programa (JIT technology) na may kakayahang mag-save ng mga bersyon ng klase sa machine code,

Malawakang paggamit ng platform - oriented na code (native code) sa mga karaniwang aklatan,

Hardware na nagbibigay ng pinabilis na pagpoproseso ng bytecode (halimbawa, teknolohiya ng Jazelle, suportado ng ilang ARM processor).



Pangunahing katangian ng wika:

Awtomatikong pamamahala ng memorya;

Pinalawak na mga kakayahan para sa paghawak ng mga pambihirang sitwasyon;

Isang rich set ng input / output filtering tool;

Isang hanay ng mga karaniwang koleksyon tulad ng array, listahan, stack, atbp.;

Availability ng mga simpleng tool para sa paglikha ng mga network application (kabilang ang paggamit ng RMI protocol);

Ang pagkakaroon ng mga klase na nagbibigay-daan sa iyong gumawa ng mga kahilingan sa HTTP at magproseso ng mga tugon;

Mga built-in na tool sa wika para sa paglikha ng mga multi-threaded na application;

Pinag-isang pag-access sa database:

Sa antas ng indibidwal na mga query sa SQL - batay sa JDBC, SQLJ;

Sa antas ng konsepto ng mga bagay na may kakayahang mag-imbak sa isang database - batay sa Java Data Objects at Java Persistence API;

Suporta para sa mga template (simula sa bersyon 1.5);

Parallel na pagpapatupad ng mga programa.

1.4.3 C# programming language

Noong Hunyo 2000, naging kilala ito tungkol sa isang bagong programming language na ipinanganak sa bituka ng Microsoft. Naging bahagi siya bagong teknolohiya Tinawag ng Microsoft ang .NET (binibigkas na "Dot Net"). Sa loob ng balangkas ng teknolohiyang ito, ang isang kapaligiran ng pagpapatupad para sa mga programa (Common Language Runtime, CLR) na nakasulat sa iba't ibang mga programming language ay ibinigay. Ang isa sa mga wikang ito, ang pangunahing isa sa kapaligirang ito, ay C # (C #, basahin ang "C sharp", "C sharp"). Sa pamamagitan ng pangalan ng wika, siyempre, nais nilang bigyang-diin ang kaugnayan nito sa C++, dahil ang # ay dalawang intersecting plus. Ngunit higit sa lahat, ang bagong wika ay katulad ng Java. At walang duda na isa sa mga dahilan ng paglitaw nito ay ang pagnanais ng Microsoft na sagutin ang hamon ng Sun.

Kahit na ang mga may-akda ng C# ay hindi opisyal na pinangalanan, sa pahina ng pamagat ng isa sa mga paunang edisyon ng gabay sa wika, si Anders Hejlsberg, ang lumikha ng Turbo Pascal at Delphi, na lumipat sa Microsoft noong 1996, at Scott Wiltamuth ay ipinahiwatig.

Ang pinag-isang kapaligiran ng pagpapatupad ng programa ay batay sa paggamit ng intermediate language na IL (Intermediate Language - intermediate language), na gumaganap ng halos parehong papel bilang bytecode ng Java virtual machine. Ang mga compiler mula sa iba't ibang wika na ginagamit sa loob ng teknolohiyang .NET ay nagsasalin ng mga programa sa IL code. Tulad ng Java bytecode, ang IL code ay kumakatawan sa mga tagubilin ng isang hypothetical stack computer. Ngunit mayroon ding pagkakaiba sa disenyo at paggamit ng IL.

Una, hindi tulad ng JVM, ang IL ay hindi nakatali sa isang programming language. Kasama sa mga paunang bersyon ng Microsoft.NET ang mga compiler para sa C++, C#, Visual Basic. Ang mga independiyenteng developer ay maaaring magdagdag ng iba pang mga wika sa pamamagitan ng paglikha ng mga compiler mula sa mga wikang iyon sa IL code.

Pangalawa, ang IL ay hindi inilaan para sa programmatic na interpretasyon, ngunit para sa kasunod na compilation sa machine code. Ito ay nagbibigay-daan sa iyo upang makamit ang makabuluhang mas mataas na pagganap ng mga programa. Ang mga file na naglalaman ng IL code ay may sapat na impormasyon para gumana ang isang nag-optimize na compiler.

“Ang C# ay isang simple, moderno, uri-ligtas na object-oriented na wika na nagmula sa C at C++. Magiging maginhawa at mauunawaan ang C# para sa mga programmer na nakakaalam ng C at C++. Pinagsasama ng C# ang pagiging produktibo ng Visual Basic sa kapangyarihan ng C++." Ang mga salitang ito ay nagsisimula sa paglalarawan ng C#.

Isipin mo teknikal na mga tampok wika:

Ang compilation unit ay isang file (tulad ng sa C, C++, Java). Ang file ay maaaring maglaman ng isa o higit pang uri ng mga paglalarawan: mga klase (klase), mga interface (interface), mga istruktura (struct), mga enumerasyon (enum), mga uri ng delegado (delegado) na mayroon o walang indikasyon ng kanilang pamamahagi sa mga namespace;

Kinokontrol ng mga namespace (namespace) ang visibility ng mga object ng program (tulad ng sa C++). Maaaring ma-nest ang mga namespace. Pinapayagan na gumamit ng mga object ng program nang hindi malinaw na tinukoy ang namespace kung saan kabilang ang object na ito. Isang pangkalahatang pagbanggit lamang ng paggamit ng namespace na ito sa paggamit ng direktiba (tulad ng sa Turbo Pascal) ay sapat na. May mga alias para sa mga pangalan ng namespace sa direktiba ng paggamit (tulad ng sa wikang Oberon);

Mga uri ng elementarya ng data: 8-bit (sbyte, byte), 16-bit (short, ushort), 32-bit (int, uint), at 64-bit (long, ulong) signed at unsigned integers, single reals (float ) at double (double) precision, Unicode character (char), boolean type (bool, hindi compatible sa integers), decimal type na nagbibigay ng 28 makabuluhang digit ng precision (decimal);

Mga structured na uri: mga klase at interface (tulad ng sa Java), one-dimensional at multidimensional (hindi tulad ng Java) array, string (string), structures (halos kapareho ng mga klase, ngunit hindi inilagay sa heap at walang inheritance), enumerations, hindi tugma na may mga integer (tulad ng sa Pascal);

Mga uri ng delegado o simpleng "mga delegado" (tulad ng mga uri ng pamamaraan sa Module-2 at Oberon, mga function pointer sa C at C++);

Ang mga uri ay nahahati sa mga uri ng sanggunian (mga klase, interface, array, delegado) at mga uri ng halaga (mga uri ng elementarya, enumerasyon, istruktura). Ang mga bagay ng mga uri ng sanggunian ay inilalaan sa dynamic na memorya (heap), at ang mga variable ng mga uri ng sanggunian ay, sa katunayan, ay mga pointer sa mga bagay na ito. Sa kaso ng mga uri ng halaga, ang mga variable ay hindi mga pointer, ngunit pinahahalagahan ang kanilang mga sarili. Pinapayagan lang ang mga implicit na uri ng conversion kung hindi nila nilalabag ang kaligtasan ng uri o nagdudulot ng pagkawala ng impormasyon. Ang lahat ng mga uri, kabilang ang mga elementaryang uri, ay katugma sa uri ng bagay, na siyang batayang klase ng lahat ng iba pang uri. Mayroong isang implicit na conversion ng mga uri ng halaga sa uri ng bagay, na tinatawag na boxing, at isang tahasang kabaligtaran na conversion - unboxing;

Awtomatikong pagkolekta ng basura (tulad ng sa Oberon at Java);

Malawak na hanay ng mga operasyon na may 14 na antas ng priyoridad. Muling pagtukoy sa mga operasyon (tulad ng sa Algol-68, Ada, C++). Gamit ang checked at unchecked operator, maaari mong kontrolin ang overflow control kapag nagsasagawa ng mga operasyon sa mga integer;

Mga pamamaraan na may mga parameter ng halaga, mga reference na parameter (ref), at mga parameter ng output (out). Ang mga salitang ref at out ay dapat na nakasulat bago ang parameter, hindi lamang sa paglalarawan ng pamamaraan, kundi pati na rin kapag tumatawag. Ang pagkakaroon ng mga parameter ng output ay nagpapahintulot sa iyo na kontrolin ang pagpapatupad ng pagtukoy ng mga takdang-aralin. Sa pamamagitan ng mga alituntunin ng wika, ang anumang variable ay dapat na garantisadong may halaga bago subukang gamitin ito;

Mga control statement: if, switch, while, do, for, break, continue (tulad ng sa C, C++ at Java). Ang foreach statement, na umiikot sa bawat elemento ng "collection", ilang uri ng goto jump statement;

Exception handling (tulad ng sa Java);

Properties - mga elemento ng mga klase (mga bagay), ang pag-access sa kung saan ay isinasagawa sa parehong paraan tulad ng mga patlang (maaari kang magtalaga o makakuha ng isang halaga), ngunit ipinatupad sa pamamagitan ng implicitly na tinatawag na get at set subroutines (tulad ng sa Object Pascal - ang input na wika ng sistema ng Delphi);

Ang mga indexer ay mga elemento ng mga klase (mga bagay) na nagpapahintulot sa iyo na ma-access ang mga bagay sa parehong paraan tulad ng mga arrays (sa pamamagitan ng pagtukoy ng isang index sa square bracket). Ipinapatupad sa pamamagitan ng tahasang tinatawag na get and set routines. Halimbawa, ang pag-access (para sa pagbabasa) sa mga character ng isang string ay maaaring gawin bilang mga elemento ng isang array dahil sa ang katunayan na ang isang indexer ay ipinatupad para sa karaniwang klase ng string;

Ang mga kaganapan ay mga elemento ng mga klase (mga patlang o mga katangian) ng isang uri ng pamamaraan (mga delegado), kung saan, sa labas ng klase kung saan tinukoy ang mga ito, ang mga operasyong += at -= lang ang naaangkop, na nagbibigay-daan sa iyong magdagdag o mag-alis ng mga pamamaraan ng tagapangasiwa ng kaganapan para sa mga bagay. ng klase na ito;

Ang hindi ligtas (hindi ligtas) na code gamit ang mga pointer at address arithmetic ay naisalokal sa mga bahagi ng program na minarkahan ng hindi ligtas na modifier;

Isang preprocessor na, hindi katulad ng C at C++, ay nagbibigay lamang ng mga pasilidad sa pagsasama-sama ng kondisyon.

Siyempre, ang tinalakay na mga pagkukulang ng C # ay hindi nag-aalis ng wika ng mga prospect. Ito ay sa maraming paraan mas kanais-nais kaysa sa C++. Ang pangkalahatang kawalang-kasiyahan sa wikang C++, na kinikilala ng mismong hitsura ng isang bagong wika, ay isa sa mga pangunahing kinakailangan para sa tagumpay ng C#.

Ang paghahambing ng C# sa Java, makakakita ka ng maraming pagkakatulad. Totoo, kung ang mga Java system ay multiplatform, ang pagpapatupad ng C # ay umiiral lamang para sa operating system. Mga sistema ng Windows at isa lang. Ngunit, sa kabila ng kabigatan, maaaring asahan na ang wika ay ipapatupad para sa iba pang mga sistema. Bilang karagdagan, ang Microsoft .NET platform mismo na may isang kapaligiran sa pagpapatupad ng programa ay maaaring i-promote sa mga alternatibong arkitektura, lalo na sa mga sistema ng UNIX.

Ang C# ay tila mas makatotohanang wika kaysa sa Java. Hindi tulad ng Java, ito ay sapat sa sarili. Iyon ay, maaari kang sumulat ng anumang programa sa C# nang hindi gumagamit ng ibang mga wika. Posible ito dahil sa pagkakaroon ng "hindi ligtas" na mga bloke ng code na direktang nagbubukas ng access sa hardware. Sa Java, ang pag-access sa mga pasilidad na mababa ang antas ay dapat gumamit ng "mga katutubong pamamaraan" (mga katutubong pamamaraan), na dapat na nakaprograma sa ibang mga wika.

At, siyempre, ang mga prospect para sa C # ay pangunahing nauugnay sa mga pagsisikap na, siyempre, gagawin ng Microsoft upang i-promote ito.