Java

**Java** бол Sun Microsystems корпорацийн бүтээсэн програмчлалын хэл бөгөөд хамгийн анх 1995 онд түүнийг олон нийтэд танилцуулжээ. Анх хийгдэхдээ Sun-ийн Java платформ дээр ажиллахаар байсан юм. Жава-г бүтээхдээ С ба С++ хэлийн онцлог, бичиглэлийг хүчтэй тусган авчээ. Гэхдээ хамгийн гол нь обьект хандалтат загварт түлхүү анхаарсан ба доод түвшний програмчлалын боломжийг бага оруулсан байна.

Java програм нь бит биш байт кодуудад хөрвөн ажилладаг бөгөөд энэхүү байт кодуудыг зөвхөн Java Virtual Machine (JVM) хэмээх систем ажиллуулдаг юм. Харин JVM нь платформ болгонд зориулагдан тусдаа хийгдсэн байдаг тул таны бичсэн програм, код аль ч үйлдлийн систем, платформ дээр ажиллах болж байгаа нь түүний хамгийн өвөрмөц онцлог юм.

1995 онд Sun нь Java-гийхаа гол хөрвүүлэгч, Virtual Machine, Class-ийн гол гол сангуудыг бүтээжээ. Харин одоо дэлхий дээр хамгийн их хүчээ авч байгаа систем болоод байгаа бөгөөд GNU (General Public License) гэсэн үнэгүй лицензтэй болсноор түүнийг хэн дуртай нь үнэгүй татан авч ашиглах боломжтой болжээ.

## Түүх 
Анх 1991 онд Жэймс Гослинг Жава хэлний үндэс суурийг тавьжээ. Тэрээр уг хэлийг өөрийн төсөлд ашиглахаар төлөвлөж байсан байна. Анх энэ хэлийг Oak (Царс) хэмээн нэрлэж байсан бөгөөд Царс маань урган том болсоор бусад хүмүүсийн анхаарлыг татаж эхэлсэн байна. Удалгүй нэрээ сольж, Green болсон ба улмаар Жава хэмээх нэрээ олсон байна. Гослинг нь анхнаасаа өнөөгийн Жавагийн амжилт олж байгаа гол онцлогийг олж анхаарсан байна. Тэр нь өөрийн гэсэн Virtual Machine-тай C/C++ хэлтэй төсөөтэй программчлалын хэл бүтээх байжээ.

Албан ёсоор Java 1.0 хэл нь 1995 онд бүтээгдэн бий болсон бөгөөд хамгийн гайхамшигтай уриа болох Write Once, Run Anywhere (Нэг удаа бич, Хаа сайгүй ашигла) хэмээх уриаг гаргасан юм. Энэ нь жава кодыг аль ч платформ дээр ажиллуулах боломжийг олгох зохион байгуулалттай байлаа.

Жавагийн хамгаалалтын түвшинг хэрэглэгч хүн хүссэнээрээ өөрчлөх боломжтой ба зарим тохиолдолд сүлжээ болоод файл руу хандах эрхийг нь цаанаас нь хаачихсан нь хүмүүст ихээр таалагдсан юм. Ийм болохоор ихэнхи броузерууд Java Applet-г ажиллуулах боломжийг өөртөө нэмсэн байна. Яагаад гэвэл Java Applet нь хэрэглэгч хүнд ямар ч аюул учруулахгүй байсан байна. Өөрөөр хэлбэл програмист хүн Java Applet-ийг ашиглан хэрэглэгчдийн компьютерт халдах боломжийг тун сайн хаажээ.

Ер нь бол Жава маш богино хугацаанд олон нийтийг хамарч эхэлсэн ба түүний хамгийн гол уриа болох бүх платформ дээр ажиллах гэсэн нь хамгийн ихээр таалагдсан юм. Java-гийн гол хувилбар болох Java 2.0 гарснаас хойш түүний хүчин чадал, нэр хүнд огцом нэмэгджээ. Энэ үеэс тусгай платформуудад зориулагдсан хувилбарууд гарах болсон нь програм хөгжүүлэгчдэд бүр их эрх чөлөөг мэдрүүлсэн юм. Жишээлбэл J2EE хэмээх багц нь том корпораци, байгууллагын түвшинд программ бичих боломжийг олгож байсан бол J2ME нь жижиг электрон төхөөрөмжүүд, тэр дундаа гар утсанд зориулагдсан программ бичих, харин J2SE нь жирийн компьютер дээр ажиллах программ бичих зориулалттай байлаа. 2006 оны үеэс эхлэн Жава програмчлалын систем нь Java EE, Java ME, Java Se гэж 3 хуваагдах болсон юм.

1997 онд Sun Microsystems нь ISO/IEC, JTC1 гэх мэтийн стандартуудын болзлыг хангав. Сүүлд нь Ecma байгууллага нь Java-гийн стандартуудыг тогтоосон ба энэ бүхэн түүний хөгжилд ихээхэн хувь нэмэр оруулсан нь гарцаагүй. Энэ үед Sun корпораци нь Java-гийхаа бүхий л код, багаж хэрэгслүүдийг нийтэд үнэ төлбөргүйгээр дэлгэв. Энэ нь Microsoft-ыхны хувьд байж болшгүй үзэгдэл байсан бол Sun нь алс ирээдүйг олж харжээ. Гэхдээ Sun нь ашиг олж байсан бөгөөд жишээ нь Java Enterprise системдээ зориулсан тусгай лиценз бүхий бүтээгдэхүүнийг борлуулах замаар орлогоо бүрдүүлж байв.

2006 оны 11 сарын 13нд Sun нь Java-гийхаа ихэнх хэсгийг GNU лицензтэй болгож, хэн дуртай нь татаж авч ашиглах боломжтой болгов. Харин 2007 оны 5 сарын 8нд Java-гийн нууц байсан гол гол файлууд, цөм хэсгийг хийж дуусгасан ба тэдгээрийгээ нээлттэй эхтэй болгосон байна. Ингэснээр Жава нь даян дэлхийн программ хөгжүүлэгчдийн өмч болсон байна.

## Философи 
### Үндсэн зорилго 
Java-г анх хийж эхлэхээс 5 үндсэн дүрмийг баримталж ирсэн байна. Үүнд:
#Жава обьект хандалтад программчлалын арга зүйтэй.
#Жава ижил программыг хэд хэдэн үйлдлийн систем дээр ажиллуулахыг зөвшөөрнө.
#Жава компьютерын сүлжээг дээд зэргээр ашиглахаас гадна бүхий л боломжуудыг хангаж өгнө.
#Жава алс зайд байгаа кодыг нууцлал хамгаалалттайгаар ажиллуулах боломжтой байна.
#Жава бусад объект хандалтат программчлалын хэлүүдийн бүхий л сайн талуудыг өөртөө агуулна.

#### Үйлдлийн системээс хамаарахгүй ажиллах нь 
Зөвхөн энэ чанараас болж өдөр тутам олон зуун мянган программ хөгжүүлэгчид Жава руу урваж байгаа нь нэгэнтээ ил болжээ. Өөрөөр хэлбэл таны бичсэн програм бүхий л үйлдлийн систем, платформ, тоног төхөөрөмж дээр ажиллах боломжтой гэдэг бол үнэхээр гайхамшиг.

Жава дээр бичсэн код нь ихэнх Жаватай нийцтэй үйлдлийн систем, тоног төхөөрөмж дээр ажиллах боломжтой юм. Программаа нэг удаа бичээд хөрвүүлээд л авсан бол түүнийгээ хаа сайгүй ажиллуул гэсэн үг шүү дээ.

#### Энэхүү гайхамшигт боломжийг хэрхэн хангадаг вэ? 
Java compiler буюу Жава хөрвүүлэгч нь Жава дээр бичигдсан кодыг бүтэн машины хэл болох битэд хөрвүүлдэггүй юм байна. Харин хагас боловсруулсан бүтээгдэхүүн гэдэг шиг хагас хөрвүүлж Java Bytecode гаргаж авдаг ажээ. Энэ кодыг зөвхөн Java Virtual Machine ажиллуулж дөнгөдөг юм. Тэгэхээр JVM нь ихээхэн чухал үүрэгтэй юм байна. JVM - ийг тухайн үйлдлийн системд зориулан тусгайлан бичсэн байдаг. Тэгэхээр энэхүү VM маань эцсийн бүтээгдэхүүн болох машин дээр ажиллах боломжтой бит кодыг үүсгэдэг байна. Бас VM нь тоног төхөөрөмжийн график хэсэг, санах ой, сүлжээ гэх мэт амин чухал зүйлсийг удирдана. Ихэнх тохиолдолд Java Bytecode нь саадгүй ажилладаг боловч зарим хэт онцгой машин дээр JIT хэмээх хөрвүүлэгч шаардлагатай болдог. Тэгэхээр таны бичсэн код тань JVM хэмээх системээр дамжиж байж хэрэгждэгийг ойлгож авсан байх. Тэгэхээр программын ажиллагаа яалт ч үгүй удаан байхаас аргагүй болж байгаа юм. Яагаад гэвэл C/C++ дээр бичсэн код нь шууд машины бит кодонд хөрвүүлэгдсэн байдаг тул ажиллагааны хувьд маш хурдан байдаг бол Жавагийн эх код нь заавал ЖаваВиртуалМашинаар дамжина. Энэ үүднээс удаан ажилладаг гэсэн шүүмжлэлийг байнга сонсдог байсан бөгөөд энэ нь түүний гол сул тал байлаа. Гэхдээ сүүлийн үеийн JVM нь төрөл бүрийн технологи, аргуудыг хэрэглэснээр дутахгүй хурдан ажилладаг болоод байна. Гэхдээ орчин үеийн тоног төхөөрөмжүүд тооцоолох чадвар нэмэгдсэнээр энэхүү дутагдал онцын мэдэгдэхээ болиод байгаа юм.

Жишээ нь хурдыг нэмэгдүүлэх нэг арга бол Just-in-Time (JIT) буюу Яг цагт гэсэн хөрвүүлэлтийн арга юм. Энэ бол програм яг ажиллах үед нь ЖаваБайткодыг машины код руу хөрвүүлнэ гэсэн үг. Ингэснээр программ илүү хурдан ажиллах бололцоотой болдог. Гэвч энэ арга нь Overhead буюу хэт ачаалалд орох эрсдэлтэй. Иймээс сүүлийн үеийн VM-ууд динамик маягийн холимог аргыг хэрэглэдэг болоод байна. Энэхүү динамик арга нь програмын амин чухал хэсгүүдийг хэрхэн хөрвүүлэхээ сайтар тооцоолж чаддаг юм. Ингэснээр эцсийн дүндээ таны бичсэн код C/C++ дээр бичсэнээс дутахгүй хурдан ажиллаж чадах билээ.

Хурдыг нэмэгдүүлэх өөр нэг арга бол статик хөрвүүлэгч ашиглах явдал юм. Энэ хөрвүүлэгч нь шулуухан машины эх код руу хөрвүүлчихдэг. Өөрөөр хэлбэл Жавагийн сонгодог байткод үүсгэхгүй гэсэн үг юм. Ийм статик хөрвүүлэгчийн жишээ гэвэл GCJ юм. Гэвч ингэх юм бол өвөрмөц онцлог огтхон ч үр дүнгүй болчихож байгаа юм. Ийм арга хэрэглэх нь заавал Жава дээр бичих огтхон ч шаардлагагүй болж байгаа бөгөөд C/C++ дээр бичиж байгаагаас огтхон ч ялгаагүй болж байна.

#### Хөгжүүлэлт 
SunMicroSystems нь JavaStandardEdition хэмээх платформын лицензийг албан ёсоор эзэмшдэг юм байна. Энэ платформ нь MicrosoftWindows, Linux, Solaris гэсэн үйлдлийн системүүд дээр ажиллана. Бусад платформуудад зориулсан Жавагийн орчныг бүрдүүлэгч системүүд бас бий.

Жава брэнд нь шулуун дардан замаар явсангүй. Мэдээж Microsoft-той зүйл бүрээр тэрсэлдэж байсан нь ойлгомжтой. Тухайлбал Java нь Microsoft-ийн үйлдлийн систем дээр ажилладаг болохын тулд ихээхэн саадыг давсан юм. Учир нь Microsoft нь Жава ажиллахад шаардлагатай RMI болон JNI интерфэйсүүдийг хаачихсан юм. Мэдээж Sun-ыхан шүүхэд зарга мэдүүлсэн бөгөөд 1997 онд 20 сая долларыг төлүүлж чаджээ. Гэсэн ч Windows нь анх ирэхдээ Жавагүй ирдгийг бид бүгд мэднэ. Бас сүүлийн үеийн Internet Explorer нь JavaApplet-ийг дэмждэггүй шүү дээ. Заавал 3дагч нэмэлт Plug-In суулгах шаардлагатай болдог. Гэхдээ та дуртай үедээ интернэтээс RunTime орчныг бий болгогч дэд системүүдийг татан авч болно.

Платформ хамаарахгүй ажилладаг чанар нь Enterprise маягийн томоохон программ хөгжүүлэгчдэд онцгой таалагдсан юм. Яагаад гэвэл ийм чиглэлийн лицензтэй програм хангамжууд асар өндөр үнэтэй байдаг шүү дээ. Түүнчлэн Enterprise чиглэлийн системүүд нь олон платформ болоод янз бүрийн орчинд ажиллах дэд системүүдээс бүрдэх шаардлагатай байдаг юм. Тэгвэл Жавад энэ бүхэн бүгд бий. Сервэр талдаа гэвэл Жишээ нь: servlet хэмээх вэб серверийг нэрлэж болох юм. Enterprise орчинд JavaBeans байж болно. Жава нь нээлттэй эхтэй болохоор дэлхийн шилдэг систем хөгжүүлэгчид өөр өөрсдийн тусгай системүүдийг бүтээж байгаа билээ. Хамгийн сүүлд GlassFish хэмээх төсөл нэн амжилттай хэрэгжиж байгаа бөгөөд энэ нь JavaEE орчинд үнэхээр тансаг зүйл хийж болохоор хэмжээнд ирээд байна.

#### Санах ойг автоматаар удирдах нь 
Жавагийн үнэхээр өвөрмөц онцлогийн нэг бол санах ойг автоматаар удирдах аргачлал юм. Энэ боломжийн хүчээр программист хүн гар аргаар санах ойг удирдах нүсэр ажлаас чөлөөлөгдөж байгаа билээ. Бусад хэлнүүд дээр объектийг үүсгэхийн тулд юуны өмнө хэрэгцээт санах ойг бий болгож авах, обьектоо хэрэглэж дууссаны дараа суллах гэх мэтийн ажиллагааг хийдэг шүү дээ. Хэрэв программист хүн объектоо суллаж, устгахаа мартсан бол санах ойн тэр хэсгийг ашигласан тэр чигээрээ үлдчихдэг. Программ гацах, алдаа гарах мэтэд санах ойг иймэрхүү байдлаар эзлээд үлдчих тохиолдол зөндөө гардаг. Бас санах ойг суллах гэж оролдох үедээ алдаа гаргах, дахин дахин оролдох гэх мэтэд гацаах ноцтой алдаанууд гарах нь түгээмэл байдаг.

Харин Жава дээр бол үүнийг сайхан шийдэж өгчээ. Автомат хог цэвэрлэгч гэсэн систем байдаг бий. Программист хүн объект үүсгэлээ гэхэд түүнийг зааж байдаг ямар нэгэн хувьсагч, эзэмшигч заавал үүсдэг. Энэ нь уг объектыг удирдах, ашиглах үүрэгтэй. Тэгвэл объектыг устгалаа гэхэд зөвхөн энэ объектын заагч хувьсагчийг устгачихдаг. Энэ үед заагчгүй объект санах ойд үлдчихнэ гэсэн үг. Харин JavaGarbageCollection(Жавагийн хог цэвэрлэгч) нь иймэрхүү эзэнгүй санах объект санах ойд байгаа эсэхийг автоматаар шалгаж байдаг. Эзэнгүй объект тааралдвал түүнийг санах ойгоос бүрэн чөлөөлж бүрмөсөн устгана.

## Syntax буюу бичиглэл 
Java-гийн хувьд бичиглэл нь бараг тэр чигээр C++ юм. C++ -ээс ялгаатай зүйл нь бүрэн объект хандлагат юм. Бүх код нь класс дотор бичигдэх бөгөөд бүгд объект байна. Зөвхөн бодит өгөгдлийн төрлүүд (тоон утгууд, boolean утга, тэмдэгт) л класс дотор бичигдэхгүй байж болдог.

Мөн Жава нь оператор дахин тодорхойлох, олон классын удамшил зэргийг дэмждэггүйгээрээ С++ хэлээс ялгаатай.  

## Цахим холбоос 
* Java-Homepage

## Эшлэл 
Ангилал:Императив программчлалын хэл
Ангилал:Объект хандалтат программчлалын хэл

Ангилал:Чөлөөт программчлалын багаж
Ангилал:Жава виртуал машины программчлалын хэл