ဂျာဗား (ပရိုဂရမ်မင်းဘာသာစကား)

Java（ဂျာဗား）အား အကျဉ်းချုပ်အဓိပ္ပာယ်ဖွင့်ဆိုရမည်ဆိုလျှင် Object Orientedကို အခြေခံသော ပရိုဂရမ်မင်း ဘာသာရပ်တစ်ခုဖြစ်ပြီး၊ Java ဘာသာရပ်ဖြင့် ရေးသားထားသော ပရိုဂရမ်များကို အလုပ်လုပ်စေနိုင်သည့် ပတ်ဝန်းကျင် ကိုလည်း Java ဟုခေါ်ဆိုလေ့ရှိသည်။ ဤရှင်းလင်းချက်တွင် ပရိုဂရမ်မင်း ဘာသာရပ် တစ်ခုဖြစ်သော Java မှအစပြု၍ ၎င်းနှင့်ပတ်သက်သော နည်းပညာရပ်များ၊ ဒီဇိုင်းရေးသားပုံ၊ ခံယူချက်ဝါဒများနှင့် Java ပရိုဂရမ်များကို အလုပ်လုပ်စေသော Java ပလက်ဖောင်း စသည့် ထိုအကြောင်းအရာများနှင့်ပတ်သက်ပြီး ဖော်ပြသွားမည်ဖြစ်သည်။

## အကျဉ်းချုပ် 
Java သည် ရှိပြီးသား ပရိုဂရမ်မင်း ဘာသာရပ်များ၏ ကောင်းကွက်များကို လက်ခံရယူပြီး၊ အားနည်းချက်များကို ပြင်ဆင်ဖြည့်စွက်ခြင်းအားဖြင့် ဖြစ်တည်လာခဲ့သော ပရိုဂရမ်မင်းဘာသာရပ် တစ်မျိုးဖြစ်သည်။ Java ၏ ထူးခြားချက်များမှာ အောက်ပါအတိုင်း ဖြစ်၏။
* Java ကို အသုံးပြုခြင်းအားဖြင့်ပလက်ဖောင်းပေါ်တွင် အမှီပြုခြင်းမရှိသောအသုံးချဆော့ဖ်ဝဲများကို ရေးသားခြင်း၊ ဖြန့်ဝေခြင်းများကို ပြုလုပ်နိုင်၏။
* Java ဖြင့် ရေးသားထားသောဆော့ဖ်ဝဲများသည် အသုံးချ ပတ်ဝန်းကျင်တစ်ခု ဖြစ်သော (JVM) အပေါ်တွင် အလုပ်လုပ်နိုင်သည်။
* Object Oriented၏ အတွေးအမြင်အပေါ်တွင် အခြေခံ၍ ဒီဇိုင်းရေးသားထားသော ပရိုဂရမ်မင်းဘာသာရပ် တစ်ခုဖြစ်သောကြောင့်၊ ဆော့ဖ်ဝဲများ၏ ရေးသားခြင်းနှင့် ထိန်းသိမ်းခြင်း လုပ်ငန်းများ၏ ခက်ခဲမှုများကို နည်းပါးစေသည်။
* Smalltalk နှင့် Objective-Cကဲ့သို့ ရှင်းလင်း၍ လွယ်ကူသောရုပ်ဝတ္တု(Object) မော်ဒယ်ကို အသုံးပြုထားသည်။
* စာကြောင်းများ၏ဖွဲ့စည်းပုံမှာ C နှင့် C++ မှ အတော်များများကို ပြန်လည် အသုံးပြုထား၏။
လက်ရှိ Java ၏ နည်းပညာများသည် ကွန်ပျူတာနည်းပညာ၏ အခြေခံအဆင့်များမှ အစပြု၍၊ အဆင့်မြင့်နေရာများအထိ ကျယ်ပြန့်စွာ အသုံးပြု နေသည်ကို တွေ့ရ၏။
လျှပ်စစ်ပစ္စည်းသုံး အသေးစားစစ္စတမ်များနှင့် လက်ဆောင် ကိရိယာများ（လက်ဆောင်ဖုန်း・PHSနှင့်PDA・Smart Phone）အစရှိသော စစ္စတမ်များမှအစ၊ လုပ်ငန်းကြီးများ၏အိုင်တီစစ္စတမ်များကို ပံ့ပိုးပေးနေသော ဆာဗာများနှင့် စူပါ ကွန်ပျူတာများ အထိ အလွန်ကျယ်ပြန့်သော နေရာများတွင် Java ကို အသုံးပြုထားကြသည်။

## ရှင်းလင်းချက် 
ပရိုဂရမ်မင်းဘာသာရပ် Java နှင့် Java ပလက်ဖောင်းအား 1990ခုနှစ်အစပိုင်းတွင် Sun Microsystems တွင် James Gosling အမှူးပြုသော ပညာရှင်များက တီထွင်ရေးသားခဲ့ကြသည်။ လက်ရှိတွင် Java နည်းပညာ၏ အခြေခံပြုခြင်းလုပ်ငန်းများသည် Java Community Process (JCP) ဟုအမည်ရသော အဆင့်များဖြင့် ပြုပြင်ရေးသားနေကြ၏။

Java နှင့် ပတ်သက်သော အမည်နှင့် အဓိပ္ပာယ်မှာ အသုံးပြုပုံ အပေါ်တွင်မှုတည်ပြီး အမျိုးမျိုး ကွဲပြားခြားနား၏။ Sun Microsystemsသည်၊ Java နည်းပညာ（Java နည်းပညာ、Java technology）ဟု ခေါ်ဆိုအသုံးပြုပြီး၊ တဘက်တွင် Java ၏ အမျိုးမျိုးသော နည်းပညာများ၏ အမည်အဖြစ်လည်း Java ဟုခေါ်ဆိုအသုံးပြုလေ့ရှိ၏။ ပရိုဂရမ်မာ အများစုသည်၊ ပရိုဂရမ်မင်းဘာသာရပ် ဟူသော အဓိပ္ပာယ် အဖြစ် Java ကို အသုံးပြုလေ့ရှိ၏။ Java ၏ ပတ်ဝင်းကျင်သည်၊ Java ပလက်ဖောင်း (Java Runtime Environment; JRE) ဟု ခေါ်ဆိုလေ့ရှိ၏။ Java ၏ အခြေခံ ရေးသားနိုင်သော ပတ်ဝင်းကျင်ကိုJava Development Kit (Java Development Kit; JDK) ဟု ခေါ်ဆို၏။

Java သည် ကလပ်စ်ကို အခြေခံသော Object Oriented ပရိုဂရမ်မင်းဘာသာရပ် တစ်ခု ဖြစ်၏။ Java ၏ ပရိုဂရမ်သည်၊ ကလပ်စ်များဖြင့် ဖွဲ့စည်းထားပြီး၊ ပရိုဂရမ်ကို အလုပ်လုပ်စေသောအခါ၊ ထို ကလပ်စ်များကို အခြေခံပြီး ပြုလုပ်ထားသော ရုပ်ဝတ္တု(Object) များက အပြန်အလှန်ဆက်သွယ်ခြင်း အားဖြင့် အလုပ်လုပ်စေသည်။ Java သည် အမွေဆက်ခံခြင်း သဘောတရားကို အသုံးပြုနိုင်ပြီး ကလပ်စ် တစ်ခုမှ အခြားသော ကလပ်စ် ၏ အချက်အလက်နှင့် လုပ်ဆောင်ချက်များကို အမွေဆက်ခံခြင်းဖြင့် ပြန်လည်အသုံးပြုနိုင်၏။ အမွေဆက်ခံရာတွင် တစ်ခုတည်းမှသာ အမွေဆက်ခံနိုင်မည် ဖြစ်၏။ သို့ရာတွင် ကလပ်စ်（Object）တစ်ခုမှ၊ တစ်ခုထက်မကသောအင်တာဖေစ်(Interface)များကို ပံ့ပိုးပေးနိုင်သည်။ Java တွင်အသုံးပြုသော အချက်အလက်/Object ပုံစံ（Data Type）သည် ခိုင်မာသောStrong Type ပုံစံကို အသုံးပြုထား၏။ ဤကဲ့သို့ Java ၏ကွန်ပိုင်းလာ နှင့် အသုံးချ ပတ်ဝင်းကျင်သည်၊ အချက်အလက်ပုံစံများ၏ စစ်မှန်ချက်ကို စစ်ဆေးခြင်းအားဖြင့်၊ ပရိုဂရမ်က မှန်ကန်စွာအလုပ်လုပ်နိုင်ခြင်းနှင့် လုံခြုံစွာ အလုပ်လုပ်နိုင်ခြင်းတို့ အပေါ်တွင် အာမခံပေးနိုင်သည်။

Java သည် ခြွင်းချက်လုပ်ဆောင်ချက်စနစ်ကို ပြင်ဆင်ထားပြီး ပရိုဂရမ် အလုပ်လုပ်နေစဉ် ဖြစ်ပွားတက်သော မျှော်လင့်မထားတတ်သော အမှားများကို၊ လုံခြုံစိတ်ချသောနည်းလမ်းဖြင့် လုပ်ဆောင်စေနိုင်ပြီး၊ ပရိုဂရမ်တစ်ခုကိုလည်း ရှင်းလင်းစွာ ရေးသားနိုင်သည်။

Java မှာတော့ သန့်ရှင်းသော မန်မိုရီမော်ဒယ်ကို အသုံးပြုထားသောကြောင့်၊ ပရိုဂရမ်မာက မန်မိုရီထိမ်းသိမ်းမှု့ အပေါ်တွင် သက်သာစေပေသည်။ Java Object များသည် မန်မိုရီအတွင်းရှိHeap Memory နေရာကို အသုံးပြုကြ၏။ မန်မိုရီထိမ်းသိမ်းခြင်းသည်Java ဒြပ်မဲ့စက်(JVM)တွင် ပူးတွဲပါဝင်သော အမှိုက်သိမ်းစနစ်ဖြင့် ထိန်းသိမ်းထားနိုင်၏။ C++ မှာတော့ Heap Memory အပေါ်တွင် နေရာချထားသော Object များကို အသုံးမလိုသည့်အခါ ဖျက်စီးပစ်ရန် ပရိုဂရမ်မာက တာဝန်ယူ၍ လုပ်ဆောင်ရန် လိုအပ်ခဲ့ပေသည်။ ဤအချက်သည် C++ ပရိုဂရမ်မာအတွက် ဝန်ထုပ်တစ်ခုအနေနဲ့ ဖြစ်ခဲ့ပြီး၊ ရှုပ်ထွေးပြီး မှားယွင်းလွယ်တတ်ပေသည်။ Java မှာတော့ အမှိုက်သိမ်းစနစ် ကို ပိုင်ဆိုင်သောကြောင့် မန်မိုရီကို ထိနိးသိမ်းရန်ဝန်ထုပ် မရှိပါသဖြင့် ပရိုဂရမ်မာအတွက် လွန်စွာမှအဆင်ပြေစေခဲ့သည်။

Java၏ ရေးသားပုံသည်၊ Cနှင့်C++ မှ အတော်များများကို အတုယူခဲ့၏။ တဖန် C/C++ တွင် အသုံးပြုသော အခြေခံနေရာများကို ထိန်းသိမ်းအသုံးပြုနိုင်သောPointerကို အသုံးမပြုပါဟုဆိုသော်လည်း၊  လက်တွေ့မှာတော့ C/C++ ၏ Pointer Model နှင့်မတူသော၊ Pointer Model ကို Java တွင်လည်း အသုံးပြုထားသည်။ ဥပမာအားဖြင့် Class Instance နှင့် Array များတွင် Pointer ကို အသုံးပြုထားသည်။  "ClassName a = new ClassName();"နှင့် "ClassName b;"ပြန်လည် သတ်မှတ်ပြီး "b = a" အစားထိုးခြင်းအားဖြင့် b သည် a ၏ ပိုင်ဆိုင်မှု့များ ကို အသုံးချနိုင်မည် ဖြစ်သည်။ ဆိုလိုသည်မှာ a,b တွင် လိပ်စာများကို သတ်မှတ်ထားခြင်း ဖြစ်၏။  ဖော်ပြပါအတိုင်း Instance ၏ အမည်တွင် ဗားရှင်း1.2 နှင့် မတိုင်မှီက Object Handle（pointer ၏ pointer）၊ ဗားရှင်း1.3 ၏ နောက်ပိုင်းတွင် pointer ကို အသုံးပြုထားသည်။ ထို့ကြောင့်  Java သည် ယနေ့တိုင် Pointer နှင့် ဖြတ်ချင်သော်လည်း မပြတ်နိုင်သော အနေအထား တစ်ခုဖြစ်နေရသည်။

Java သည်ပလက်ဖောင်းအပေါ်တွင် မှီခိုခြင်း မရှိစေရ ဟူသည်ကို ဦးတည်ချက်ထားပြီး၊ ဗားရှင်း တစ်ခုနှင့်တစ်ခု ကြားတွင်လည်း အပြန်အလှန်အသုံးချနိုင်မှု့အပေါ် သတိပြု၍ တီထွင်ဖန်တီးမှု့များ ပြုလုပ်လျက် ရှိ၏။ Java နည်းပညာကို အသုံးပြုခြင်းအားဖြင့်၊ ပလက်ဖေါင်းအပေါ်တွင် မှီခိုခြင်းမရှိသော အပလီကေးရှင်း ဆော့ဖ်ဝဲ ကို ရေးသား၊ အသုံးပြုနိုင်မည် ဖြစ်သည်။ ယနေ့ပရိုဂရမ်မင်းဘာသာရပ်အတော်များများသိ ပလက်ဖေါင်း (CPU) အပေါ်တွင် မှီခိုခြင်းရှိသော သဘာဝကုဒ်များ အဖြစ်ကွန်ပိုင်းလုပ်ခြင်းကို ပုံစံဖြင့် ဒီဇိုင်းရေးသားထားကြ၏။  သို့ရာတွင် Java သည် အထက်ပါ ဘာသာရပ်များနှင့် မတူပဲ ကြားခံဘာသာ（Byte Code）အဖြစ် ကွန်ပိုင်းလုပ်ပြီး၊Java VMတွင် အလုပ်လုပ်နိုင်စေရန် ဒီဇိုင်းရေးသားထား၏။ အတော်များများသည် Just In Time ကွန်ပိုင်းပုံစံ ကို အသုံးပြုထားကြသည်။

ပလက်ဖေါင်းအပေါ်တွင် မမှီခိုခြင်းနှင့် ဗားရှင်းကြားတွင် အပြန်အလှန်အသုံးပြုနိုင်ခြင်း တို့သည်၊ လက်ရှိအနေအထားအရ အပြည့်အဝ အကောင်ထည်ဖော်နိုင်ခြင်း မရှိသေးပဲ ပြဿနာများလည်း အနည်းငယ်ရှိနေပါသေးသည်။

Java တွင်Thread ကို ဘာသာရပ်၏ အခြေခံအသုံးပြုပုံအနေဖြင့် သတ်မှတ်ထားပြီး၊ Multi Thread ဖြင့်Parallel Computing ကို အခြားသော ကွန်ပျူတာဘာသာရပ်များနှင့် စာလျှင် လွန်စွာလွယ်ကူစွာ အသုံးပြုနိုင်မည် ဖြစ်သည်။ Parallel Computingသည်၊ လုပ်ဆောင်ချက်များကို တစ်ကြိမ်တည်းတွင် လုပ်ဆောင်နိုင်သည့် ပုံစံဖြစ်၏။ တဖန်Thread သည်၊Process ထက် ပေါ့ပါးသေးငယ်၏။ 

Java သည် ပြည့်စုံသော လိုင်ဘရီ များကို အသုံးပြု၍၊ကွန်ပျူတာ ကွန်ယက်ကို အသုံးပြုနိုင်သော ဆော့ဖ်ဝဲကို၊ အချိုးကျကျ ဖန်တီး နိုင်မည်ဖြစ်သည်။ Java သည် ဦးဆုံးဗားရှင်းကတည်းက၊ TCP/IP၏ Library ကို ပြင်ဆင်ထားခဲ့၏။ Distributed Object ပတ်ဝင်းကျင်အတွက်လည်း (Java RMI, CORBA) အပေါ်တွင် အခြေခံသော ဆော့ဖ်ဝဲများကိုလည်း အချိန်အတော်စောစောကတည်းက ဖန်တီးရေးသားနိုင်ခဲ့၏။ ယနေ့အခါတွင် အမျိုးမျိုးသောNetwork Protocol များ၏ အဆင့်မြင့် လိုင်ဘရီများကို ပြင်ဆင်ထားပြီးဖြစ်၏။ ပြီးပြည့်စုံသော Network ဖန်ရှင်များနှင့် အောက်ဖော်ပြပါ XML ကို တွဲဖက် အသုံးပြုခြင်းအားဖြင့်၊ အဆင့်မြင့် System များကို တည်ဆောက်နိုင်သော ပရိုဂရမ်မင်းဘာသာရပ် တစ်ခုဖြစ်၏။

XML ကို အသုံးပြုနိုင်သော function များကိုလည်း အချိန်စောစောကတည်းက ပြင်ဆင်ခဲ့၏။ XML သည် ယနေ့နယ်ပယ်အတော်များများတွင် အသုံးပြုနိုင်သော အချိုးကျ စာရေးစနစ် နည်းပညာတစ်ခုဖြစ်၏။ ယနေ့ အချိန်အခါတွင် XML Processor နှင့်XSLT Processor များသည် Java အခြေခံ Library တွင် ထည့်သွင်းထားပြီး ဖြစ်၏။

Java သည်လုံခြုံရေး ကို အဓိကထားပြီး ဒီဇိုင်းရေးထားသောSand Box မော်ဒယ်တွင် အခြေခံသော လုံခြုံရေးစနစ်ကို ပြင်ဆင်ထား၏။ လုံခြုံရေးစနစ်ကို မှန်ကန်စွာအသုံးပြုထားသော Java အသုံးချ ပတ်ဝင်းကျင်ကို အသုံးပြုခြင်းအားဖြင့်၊ အဝေးတစ်နေရာတွင် ရှိသော Java အသုံးချကုဒ်များကို လုံခြုံစွာအသုံးပြုနိုင်မည် ဖြစ်သည်။（Java Applet）

တဖန်Namespace စနစ်ကို အသုံးပြုထားသော ဘာသာရပ်တစ်ခုဖြစ်ပြီး၊ Library နှင့် အပလီကေးရှင်း တွင်ပါဝင်သော  Java များ（ကလပ်စ် နှင့် အင်တာဖေ့စ်）သည်၊ Package (Java) ဟု ခေါ်သော အဆင့်ဆင့်ခွဲခြား ထိန်းသိမ်းမှု့စနစ်ဖြစ် ခွဲခြားအသုံးပြုနိုင်မည်ဖြစ်သည်။

ယနေ့ခေတ်တွင် Java နှင့် ပတ်သက်ပြီး ဝေဖန်ချက်များလည်း မနည်းပေ။ အချို့သော ဝေဖန် ရှုတ်ချမှု့များနှင့်ပတ်သက်ပြီး၊  Sun နှင့် JCP တွင်ပါဝင်ခဲ့သော အဖွဲ့ဝင်များ၏ အားထုတ်မှု့များကြောင့်၊ Java ၏ ပြုပြင်ပြောင်းလည်းမှု့များကို ပြုလုပ်လျက် ရှိသည်။ တပြိုင်နက်တည်းမှာပင် ဆော့ဖ်ဝဲ ရေးသားသူအတော်များများက Java နှင့် ပတ်သက်ပြီး ကျယ်ကျယ်ပြန့်ပြန့် အသုံးပြုနိုင်သော ထူးချွန်သော ပရိုဂရမ်မင်းဘာသာရပ်တစ်ခု အဖြစ် အသိအမှတ်ပြုထားကြသည်။

JavaScript (ECMAScript) သည် Java နှင့် တိုက်ရိုက်ပတ်သက်ခြင်းမရှိသော်လည်း၊ Java နှင့်ဆင်တူသော အမည်နှင့် ရေးသားပုံကို အသုံးပြုထားသည်။

ရေးသားပုံမှာ ဦးဆုံး J စာလုံးတစ်လုံးတည်းသာ စာလုံးကြီး [Java] သည် အမှန်ဖြစ်၏။ [JAVA] သည်မှန်ကန်သော ဖော်ပြပုံမဟုတ်။

## သမိုင်း 
ဤနေရာတွင် အောက်ပါ အစီအစဉ်အတိုင်း  Java ၏ သမိုင်းကြောင်းနှင့် လက်ရှိကို ဖော်ပြသွားပါမည်။
* စတင်ခဲ့ပုံနှင့်အင်တာနက်နယ်ပယ်ဆီသို့ဖြင့်၊ ယနေ့ Java ၏ ပထမဆုံး တရားဝင် ဗားရှင်း ထွက်ပေါ်လာခဲ့ချိန်အထိ သမိုင်းကြောင်းကို ဖော်ပြသွားမည်။
* လတ်တလော လှုပ်ရှားမှု့များဖြင့် တရားဝင် ထွက်ပေါ်လာခဲ့သည့်အချိန်မှစ၍ ယနေ့အထိလှုပ်ရှားမှု့များကို ရှာဖွေဖော်ပြသွားမည် ဖြစ်သည်။
* ဗားရှင်းများ ဖြင့် ပထမဦးဆုံး ဗားရှင်းမှစ၍ ထွက်ပေါ်လာသည့် Java (JDK、Java SE) ဗားရှင်းများအကြောင်းကို ဖော်ပြသွားပါမည်။
### စတင်ခဲ့ပုံ 
သတ်မှတ်၍ Open Source အဖြစ် ပြောင်းလည်းခဲ့ပါ၍၊ ဝိကိပီဒီယတွင် ဖော်ပြခွင့်ရှိသည်]]
Javaပလက်ဖေါင်း နှင့် ပရိုဂရမ်မင်းဘာသာရပ် Javaသည်၊ 1990ခုနှစ် 12လပိုင်းတွင် Sun Microsystems မှ ကိုယ်ပိုင်ပရိုဂျက်တစ်ခုအဖြစ် စတင်ခဲ့သည်။ ထိုပရိုဂျက်သည် C++/C၏ အစားထိုး ပရိုဂရမ်မင်းဘာသာရပ် တစ်ခုအနေဖြင့် တီထွင်ရေးသားခဲ့ကြ၏။ ထိုဘာသာရပ်သည်၊  ပရိုဂျက်အတွင်း၌ Green Operating System (Green OS) နှင့်အတူ၊ Green OS ၏ အခြေခံဘာသာရပ်အနေဖြင့် တီထွင်ခဲ့ခြင်းဖြစ်၏။ ထိုဘာသာရပ်အား 1992 ခုနှစ် လောက်တွင် ပရိုဂျက်အတွင်း၌ **Oak** ဟု အမည်တွင်ခဲ့သော်လည်း၊ နောက်ပိုင်းတွင် **Java** ဟု ပြောင်းလည်း ခေါ်ဝေါ်ခဲ့ကြခြင်း ဖြစ်၏။  ပြောင်းလည်းခေါ်ဝေါ်ခဲ့ကြခြင်း အကြောင်းအရင်းမှာ Oak သည် အခြားသော ကုမ္ပဏီတစ်ခုမှ စီးပွားဖြစ်အမည် တစ်ခုအနေဖြင့် တရားဝင် အသုံးပြုလျက် ရှိသောကြောင့် ဖြစ်၏။

1990 ခုနှစ် ပိုင်းတွင် Sun ၏ ပညာရှင် တစ်ယောက်ဖြစ်သော Patrick Naughton သည်၊ ကုမ္ပဏီပိုင် ပရိုဂရမ်မင်းဘာသာရပ် C++ နှင့် C တို့၏ API နှင့် ပရိုဂရမ်မင်း အထောက်အကူပြု ကရိယာ အားမလို အားမရဖြစ်နေခဲ့၏။ ထိုအချိန်တွင် အိုင်တီနည်းပညာလောက၌၊ NeXTမှ တီထွင်လိုက်သော နည်းပညာအား အားလုံး၏အာရုံစိုက်မှု့ကို ရရှိခဲ့သည်ကို အစပြု၍၊ Naughton သည် Sun ၏နည်းပညာအသစ်များကို ဖန်တီးရန် အကြောင်းဖန်လာခဲ့၏။

NeXT မှ တီထွင်ခဲ့သော NeXTWorkstation နှင့် NEXTSTEPOSတွင်၊ အခြေခံ ပရိုဂရမ်မင်းဘာသာရပ် အနေဖြင့်Object Oriented ပရိုဂရမ်မင်း ဘာသာရပ် Objective-C ကို အသုံးပြုထားခဲ့၏။ ဤကဲ့သို့သော အကြောင်းကြောင်းဖြင့် နောက်လိုက်ပရိုဂျက်တစ်ခု အနေဖြင့်  စတင်ခဲ့၏။

ဤကဲ့သို့စတင်ခဲ့သော နောက်လိုက်ပရိုဂျက်သည်၊ စတင်သည်ဆိုသည်နှင့် James Gosling နှင့် Mike Sheridan တို့သည် ပါဝင်ခဲ့ကြပြီး၊ ပရိုဂျက်၏အမည်ကိုလည်း [အစိမ်းရောင်ပရိုဂျက်] ဟု ပြောင်းလဲခေါ်ဆိုခဲ့ကြ၏။ ဤအစိမ်းရောင်ပရိုဂျက်တွင် အခြားသော နည်းပညာရှင်များလည်း ပါဝင်ခဲ့ကြပြီး၊ အမေရိကပြည်ထောင်စု ကာလီဖိုးနီးယား ပြည်နယ် ရှိ သေးငယ်သော ရုံးခန်းလေးတစ်ခုမှ စတင်ခဲ့ကြသည်။ အစိမ်းရောင်ပရိုဂျက်၏ ရည်ရွယ်ချက်မှာ၊ နောင်တစ်ခေတ်၏ အိမ်သုံးလျှပ်စစ် ပစ္စည်းများအတွက် ပရိုဂရမ်မင်းနည်းပညာ အသစ်တစ်ခုကို တီထွင်ရန် ဖြစ်၏။ Sun သည် ထိုစဉ်ကတည်းက ဤနယ်ပယ်တွင် အဓိကကျသော ဈေးကွက်တစ်ခု ဖြစ်ပေါ်လာမည့်အကြောင်း ကြိုတင်မှန်းဆခဲ့ ကြခြင်းဖြစ်၏။

အစိမ်းရောင်ပရိုဂျက်သည် စတင်ခါစတွင် ပရိုဂရမ်မင်းဘာသာရပ်အနေဖြင့် Object Oriented  ပရိုဂရမ်မင်း ဘာသာရပ်တစ်ခုဖြစ်သော C++ ကို အသုံးပြုရန် စဉ်းစားခဲ့ကြသော်လည်း၊ အကြောင်းအမျိုးမျိုးကြောင့် C++ အားလက်လျှော့ခဲ့ကြ၏။ သူတို့၏ ရည်ရွယ်ချက်မှာ အိမ်သုံးလျှပ်စစ်ပစ္စည်းများ၏ နည်းပညာကို တီထွင်ရန်ဖြစ်၏။ ထည့်သွင်းစနစ် (Embedded System) များတွင် အသုံးပြုနိုင်သော အလွန်နည်းပါးသည်ဟုဆိုသော ကန့်သတ်ချက်များရှိခဲ့ကြ၏။ သူတို့သည် C++ အား စက်ပစ္စည်း၏ လျှပ်စစ်အရင်းအမြစ်ကို သုံးလွန်းသည်ဟု သတ်မှတ်ခဲ့ကြ၏။ တဖန် C++  သည် ခက်ခဲသော ဘာသာရပ် တစ်ခု ဖြစ်သောကြောင့်၊ C++ ကို အသုံးပြုသော ပရိုဂရမ်မာများသည် ဘယ်လောက်ပင် ဂရုစိုက်သော်လည်း တစ်ကြိမ်ကြိမ်တွင် အမှားများကို ကျူးလွန်မိမြဲ ဖြစ်၏။

C++ တွင် အမှိုက်သိမ်းစနစ်မရှိခဲ့ပေ။ အမှိုက်သိမ်းစနစ် မရှိခြင်းဆိုသည်မှာ၊ ပရိုဂရမ်မာကိုယ်တိုင်က မန်မိုရီကို ထိမ်းသိမ်းရမည် ဆိုသည်ကို ဆိုလိုသည်။  ပရိုဂရမ်မာကိုယ်တိုင်က မန်မိုရီကို ထိမ်းသိမ်းခြင်းသည် လွန်စွာ စွန့်စားရသောအလုပ်တစ်ခုဖြစ်ပြီး၊ မှားယွင်းလွယ်သော လုပ်ရပ်တစ်ခုလည်း ဖြစ်၏။

အစိမ်းရောင်ပရိုဂျက်၏ အဖွဲ့ဝင်များသည်၊ အဓိကလုပ်ဆောင်ချက်အချို့တွင် C++ ၏ အပြောင်းအရွှေ့ မလွယ်ကူခြင်းကို ပြဿနာတစ်ခုအဖြစ် ကြည့်မြင်ခဲ့ကြ၏။ ထို အဓိက လုပ်ဆောင်ချက်များမှာ လုံခြုံရေးစနစ်၊ နေရာခြားကွန်ပျူတာစနစ်(Distributed Computing) နှင့်၊ စလက်များ(Multi Thread)ဖြစ်ကြ၏။ ထိုလုပ်ဆောင်ချက်များသည် ပလတ်ဖောင်းအပေါ်တွင် မှီခိုခြင်းမရှိပဲ အသုံးချနိုင်ရန် လိုအပ်ပေသည်။ အထက်ပါအကြောင်းများကြောင့် သူတို့သည်၊ လျှပ်စစ်ပစ္စည်း အမျိုးမျိုးတွင် လွယ်ကူစွာပြောင်းရွှေ့နိုင်သော ပလတ်ဖေါင်း၏ လိုအပ်ချက်ကို သိမြင်ခဲ့ကြ၏။

တဘက်တွင် Sun ၏ နည်းပညာရှင် တစ်ယောက်ဖြစ်သောBill Joy သည်၊ Xerox Corporation ၏ Palo Alto Research Center တွင် Altoဟု အမည်ရသော Workstation စမ်းသပ်စက် အတွက် တီထွင်ခဲ့သော ပရိုဂရမ်မင်း ဘာသာရပ် Mesa ဖြင့် C ဘာသာရပ်၏ ကောင်းသောနေရာများကို လက်ခံရယူပြီး ပရိုဂရမ်မင်းဘာသာရပ် အသစ်တစ်ခုကို ပုံဖော်နေခဲ့၏။ Joy သည် *Further* ဟု အမည်ရသော စာတမ်းတစ်စောင်ကို ရေးသားခဲ့ပြီး၊  C++ ကိုအခြေခံသော Object Oriented ပတ်ဝင်းကျင်ကို တီထွင်ရန် အားထုတ်နေခဲ့၏။ ဦးစွာ James Arthur Gosling သည် C++ ကို ပြုပြင်ပြောင်းလဲပြီးအသုံးပြုရန် စမ်းသပ်ခဲ့၏။ Gosling သည် ဤ ပြုပြင်ထားသော C++အား "C++ ++ --" ဟု အမည်ပေးခဲ့၏။ သို့ရာတွင် Gosling သည် ချက်ချင်းဆိုသလို C++ အားပြုပြင်ပြောင်းလည်းခြင်းကို ရပ်တန့်ခဲ့ပြီး၊ ပရိုဂရမ်မင်းဘာသာရပ် အသစ်တစ်ခုကို တီထွင်ရန် စတင်ခဲ့၏။ Gosling သည် ထို ပရိုဂရမ်မင်းဘာသာရပ် အသစ်အား **Oak** ဟုခေါ်ဆိုခဲ့၏။ ထိုအမည်ကို ရယူခဲ့ခြင်းမှာ James Arthur Gosling ၏ ရုံးခန်းအနီးအနားတွင် ဝက်သစ်ချပင်များ ပေါက်ရောက်နေသောကြောင့် ဖြစ်သည် ဟုဆိုသည်။

အစိမ်းရောင်ပရိုဂျက် အဖွဲ့ဝင်များသည် အချိန်ပိုကို လုပ်ရသည့်အထိ ကြိုးစား၍၊1992ခုနှစ်နွေရာသီ အရောက်တွင် အသစ်ရေးသားထားသောပလတ်ဖေါင်းအား၊ Green OS၊ Oak ဘာသာရပ်၊ Library၊ စက်ပစ္စည်းများနှင့် တွဲဖက်ပြီး အစမ်းပြသနိုင်ခဲ့ကြ၏။ ၁၉၉၂ခု၊ ၉လ၊ ၃ရက် ပထမဆုံး ပြပွဲတွင် Star7 ဟုအမည်ရသောPDA ကို တီထွင်ရာတွင် အားစိုက်ခဲ့ကြ၏။ Star7 ၏ အမည်မှာ ခလုပ်**7* ကို နှိပ်ခြင်းအားဖြင့် ဖုန်းအဖြစ်အသုံးပြုနိုင်သောကြောင့် ဖြစ်၏။

ထို Star7 သည် ထိုခေတ်က လွန်စွာဆန်းသစ်သော GUI ကို ပြင်ဆင်ထားပြီး၊ "Duke" ဟု အမည်ရသော လက်ထောက်ကလေးက အသုံးပြုသူကို အကူအညီပေးပါသည်။ ထိုနှစ် ၁၁လပိုင်းတွင်၊ Sun သည် အစိမ်းရောင်ပရိုဂျက်ကို ခွဲထုတ်ခဲ့ပြီး လက်အောက်ခံ ကုမ္ပဏီ FirstPerson, Inc စတင်ခဲ့၏။ FirstPerson အဖွဲ့ဝင်များသည်၊ အဆင့်မြင့် အပြန်အလှန်အသုံးပြု ကရိယာများ အပေါ်တွင် စိတ်ဝင်စားမှု့ကို ပြသခဲ့၏။ ထိုအချိန်တွင် ime Warner Inc.သည် ကေဘယ် တီဗွီသုံးSet Top Box၏ RFP (Request For Proposal) ကို ထုတ်ပြန်ခဲ့၏။ ထိုအခါ FirstPerson သည် မိမိတို့၏ ရည်ရွယ်ချက်ကို ပြောင်းလည်းခဲ့ပြီး  ime Warner Inc.၏ RFP ကို လက်ခံပြီး အကြံပြုချက်များ ကို တင်သွင်းခဲ့ကြ၏။ သို့ရာတွင်FirstPerson သည် အပြိုင်အဆိုင် ၌Silicon Graphics, Inc. (SGI)ကို ရှုံးနိမ့်ခဲ့၏။ ထို့နောက်တွင်3DO၏Set Top Box လုပ်ငန်းရှိခဲ့သော်လည်း၊ စာချုပ်ချုပ်နိုင်သည့်အဆင့်ကို မရောက်ခဲ့ပေ။ FirstPersonသည်တီဗွီနယ်ပယ်တွင် အမြတ်ကို မပြသနိုင်ခဲ့ပါသဖြင့်၊ Sun သည် FirstPerson ကို ဖျက်သိမ်းခဲ့ပြီး အဖွဲ့ဝင်များကို ပြန်လည်ခေါ်ယူခဲ့၏။

### အင်တာနက်နယ်ပယ်ဆီသို့ 
၁၉၉၄ခု ၆လ မှ ၇လပိုင်းအထိ John Gage၊ James Gosling၊Bill Joy၊Patrick Naughton http://en.wikipedia.org/wiki/Patrick_Naughton၊Wayne Rosin၊ Eric Emerson Schmidtတို့ကြားတွင်၊ ၃ရက်တိုင်တိုင်  ဆွေးနွေးပွဲ ပြုလုပ်ခဲ့ပြီး၊ Web လောက ဘက်ကို ဦးတည်ချက်ပြောင်းရန် ချမှတ်ခဲ့ကြ၏။ သူတို့သည် ခေတ်ရှေ့ပြေးသော Web Browserတစ်ခုဖြစ်သည့်  NCSA Mosaic ကို တွေ့မြင်ပြီး Web ကို အစပြုသည့် အင်တာနက် ၏ နယ်မြေသည် ကေဘယ်တီဗွီထက် မနိမ့်ကျသော အပြန်အလှန် အသုံးပြုနိုင်သော အဆင့်မြင် ကြားခံနယ်တစ်ခုဖြစ်လာနိုင်ကြောင်းကို လက်ခံခဲ့ကြ၏။ Oak ကို အသုံးပြု၍ Prototype အနေနှင့် Naughton သည် WebRunner ဟုအမည်ရသည့် ဘရောက်ဇာ အသေးစားလေးတစ်ခုကို တီထွင်ခဲ့၏။ ထို ဘရောက်ဇာ၏ အမည်သည် နောက်ပိုင်းတွင် HotJava ဟု ပြောင်းလဲခဲ့၏။ Web စာမျက်နှာ တွင် Java အပလက် ဟု အမည်ရသော  Java ပရိုဂရမ် အသေးစားများကို ထည့်သွင်းပြီး၊  HotJava ဖြင့် စာမျက်နှာကို ဖွင့်ကြည့်သောအခါ  HotJava အပေါ်တွင် ကာတွန်းကားများနှင့် မောက်စ်၏ လှုပ်ရှားမှု့ အားပြန်လည်ပြီး တုံ့ပြန်နိုင်သည့် ပရိုဂရမ်များကို အသုံးချလာနိုင်ခဲ့ကြ၏။

ထိုနှစ်ထဲမှာပင် Oak ၏ အမည်အား **Java** ဟု ပြောင်းလဲခေါ်ဆိုခဲ့ကြ၏။ အကြောင်းမှာ အမည် မှတ်ပုံတင်ရန် လေ့လာကြည့်သောအခါ "Oak" သည် ဗွီဒီယို ကတ်ထုတ်လုပ်ရေး ကုမ္ပဏီ (Oak Technology) က လက်ရှိ အသုံးပြုနေသောကြောင့်ဖြစ်၏။ Java ဟူသော အမည်မှာ ထိုစဉ်က အဖွဲ့ဝင်များ အသွားများခဲ့သော ကော်ဖီဆိုင်တစ်ဆိုင်၏ အမည်ဟုလည်း အပြောများကြ၏။ အချို့မှာမူ အခြား စကားလုံးတစ်ခု၏ အတိုကောက်အမည်ဟုလည်း ပြောကြ၏။
* စကားလုံးအစများ ကိုယူထားခြင်းမဟုတ်ဟူသော အဆိုကို လက်ခံသူများကြ၏။
* အနီးအနားရှိ ကော်ဖီဆိုင်တွင် ရောင်းသောကော်ဖီစေ့၏ အမျိုးအစားကို အသုံးပြုထားသည်ဟု စဉ်းစားသူကများ၏။ အဘယ့်ကြောင့်ဆိုသော် Java ကလပ်စ်ဖိုင်၏ ဘိုက်ကုဒ်）၏ အစစာလုံး လေးလုံးသည် အမြဲတမ်း 0xCAFEBABE ဟု ရေးသားထားသောကြောင့်ဖြစ်၏။ 
* တဖန် အမေရိကန် အင်္ဂလိပ်ဘာသာရပ်တွင် coffee ဟုလည်း အဓိပ္ပာယ်ရသည်။
* သို့ရာတွင် **J**ames Gosling, **A**rthur **V**an Hoff, and **A**ndy Bechtolsheim တို့၏ အစစာလုံးကို အသုံးပြုထားသည်ဟု ပြောကြသည်လည်းရှိ၏။ 
* တဖန် **J**ust **A**nother **V**ague **A**cronym ၏ အစစာလုံးဟု ပြောဆိုသည်လည်းရှိ၏။
၁၉၉၄ခု ၁၀လပိုင်းတွင် HotJava နှင့်Java ပလတ်ဖေါင်း သည် Sun Microsystem ၏ အရေးပါဝန်ထမ်းများ၏ရှေ့တွင် စမ်းသပ်ပြသနိုင်ခဲ့၏။ ထိုမှတဆင့် ၁၉၉၄ခုနှစ် အတွင်းမှာပင် Java 1.0a （Alpha Version）ကို ဒေါင်းလုဒ်လုပ်နိုင်ခဲ့၏။

Java နှင့် HotJava ၏ ပထမဦးဆုံး တရားဝင်ထုတ်ပြန်ခဲ့ကြသည်မှာ ၁၉၉၅ခု ၅လပိုင်း ၂၃ရက်နေ့တွင် ကျင်းပခဲ့သော SunWorld တွေ့ဆုံပွဲတွင် ဖြစ်၏။ Sun သည် Java ဖြင့်ရေးသားထားသော Web ဘရောင်ဇာ HotJava ကိုအသုံးပြု၍ Java နှင့်Java အပလက် နည်းပညာဖြင့်ဝက်စာမျက်နှာအပေါ်တွင် ကာတွန်းလှုပ်ရှားမှု့ များ၊ မောက်စ်၏ လှုပ်ရှားမှု့အားတုံ့ပြန်နိုင်မှု့များအား ပြသခဲ့၏။ ထိုတွေ့ဆုံပွဲတွင် ထုတ်ပြန်ကျော်ညာခဲ့သည်မှာ Sun ၏နည်းပညာ ဌာနမှူးတစ်ဦးဖြစ်သော  John Gage ပင် ဖြစ်၏။ ထို တွေ့ဆုံပွဲမှာပင် John Gage ၏ထုတ်ပြန်ချက်နှင့်ပတ်သက်ပြီး Netscape Communications ၏ ဒုတိယ ဥက္ကဋ္ဌ Marc Andreessen ၏ ထုတ်ပြန်ချက်က တက်ရောက်လာသူများအား အံ့အားသင့်စေခဲ့၏။ တဖန် Netscape ကုမ္ပဏီမှ ၎င်း၏ဘရောင်ဇာဖြစ်သော Netscape Navigator တွင် Java အား ထည့်သွင်းရန် စီစဉ်နေကြောင်းကို ထုတ်ပြန်ခဲ့၏။ ဤထုတ်ပြန်ချက်ကြောင့်  Java နည်းပညာသည် အိုင်တီနည်းပညာလောတွင် အသိများစေခဲ့သည်။

### လတ်တလော လှုပ်ရှားမှု့များ 
Java ၏ တရားဝင် ထုတ်ပြန်ပြီးချိန်မှ ယနေ့အချိန်အထိ ပြောင်းလည်းလာခဲ့ပုံကို အဘက်ဘက်မှ သုံးသပ်သွားပါမည်။ 

#### Web（Client ဘက်မှအမြင်） 
Web ဘရောင်ဇာဖြင့် Java အပလက်ကို အသုံးပြုသည့်နည်းပညာမှာ အတော်ကျယ်ကျယ်ပြန့်ပြန့်ကို အသုံးပြုလာခဲ့ကြ၏။ ဘရောက်ဇာ（World Wide Web၏Clientဘက်ခြမ်း）သည်Web စာမျက်နှာ အတွင်း Animation များကို ဖော်ပြရာတွင်လည်းကောင်း၊ Mouse Event အပေါ်တွင် Interactive လှုပ်ရှားမှု့များကို တုံ့ပြန်ရာတွင်လည်းကောင်း Java ကို အသုံးပြုခဲ့ကြ၏။ သို့ရာတွင် ယခုနောက်ပိုင်းတွင် အင်အားကြီးသော အပြိုင်အဆိုင် များလည်း ထွက်ပေါ်လာခဲ့၏။ ယနေ့ နှစ်များတွင် Yahoo! Games နှင့် ဗွီဒီယိုပြစက် အစရှိသည့် အပလီကေးရှင်းများတွင် Java အပလက်ကို အသုံးပြုများသည်ကို တွေ့ရ၏။

ယခင် အချိန်များတွင် Java အပလက်ကို အသုံးပြုထားသည့် ဆိုဒ်များကို ကြည့်လိုသည့်အခါ စက္ကန့်အတန်ကြာ ကြာမြင့်သည့် ဘရောက်ဇာများလည်းရှိတတ်၏။ Java နှင့် Java အပလက် ၏ နည်းပညာတိုးတက်လာမှု့ကြောင့် ပတ်ဝင်းကျင်ကြောင့်ကြာမြင့်မှု့များ၊ စာမျက်နှာကို ဖော်ပြရာတွင် ကြံ့ကြာမှု့ အစရှိသည့် အခက်အခဲများလည်း ဖြေရှင်းလာနိုင်ခဲ့၏။ 

လွယ်ကူသော Animation များကို အသုံးပြုရာတွင် Java အပလက်ထက်စာလျှင် GIF89a နှင့် Adobe Flash ကို အသုံးပြုကြသည်က များ၏။ ယနေ့ခေတ် Web Client နယ်ပယ်တွင် Ajax သည်လည်း ခေတ်စားလာခဲ့၏။ 

#### Web（ဆာဗာ ဘက်မှအမြင်） 
ယနေ့ခေတ် World Wide Web၏ဆာဗာ ဘက်ပိုင်းတွင် Java နည်းပညာ(Java EE) အား အတော်များများ အသုံးပြုနေကြသည်ကို တွေ့ရ၏။ ဝက်ဘ်ဆိုက် အတော်များများသည်၊ Java ဆာဗလက် (Java Servlet) နှင့် JSP（JavaServer Pages）အစရှိသည့်  Java EE နည်းပညာများကို အသုံးပြု၍ ဝက်စာမျက်နှာများကို အလိုအလျှောက်ထုတ်လုပ်ပေးနိုင်သော ဆိုက်များကို တည်ဆောက်လာကြသည်ကို တွေ့ရ၏။ Java ဆာဗလက် သည် သက္ကရစ် ၂၀၀၀ခုနှစ်နောက်ပိုင်းတွင် အကျယ်တဝင့် အသုံးပြုလာကြပြီး ယနေ့အချိန်အခါတွင်ဝက်ဘ်အပလီကေးရှင်းအတော်များများသည် ဆာဗလက်များအပေါ်တွင် တည်ဆောက်ထားကြသည်ကို တွေ့ရပါ၏။

Sun Microsystems မှရေသားခဲ့သော Java ဆာဗလက်၏ အလုပ်လုပ်ဆောင်ပုံကို အကျဉ်းချုံးဖော်ပြပါမည်။

# Java အားအသုံးချနိုင်သည့် ပတ်ဝင်းကျင်ပရိုဆက်（ဆာဗလက်ပတ်ဝင်းကျင်）အား အလုပ်လုပ်နေစေပြီး ဝက်ဘ်ဆာဗာအနေဖြင့် အလုပ်လုပ်နေစေ၏။ 
# ဝက်ဘ်ဆာဗာသည်ဝက်ဘ်ဘရောင်ဇာမှ ဆက်သွယ်တောင်းဆိုမှု့(Request)ကို လက်ခံရရှိသည်။
# ဝက်ဘ်ဆာဗာသည် လက်ခံရရှိလာသော တောင်းဆိုမှု့ကို ဆာဗလက်ပတ်ဝင်းကျင်ဆီသို့ လက်ဆင့်ကမ်းပေးပို့ပါသည်။
# ဆာဗလက်ပတ်ဝင်းကျင် အပေါ်တွင်အလုပ်လုပ်နေသော Java ပရိုဂရမ်（Java ဆာဗလက်）သည်၊ လက်ခံရရှိသည့် တောင်းဆိုမှု့အပေါ်တွင် မှုတည်ပြီးဝက်ဘ်စာမျက်နှာများကို အလိုအလျောက် ရေးသားပေးပါသည်။
# ဆာဗလက်ပတ်ဝန်းကျင်သည်၊ ဆာဗလက်မှရေးသားပေးသော ဝက်ဘ်စာမျက်နှာများကို ဝက်ဘ်စာမျက်နှာများဆီသို့ ပြန်လည်ပေးပို့ပါသည်။
# ဝက်ဘ်ဆာဗာသည်၊ ဆာဗလက်ပတ်ဝင်းကျင်မှ လက်ခံရရှိသော ဝက်ဘ်စာမျက်နှာကို ဝက်ဘ်ဘရောင်ဇာဆီသို့ ပြန်လည်ပေးပို့ပါသည်။

Sun က Java ဆာဗလက် နည်းပညာကို တီထွင်ခဲ့ကြသည့် ၁၉၉၀ခုနှစ်ပိုင်းများတွင်၊ ဝက်ဘ်အပလီကေးရှင်းများကို ရေးသားကြရာတွင် အောက်ပါအခက်အခဲများကို ကြုံတွေ့ရလေ့ရှိခဲ့၏။

* ဝက်ဘ်အပလီကေးရှင်း（Dynamic Web Page）များကို ရေးသားရာတွင်CGIသို့မဟုတ်၊Microsoft၏IISမှ ထုတ်ပြန်ထားသောActive Server Pages (ASP) ကို အသုံးပြုနေကြသည်က များ၏။
* CGI သည် ၎င်း၏ထူးခြားချက်မှ အိုဗာဟတ်ဒ်အဖြစ်များ၍၊ စာမျက်နှာကို လျှင်လျင်မြန်မြန်ဖော်ပြနိုင်ရန် ရေးသားရန်အလွန်ခက်ခဲလှ၏။ 
* ASP သည်ဆာဗာသည် အလွန်တန်ဖိုးကြီးမားသော Microsoft Windows NT Server ဖြစ်ရန် လိုအပ်သည်။ 

Java ဆာဗလက်သည် အထက်ပါပြဿနာများကို ဖြေရှင်းနိူင်ရန် ရည်ရွယ်ပြီး ရေးသားခဲ့သော နည်းပညာဖြစ်သည်။

#### Desktop ဘက်ကို ပြောင်းလည်းလာပုံ 
Desktop ပတ်ဝင်းကျင်နှင့်ပတ်သက်ပြီးကိုယ်ပိုင်ရပ်တည်နိုင်သော Java (Java SE) ၏အပလီကေးရှင်းဆော့ဖ်ဝဲ（Javaအပလီကေးရှင်း）သည်၊ ယခင်က အသုံးနည်းပါးခဲ့သော်လည်း ယခုနောက်ပိုင်းတွင် Java ကိုအသုံးပြုသော ဆော့ဖ်ဝဲများကို တွေ့လာခဲ့ရသည်။ ဤကဲ့သို့ အသုံးများလာရခြင်း အကြောင်းအရင်းကို အောက်ပါအချက်များကြောင့်ဟု စဉ်းစားနိုင်သည်။ 

* ကွန်ပျူတာ၏ လုပ်ဆောင်နိုင်စွမ်း စွမ်းရည်သည် မြင့်မားလာမှု့ကြောင့်ဖြစ်၏။
* Java ၏ဒြပ်မဲ့စက်（Java ဒြပ်မဲ့စက်၊ Java VM）နှင့်Javaကွန်ပိုင်းလာသည် များစွာ တိုးတက်ပြောင်းလည်း လာခဲ့သောကြောင့် ဖြစ်၏။ 
* သုံးရလွယ်ကူသော Java ၏Desktop အပလီကေးရှင်းများကို လွယ်ကူစွာ ရေးသားနိုင်သော အဆင့်မြင့် IDEများကို၊Open Sourceနှင့် စီးပွားဖြစ် လုပ်ငန်းသုံးများဘက်မှ ထုတ်ပြန်လာနိုင်ခဲ့သောကြောင့် ဖြစ်၏။

အသုံးများသော Java ဆော့ဖ်ဝဲများမှာNetBeansနှင့်Eclipse SDK၏ပေါင်းစုရေးသားပတ်ဝင်းကျင်နှင့်၊ LimeWireနင့်Azureusကဲ့သို့သောဖိုင်ပူးတွဲအသုံးချ ဆော့ဖ်ဝဲများ အစရှိသော ဆော့ဖ်ဝဲများပဲဖြစ်ကြ၏။ တဖန် သင်္ချာဆော့ဖ်ဝဲတစ်ခုဖြစ်သော MATLAB မှာလည်းUser Interface၏ ပံ့ပိုးမှု့နှင့် အတွက်အချက်ပိုင်းနေရာ အချို့တွင် Java ကို အသုံးပြုထားသည်။ Java Swingနှင့်SWT၏ဝစ်ဂျက်တူးကစ်ကို အသုံးပြုထားသော အပလီကေးရှင်းများကို နောက်ပိုင်းနေ့ရက်များတွင် တွေ့လာခဲ့ရသည်။ 

ဤကဲ့သို့ ယနေ့ခေတ်များတွင် Desktop Java အပလီကေးရှင်းများကို အသုံးပြုလာသည်ကို တွေ့ရပါသော်လည်း၊ အောက်ပါအခက်အခဲများကြောင့် သုံးသင့်သလောက် အသုံးမများသည်ကို တွေ့နေရ၏http://weblogs.java.net/blog/joshy/archive/2005/03/why_dont_you_sh.html ။

* Java အပလီကေရှင်းများသည်၊ Java ပတ်ဝင်းကျင်၏ အိုဗာဟက်ဒ်ကြောင့် သဘာဝအပလီကေးရှင်းများနှင့် နှိုင်းယှဉ်လျှင် မံမိုရီ အသုံးများကြသည်က များ၏။
* GUI သည် အသုံးပြုမည့်ပလတ်ဖေါင်း ကိုယ်ပိုင်ထူးခြားမှု့ရှိသည့် Human Interface Guideline (HIG) ကို ထည့်သွင်း စဉ်းစားထားခြင်းမရှိပေ။ HIG ကို လိုက်နာပြီးအပလီကေးရှင်းများကို ရေးသားပါက၊ အသုံးပြုသူသည် အသုံးပြုမည့် အပလီကေးရှင်းကို နားလည်ရလွယ်ကူ တတ်သည်။ တဖန် မှုလအတိုင်းအသုံးပြုမည် ဆိုပါက စာလုံးဒီဇိုင်းများကို ချောမွေ့စေသည့် နည်းပညာ (Font Smoothing) ကို အသုံးပြု၍မရနိုင်ပေ။ ထို့ကြောင့် User Interface ၏ စာလုံးများကို ဖော်ပြရာတွင် လှပခြင်းမရှိပဲ အရည်အသွေးမှာ မြင့်မားခြင်းမရှိနိုင်ပေ။ 
* Java Development Kit (JDK)အဖြစ် အခမဲ့ပံ့ပိုးပေးနေသော အခြေခံJavaပလတ်ဖေါင်းသည် အသုံးလွယ်သော Desktop အပလီကေးရှင်းများကို ရေးသားရန်မှာ အားနည်းနေပါသေး၏။
*: ယခုနောက်ပိုင်းတွင် အထက်ဖော်ပြပါအတိုင်း၊ အသုံးလွယ်ကူသည့် Java Desktop အပလီကေးရှင်းများကို လွယ်ကူစွာရေးသားနိုင်သည့် အထောက်ကူပြုကရိယာများအားOpen Source/စီးပွားဖြစ် အနေဖြင့်၎င်း ပံ့ပိုးပေးနေကြ၏။
* Javaပလက်ဖေါင်း (JRE) သည် ယနေ့တိုင် အဓိက ဗားရှင်းမြှင့်တင်မှု့များကို အကြိမ်ကြိမ် ပြုလုပ်ခဲ့ကြပြီး၊ ဗားရှင်းအမျိုးမျိုးရှိကြ၏။ အသုံးပြုသူသည် Java အပလီကေးရှင်းတစ်ခုကို စတင်အသုံးပြုရာတွင် လိုအပ်သလို ထိုအပလီကေးရှင်းကို အလုပ်လုပ်စေနိုင်သည့် ဗားရှင်းသို့မဟုတ် ထိုထက်နောက်ကျသော ဗားရှင်းကို အင်စတောလုပ်ထားရန် လိုအပ်သည်။ Java ပလက်ဖေါင်းသည် 7MB အကျော်ရှိပြီး၊ ဒေါင်းလုဒ်လုပ်ပြီး အင်စတောလုပ်ရန်မှာ အတော်လေးကို အလုပ်များစေသည်။ 
*: ယခုနောက်ပိုင်းတွင် Java Web Start ၏ ထွက်ပေါ်လာခြင်းကြောင့် အော်တို ဒေါင်းလုဒ်နှင့် အင်စတော ကို လုပ်ဆောင်လာနိုင်ခဲ့သည်။ ဝက်ဘ်ဘရောင်ဇာမှ Java အပလီကေရှင်းကို ရှာဖွေတွေ့ရှိပါက ကလစ်တစ်ခါနှိပ်ရုံဖြင့် JRE ကို အလိုအလျှောက် ဒေါင်းလုဒ်လုပ်ပြီး၊ အင်စတောလုပ်ခြင်း၊ Update လုပ်ခြင်း အစရှိသည်တို့ကို လုပ်ဆောင်ပေးနိုင်ပြီး၊ Java Web Start ကို အခြေခံသောSwing အပလီကေးရှင်းများကို အလုပ်လုပ်စေနိုင်သည်။

အချို့သောဆော့ဖ်ဝဲရေးသားသူများသည် အိုင်တီနည်းပညာတွင်ဝက်ဘ်ကို အခြေခံသော မော်ဒယ်သည် ခေတ်စားနေပြီး၊ Stand Aloneအပလီကေးရှင်းများသည် ခေတ်နောက်ကျလျက် ရှိပြီး၊ ပရိုဂရမ်မင်းနည်းပညာ အသစ်များသည် ထူးချွံသောဝက်ဘ်အပလီကေးရှင်းကို ရေးသားနိုင်ခြင်းဖြင့် ပြည့်စုံနေသည်ဟု ထင်မြင်နေကြ၏။ ဤအမြင်နှင့်ပတ်သက်၍ ဆော့ဖ်ဝဲနည်းပညာရှင်များကြားတွင် ထောက်ခံသူများရော ကန့်ကွက်သူများပါ အမျိုးမျိုးရှိကြပါ၏။

လက်ရှိအချိန်တွင်Rich Clientနှင့်Web 2.0တို့၏ ထွက်ပေါ်လာမှု့ကြောင့် ပုံစံအသစ်များကို ဖြစ်ပေါ်စေခဲ့သည်။ ဝက်ဘ်ကို အခြေပြုသော ဝက်ဘ်အပလီကေးရှင်းနှင့်Stand Aloneအပလီကေးရှင်းများ၏ ပူးတွဲမှု့များပင်ဖြစ်၏။ ဝက်ဘ်အပလီကေးရှင်းအား Ajaxနှင့် Java Web Start၊Adobe Flash အစရှိသည့် ပူးတွဲရေးသားမှု့များကြောင့်၊ Web2.0 ခေတ်နှင့် လိုက်ညီသော လှပသေသပ်သည့် အပလီကေးရှင်းများကို ရေးသားလာနိုင်ခဲ့ကြသည်။

#### အိမ်သုံး ကွန်ပျူတာနှင့် ပတ်သက်၍ 
ယနေ့ခေတ် အိမ်သုံးကွန်ပျူတာ (PC) အတော်များများသည် အသုံးပြုသူက ဝက်ဘ်နှင့်Desktop ပတ်ဝင်းကျင်အပေါ်တွင် Javaအပလီကေးရှင်း များကို အခက်အခဲမရှိ အလုပ်လုပ်စေနိုင်သည်
။ PCထုတ်လုပ်သူ အတော်များများသည် ထုတ်လုပ်ရောင်းချသည့် Windows PC တွင်Javaပလက်ဖေါင်း (JRE) ကို ထည့်သွင်းပေးလျက် ရှိ၏။ ပန်းသီးတံဆိပ်၏ Mac OS X နှင့် Linux အတော်များများတွင်လည်း Java ပလက်ဖေါင်းကို ထည့်သွင်းပေးလျက် ရှိ၏။ ထို့ကြောင့် ၂၀၀၁ခုနှစ်နောက်ပိုင်း Microsoftမှ Java ပလက်ဖေါင်းကို Windows တွင် ထည့်သွင်းခြင်းမပြုတော့ဟု ထုတ်ပြန်ချက်သည် Java အပလီကေးရှင်းများ အပေါ် အကျိုးသက်ရောက်မှု့မှာ ထင်သလောက်ကြီးမားခြင်းမရှိပေ။ 

၂၀၀၁ခုနှစ် နောက်ပိုင်းတွင် မိုက်ကရိုဆော့ဖ်မှ Java ပလက်ဖေါင်းကို Windows တွင် ထည့်သွင်းခြင်းမပြုတော့ဟု ထုတ်ပြန်ခဲ့ခြင်းသည်၊ ဆန်းမိုက်ကရိုစစ္စတမ်မှ မိုက်ကရိုဆော့ဖ်အား အဆင့်နိပ်သော Java ပလက်ဖေါင်းအား ထည့်သွင်းနေမှု့ကြောင်း တရားစွဲဆိုခဲ့သောကြောင့်ဖြစ်၏။ မိုက်ကရိုဆော့ဖ်မှ ယနေ့တိုင် Windows တွင် ထည့်သွင်းခဲ့သော Java ပလက်ဖေါင်းတွင် အသုံးပြုရန် ရေးသားသားသော Java ပရိုဂရမ်တစ်ခုသည် အခြားသော ပလက်ဖေါင်းအပေါ်ရှိ Java ပလက်ဖေါင်းအပေါ်တွင် အလုပ်နိုင်မည်ဟု အာမခံနိုင်မည် မဟုတ်ပေ။

သို့ရာတွင် ယနေ့ခေတ်များတွင် Java အပလီကေးရှင်းများ ကိုယ်တိုင်က Java ပလက်ဖေါင်းများကို ပူးတွဲဖြန့်ဝေလာကြသည်ကို တွေ့ရ၏။ ထိုသို့ဖြန့်ဝေလာကြခြင်းမှာ Java အပလီကေးရှင်းများကို ရေးသားသူနည်းပညာရှင်များ၏ ဆုံးဖြတ်ချက်ကြောင့် ဖြစ်၏။ Java အပလီကေးရှင်းများကို ရည်ရွယ်ထားသလို အသုံးပြုနိုင်စေရန်အတွက် Java ပလက်ဖေါင်း၏ခြားနားမှု့ကြောင့် ဖြစ်ပေါ်စေတတ်သော ပြဿနာများကို ရှောင်ရှားနိုင်စေဖို့အတွက် ကွန်ပျူတာအပေါ်တွင်ရှိသော Java ပလက်ဖေါင်းအား အသုံးပြုရန် မသင့်ဟု ဆုံးဖြတ်ခဲ့ကြသောကြောင့် ဖြစ်၏။

လက်ရှိအချိန်တွင်Javaအပလက်သည် ကိုယ်တိုင်အလုပ်လုပ်နိုင်သော ပလတ်ဖေါင်းကို ခွဲခြားသိရှိ လာနိုင်ခဲ့သည်။ တဖန်၊ ဗားရှင်းများအကြား၌ အပြန်အလှန်အသုံးပြုနိုင်မှု့ သည်လည်း ပရိုဂရမ်မင်းဘာသာရပ်များ အကြားတွင် အဆင့်မြင့် အနေအထားတွင် တည်ရှိသည်။ Java SE 1.3 နောက်ပိုင်းတွင် ဗားရှင်းမတူညီမှု့ကြောင့် ဖြစ်ပေါ်တက်သော ပြဿနာများမှာ အလွန်နည်းပါးလာခဲ့သည်။ ထို့အပြင် Java Web Start နည်းပညာသည် အင်စတောလုပ်ထားသော Java ဗားရှင်းကို စမ်းစစ်ပြီး လိုအပ်ပါက အလိုအလျှောက် အပ်ဒိတ်လုပ်ပြီး၊ Java Web Start သုံး အပလီကေးရှင်းများကိုပါ အပ်ဒိတ်လုပ်လာနိုင်သည်။ ထို့အတွက် Java ပလက်ဖေါင်း ဗားရှင်းအဟောင်းများကို အသုံးပြုနေသော စက်များပင်ဖြစ်လင့်ငြား အလိုအလျှောက် အပ်ဒိတ်လုပ်နိုင်ခြင်းကြောင့် ဘားရှင်းပြဿနာသည် ခက်ခဲသော ပြဿနာတစ်ခုမဟုတ်တော့ပါ။

#### နှစ်မြှုပ်စစ္စတမ် အပိုင်းဆိုင်ရာ 
နှစ်မြှုပ်စစ္စတမ်သုံး Java (Java ME) သည် တွင်ကျယ်စွာအသုံးပြုနေသော ပတ်ဝင်းကျင်တစ်မျိုးဖြစ်၏။

မိုဘိုင်းကရိယာ（မိုဘိုင်းဖုန်း・PHSやPDA・စမတ်ဖုန်းအစရှိသည့်）များတွင် Java ပလက်ဖေါင်းများကို အသုံးပြုကြသည်က များ၏။ Java ပလက်ဖေါင်းအား အထက်ပါ မိုဘိုင်းကရိယာများတွင် တွင်ကျယ်စွာအသုံးပြုနေကြ၏။ တဖက်တွင် Symbian နှင့် BREW သည်လည်း မိုဘိုင်းဖုန်းအား အဓိကထားပြီး Java နှင့် အပြိုင်ဖြစ်လာခဲ့သည်။ 

Java ME သည် BREW နှင့်မတူညီပဲ၊ ဖန်တီးသူမှ လိုင်စဉ်ခ ပေးဆောင်ရန်မလိုပဲ ပရိုဂရမ်များကို ဖန်တီးရေးသားနိုင်၏။ တဖန် Java ME အား Symbian ထက်စာလျှင် ကျယ်ပြန့်စွာ အသုံးပြုနေသည်ကို တွေ့ရသည်။ ထိုအချက်ကြောင့် Java ME သည် Symbian ထက်ကျယ်ပြန့်စွာ အသုံးပြုလာကြသည်မှာ မိုဘိုင်းကရိယာများအတော်များများအပေါ်တွင် သက်သာစွာ အလုပ် လုပ်ဆောင်နိုင်စေသောကြောင့် ဖြစ်၏။ အထက်ပါအကြောင်းများကြောင့် တတိယပါတီများမှတဆင့် Opera mini ကဲ့သို့သော အခမဲ့ Java ဆော့ဖ်ဝဲများကို ရေးသားလာနိုင်ခြင်းဖြစ်၏။

### ဗားရှင်းများ 
Java သည် JDK（Java Development Kit）1.0  ကို ထုတ်ပြန်ပြီးသည့် နောက်ပိုင်း၊ အကြိမ်ကြိမ် အဓိကပြောင်းလည်းမှု့များကို ထည့်သွင်းလာခဲ့ကြ၏။ ဗားရှင်းများကို မြှင့်တင်ရင်း များစွာသောကလပ်စ်နှင့် Packageများသည် အခြေခံ အသုံးချ ကလပ်စ် အစုအဝေး ထဲကို ပါဝင်လာခဲ့ကြ၏။ပရိုဂရမ်မင်းဘာသာရပ်Java နှင့်Javaပလက်ဖေါင်းသည် ဗားရှင်းများကြားတွင် အပြန်အလှန်အသုံးပြုနိုင်ရန် သတိပြု၍ ဖြည့်စွက်ပြုပြင်မှု့များကို ပြုလုပ်လာခဲ့ကြ၏။

J2SE 1.4  မှစ၍ Java ၏ ရေးသားခြင်းများသည် JCP (Java Community Process) ဟုခေါ်သော စနစ်ချမှတ်ရေး အစီအစဉ်များဖြင့် ရေးသားလာခဲ့ကြ၏။ JCP တွင် JSRs (Java Specification Requests) ဟုခေါ်သော တောင်းဆိုချက်စာစောင်များမှ Java နှင့်ပတ်သက်သော ဖြည့်စွက်ဖန်ရှင်များ Java ပလက်ဖေါင်းနှင့်ပတ်သက်သော ပြုပြင်ပြောင်းလဲမှု့များကို အကြံပြုခြင်း၊ သတ်မှတ်ခြင်းများကို ပြုလုပ်နေကြ၏။

တဖန် J2SE1.3 နောက်ပိုင်းတွင် ရေးသားသည့် ကုဒ်အမည်အနေဖြင့်၊ အဓိကဗားရှင်းများအား သွေးနွေးသတ္တဝါများ၏ အမည်ကို၎င်း၊ အသေးစိတ် ပြောင်းလည်းမှု့များကို အင်းဆက်များ၏ အမည်ကို ၎င်း အသုံးပြုလာသည်ကို တွေ့ရ၏။

ဘာသာရပ်၏ ထင်ရှားချက်များမှာ JLS（Java Language Specification; Java ထင်ရှားချက်များ）ဖြင့် သတ်မှတ်ထားသည်။ JLS သည် JSR 901 ၏ လက်အောက်တွင် ထိမ်းသိမ်းထားသည်။ 

ဗားရှင်းများကို မြှင့်တင်ပြောင်းလည်းခြင်းအားဖြင့်၊ ဘာသာရပ်၏ ထင်ရှားချက်များကို ပြောင်းလဲရုံသာမက၊ အခြေခံ အသုံးချ ကလပ်စ် အစုအဝေးတွင်လည်း အသစ်ဖြည့်စွက်မှု့များကို ပြုလုပ်ခဲ့ကြ၏။  JDK 1.0  တွင် အခြေခံအသုံးချ ကလပ်စ် အစုအဝေးသည် ပျမ်းမျှ အားဖြင့် ကလပ်စ်/အင်တာဖေစ်ပေါင်း 200 ခန့်သာ ရှိခဲ့သော်လည်း၊ Java SE 6 အရောက်တွင် စုစုပေါင်း 4000 ကျော်အထိ တိုးပွားလာခဲ့၏။Swing နှင့် Java 2D ကဲ့သို့ API အသစ် များကိုလည်း ထည့်သွင်းလာခဲ့ကြ၏။ တဖက်တွင် နဂို JDK 1.0 လက်ထက်တွင် အသုံးပြုခဲ့သော ကလပ်စ်များ၏မက်သတ် အတော်များများသည်လည်း၊ J2SE 5.0  အရောက်တွင် အသုံးပြုရန် အားမပေးတော့ခြင်းများ ရှိလာခဲ့ကြသည်။

#### JDK 1.0 (1996/1/23) 
ကနဦး ဗားရှင်းဖြစ်သည်[http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.html ] 
* ဤဗားရှင်းသည် နိုင်ငံတကာပြောင်းလည်းမှု့များ မပြုလုပ်ရသေးပါသဖြင့် အခြားသောဘာသာစကားများ ဖြင့် အသုံးမပြုနိုင်သေးပါ။

#### JDK 1.1 (1997/2/19) 
အဓိကလုပ်ဆောင်ချက် အတော်များများကို ဖြည့်စွက်လာခဲ့၏။[http://www.sun.com/smi/Press/sunflash/1997-02/sunflash.970219.0001.html ] 
* လိုကယ်လိုက်ဇေရှင်းကို ထည့်သွင်းလာခြင်း
* AWT Event Model ၏ ပြန်လည်မွန်းမံတည်ဆောက်ခြင်း
* ဘာသာရပ် ထင်ရှားချက်များတွင် အတွင်းပိုင်း ကလပ်စ်ကို ဖြည့်စွက်လာခဲ့၏
* JavaBeans ဆော့ဖ်ဝဲကွန်ပိုးနန့်နည်းပညာ
* JDBC ဒေတာဘေစ်ဆက်သွယ်ရေးAPI
* Java RMI အနေရာခြား Object နည်းပညာ

#### J2SE 1.2 (1998/12/8) 
ကုဒ်အမည်မှာ Playground ဖြစ်၏။ ဤ ဗားရှင်းမှစ၍ အမည်ကို **Java 2** ဟု ပြောင်းလည်းခေါ်ဆိုပြီး၊ J2SE 5.0 အထိ ဤအမည်ကို အသုံးပြုလာခဲ့၏။ တဖန် အဲဒီးရှင်းကိုလည်း  JDK မှ "J2SE"（Java 2 Platform, Standard Edition）ဟု ပြောင်းလည်းခေါ်ဆိုခဲ့၏။  ထိုအမည်ကြောင့် J2SE သည်J2EE（Java 2 Platform, Enterprise Edition）နှင့် J2ME（Java 2 Platform, Micro Edition）၏ အခြေခံ အယ်ဒီးရှင်းဖြစ်ကြောင်းကို သိသာစေခဲ့၏။[http://www.sun.com/smi/Press/sunflash/1998-12/sunflash.981208.9.html ] 
* `strictfp` keyword : IEEE 754 တွင် အခြေခံသော တိကျသည့်ဒသမကိန်းများ၏ အတွက်အချက်ကို ဖြည့်စွက်လာခဲ့၏
* Reflection : ကလပ်စ်အမည်နှင့်၊ ကလပ်စ်တွင်ပါဝင်သောမက်သတ်အမည်ဖြင့် လိုအပ်သလို သတ်မှတ်ခေါ်ယူလာနိုင်ခဲ့၏
* Swing GUI Toolkitကို အခြေခံ API အဖြစ် ဖြည့်စွက်လာခဲ့၏
* Sun ၏Javaဒြပ်မဲ့စက်တွင်JIT ကွန်ပိုင်းလာကို ဖြည့်စွက်လာခဲ့၏
* Java Plug-in :အမျိုးမျိုးသောဝဘ်ဘရောင်ဇာတွင် Java အသုံးချ ပတ်ဝန်းကျင်ကို ထည့်သွင်းခဲ့ပြီး၊ Java ပရိုဂရမ် များကို အသုံးချလာနိုင်ခဲ့၏
* Java IDL ဟုခေါ်သော IDLကို အသုံးချဖြည့်စွက်ခဲ့ပြီးCORBA နေရာခြား Object ပတ်ဝင်းကျင်နှင့် အပြန်အလှန် ဆက်သွယ် အသုံးပြုလာနိုင်ခဲ့၏
* Collection Framework ကို ဖြည့်စွက်ခဲ့၏

#### J2SE 1.3 (2000/5/8) 
ကုဒ်အမည်သည် Kestrel ဖြစ်၏။ [http://www.sun.com/smi/Press/sunflash/2000-05/sunflash.20000508.3.html ] 
* HotSpot Java ဒြပ်မဲ့စက်ကို ဖြည့်စွက်ခဲ့ပြီး၊ JIT ကွန်ပိုင်းလာအပြင် လိုအပ်သလို ပြန်လည်ကွန်ပိုင်းလုပ်နိုင်သော နည်းပညာ၊နောင်တခေတ်၏ အမှိုက်သိမ်းစနစ် ကို ပံ့ပိုးထားသော လျင်မြန်သော Java ဒြပ်မဲ့စက် ကို အသုံးပြုလာနိုင်ခဲ့၏။
* Java RMI အား CORBA ကို အခြေခံ၍ ပြုပြင်လာခဲ့၏။
* JavaSound : အသံအချက်အလက်များကို အသုံးပြုနိုင်သော API
* Java Naming and Directory Interface (JNDI) အား တရားဝင် အသုံးချ ကလပ်စ်အစုအဝေးအတွင်း ဖြည့်စွက်လာခဲ့၏။
* Java ပရိုဂရမ်ကိုDebug လုပ်နိုင်ရန် ကူညီပေးသော ဖန်ရှင်များ၊ Java Platform Debugger Architecture（JPDA）ကို ဖြည့်စွက်ခဲ့၏။

#### J2SE 1.4 (2002/2/6) 
ကုဒ်အမည်သည် Merlin ဖြစ်၏။ ထိုဗားရှင်းသည် JCP（Java Community Process）၏ အောက်တွင် ရေးသားခဲ့သော ဦးဆုံးသောJavaပလက်ဖေါင်းဖြစ်၏။JSR 59[http://www.sun.com/smi/Press/sunflash/2002-02/sunflash.20020206.5.html ]  
* `assert` Keyword : အတိုင်းအတာတစ်ခု အထိDesign By Contract ကို အခြေခံသော ပရိုဂရမ်များကို ရေးသားလာနိုင်ခဲ့၏။JSR 41 
* Perlကဲ့သို့သောregular expression ၏ အသုံးချပရိုဂရမ် အစုအဝေးကို ဖြည့်စွက်ခြင်းအားဖြင့်၊ စာလုံးဆက်အချက်အလက်များနှင့်（စာလုံး）၏ အဆင့်မြင့် လုပ်ဆောင်ချက်များကို ပံ့ပုံပေးလာနိုင်၏။
* ဆက်တိုက်Exceptionလုပ်ဆောင်ချက်များကြောင့်၊ Exception တစ်ခု၏ အကြောင်းအရင်းဖြစ်သော Exception ကို မှတ်သားဖော်ပြပေးလာနိုင်ခဲ့၏။
* NIO (New I/O) JSR 51 ဖြင့် သတ်မှတ်ခဲ့၏။
* Logging API JSR 47 ဖြင့် သတ်မှတ်ခဲ့၏။
* Image I/O API : JPEG နှင့် PNG ကဲ့သို့သောပုံရိပ်များကို အသုံးပြုနိုင်သော API
* JAXP JSR 5နှင့် JSR 63ဖြင့် သတ်မှတ်ခဲ့၏။
* လုံးခြုံရေးစနစ်နှင့် စကားဝှက်စနစ်ကိုလည်း တရားဝင် အသုံးချပရိုဂရမ်အစုအဝေးတွင် ဖြည့်စွက်ခဲ့၏။
** JCE（Java Cryptography Extension）
** JSSE（Java Secure Socket Extension）
** JAAS（Java Authentication and Authorization Service）
* Java Web Start နည်းပညာ။JSR 56 ဖြင့် သတ်မှတ်ခဲ့၏။

#### J2SE 5.0 (2004/9/30) 
ကုဒ်အမည်မှာ Tiger ဖြစ်၏။JSR 176 ၏ အောက်တွင် ရေးသားလာခဲ့ခြင်းဖြစ်သည်။ J2SE 5.0  တွင် ဘာသာရပ်၏ အသုံးပြုပုံမှာ အတော်များများ ပြောင်းလည်းခဲ့ပြီး၊ အသုံးပြုပုံအသစ် အတော်များများကိုလည်း ဖြည့်စွက်ခဲ့လေသည်။ http://www.sun.com/smi/Press/sunflash/2004-09/sunflash.20040930.1.html  မှုရင်းဗားရှင်း၏ အမည်မှာ  J2SE 1.5  ဖြစ်ခဲ့သော်လည်း အတွင်းပိုင်းတွင်သာ အသုံးပြုခဲ့ကြ၏။  
* Generic Type : ကွန်ပိုင်းလုပ်ချိန်တွင်Collection Object အပေါ်တွင် အသုံးပြုသော Object ကို လုံခြုံစွာ ခေါ်ယူ အသုံးပြုလာနိုင်သည်။ အတော်များများပုံစံပြောင်းခြင်းကို ပြုလုပ်ရန် မလိုအပ်တော့ပေ။ JSR 14 ဖြင့် သတ်မှတ်ခဲ့ခြင်း ဖြစ်၏။
* Auto Boxing/Unboxing : `int` ပုံစံကဲ့သို့ ကနဦးပုံစံ（primitive type）နှင့် ကလပ်စ် ကဲ့သို့primitive wrapper class များအကြားတွင် အလိုအလျှောက် ပုံစံပြောင်းလာနိုင်ခဲ့၏။ JSR 201 ဖြင့် သတ်မှတ်ခဲ့၏။
* enumerated type : `enum` ကြောင့်၊ Java တွင် စိတ်ချရသော enumerated type ကို အသုံးပြုနိုင်သော ဒီဇိုင်းပုံစံ(ဆော့ဖ်ဝဲနည်းပညာ) ဖြစ်သည့် Type Safe Enum Design Pattern  ကို ဘာသာရပ် အဆင့်မှ ပံ့ပိုးလာခဲ့ပြီး၊ Enumerated Type အား စိတ်ချစွာ အသုံးပြုလာနိုင်ခဲ့၏။ ယခင်ကဆိုလျှင် စိတ်ချရသော ပုံစံမဟုတ်သည့် ကိန်းဂဏာန်း များကို ကိန်းသေများအဖြစ် သတ်မှတ်အသုံးပြုမလား ဒါမှမဟုတ်၊ ပရိုဂရမ်မာက ကိုယ်တိုင် Type Safe Enum Pattern ကို ရေးသားမလားသာရှိခဲ့၏။ enum အားJSR 201ဖြင့် သတ်မှတ်ခဲ့ခြင်း ဖြစ်၏။
* ပါရာမီတာအရှင်: မက်သတ်၏နောက်ဆုံးပါရာမီတာအား ပုံစံအမည်၏ နောက်တွင် ဆက်၍ အစက် ၃စက် ကို ရေးသားခြင်းအားဖြင့်၊ ပါရာမီတာ အရှင် အနေဖြင့် အသုံးပြုနိုင်မည် ဖြစ်၏။ （နမှုနာ: `void drawText(String... lines)`）။ မက်သတ်ကို ခေါ်ယူရာတွင် နောက်ဆုံးပါရာမီတာအား ၎င်း၏ပုံစံတူ ပါရာမီတာများ  နှစ်သက်သလောက် ပေးကမ်းနိုင်သည်။ မက်သတ်၏ အတွင်းပိုင်းတွင် နောက်ဆုံး ပါရာမီတာအားကိန်းစဉ်တန်း အဖြစ် လက်ခံရယူနိုင်သည်။ 
* Metadata : မှတ်ချက်（Anotation）ဟု အမည်တွင်ပြီး၊ ကလပ်စ်နှင့် မက်သတ်များတွင် "@" ဖြင့် ဖြည့်စွက်ရေးသားထားသော အချက်အလက်များကို ရေးသားနိုင်မည် ဖြစ်သည်။  Metadata ကို အသုံးပြုသော Tool များကိုအသုံးပြုပါက သတ်မှတ်ထားသော ကုဒ်များကို အလိုအလျှောက် ရေးသားနိုင်မည် ဖြစ်၏။ JSR 175ဖြင့် သတ်မှတ်ခဲ့ခြင်း ဖြစ်၏။
* `for` ဝါကျအသစ်（for-each）: for ဝါကျများတွင် ဖွဲ့စည်းပုံအသစ်ကို ရေးသားလာခဲ့၏။ ကိန်းဆက်နှင့်ကော်လက်ရှင် Object（နှင့်အစရှိသည့်）၏Object များကို ထပ်ကာတလည်းလည်း အလုပ်လုပ်ဆောင်စေရာတွင် အသုံးပြုနိုင်သော ရေးသားပုံအသစ်ဖြစ်ပြီး၊ ကုဒ်များကို ရှင်းလင်း လွယ်ကူစွာ ရေးသားနိုင် သောကြောင့် မလိုအပ်သော အမှားများကို နည်းပါးစေနိုင်သည်။ ဤရေးသားပုံကို အသုံးပြုသောအခါ ကော်လက်ရှင်သည် ကိန်းဆက် သို့မဟုတ်၊  အင်တာဖေးစ် ကို ပံ့ပိုးထားသော ကော်လက်ရှင် Object ဖြစ်ရန် လိုအပ်သည်။ for ဝါကျ အသစ်သည်JSR 201ဖြင့် သတ်မှတ်ခဲ့ခြင်း ဖြစ်၏။

#### Java SE 6 (2006/12/11) 
ကုဒ်အမည် သည် Mustang ဖြစ်၏။ JSR 270 ၏အောက်တွင် ရေးသားခဲ့ခြင်းဖြစ်၏။ Java SE 6 နှင့် ပတ်သက်ပြီး Sun သည် အမည်ပေးစနစ်ကို ပြောင်းလည်းခဲ့ပြီး "J2SE" မှ **Java SE** ဟု ပြောင်းလည်းခေါ်ဆိုခဲ့ပြီး၊ ဗားရှင်းလည်း ".0" ကို ဖျက်ပြစ်လိုက်ပါတယ်။ 。
* Scripting for the Java Platform
* AWT၊ Swing ၏ လုပ်ဆောင်ချက်၏ အမြန်နှုန်းကို တိုးတက်စေခဲ့၏။
* WindowsTask Tray အား ပံ့ပိုးမှု့ပေးလာခဲ့၏။
* Windows Aero (Windows Vista) ၏Look And Feel
* Text ၏Unicode Normalization (java.text.Normalizer)
* JDBC 4.0
* JAXP (Java API for XML Processing) 1.4
* Web Services

#### Java SE 7 (2011/7/28) 
ကုဒ်အမည်မှာ Dolphin ဖြစ်၏။ 
Java SE 7 တွင် အသစ်ပါဝင်ခဲ့သော အဓိက နည်းပညာများမှာ အောက်ပါအတိုင်းဖြစ်၏။ 

* Dynamic Type Script Language များအတွက် invokedynamic ကို ဖြည့်စွက်ခြင်း (JSR 292)
* NIO.2 (JSR 203), Stream Control Transmission Protocol, Sockets Direct Protocol
* JDBC 4.1
* Fork & Join Framework (JSR 166y)
* JAXP, JAXB, JAX-WS တို့၏ ပြုပြင်ပြောင်းလဲမှုများ
* ClassLoader ကို ပြင်ဆင်ရေးသားချင်း
* Project Coin ၏ တစိတ်တပိုင်း

#### Java SE 8 
၂၀၁၁ခု ၈ လပိုင်း လက်ရှိ အခြေအနေတွင် အောက်ပါပြောင်းလည်းချက်များကို Java SE 8 တွင် ပါဝင်ရန် စီစဉ်ထားသည်။ JSR 337 ဖြင့် ဘာသာရပ်ပိုင်းဆိုင်ရာ အသုံးပြုပုံတို့ကို သက်မှတ်ပြီး၊ ၂၀၁၂ခု ၁၀လပိုင်း လောက်တွင် သတ်မှတ်နိုင်ရန် ရည်ရွယ်ထားသည်။ ၂၀၁၂ခုနှစ် အကုန်ပိုင်းလောက်တွင် ထုတ်ပြန်ရန် ရည်ရွယ်ထားသည်။ 
* Closure ကို ထည့်သွင်း အသုံးပြုမည် (Project Lambda, JSR 335)
* ဘာသာရပ် အဆင့်မှ Module ဖြစ်မြောက်ရေးကို ပံ့ပိုးမည် (Project Jigsaw, JSR 294)
* Type Anotation (JSR 308)
* Swing Application Framework (JSR 296)

## ထူးခြားချက်များ 
### အခြေခံ အယူအဆ 
Java အား တီထွင်ခဲ့ကြရာတွင် အခြေခံ အယူအဆ ၅ချက် ရှိခဲ့၏။

* Object Oriented သဘောတရား၏ အယူအဆကို ကျင့်သုံးရန်
* မတူညီသောOperating Systemများအပေါ်တွင်၊ တစ်ခုတည်းသောပရိုဂရမ်ဖြင့် အလုပ်လုပ်နိုင်စေရန်
* ကွန်ပျူတာကွန်ယက်ကို အသုံးပြုနိုင်သည့် ဖန်ရှင်များကို အခြေခံအနေဖြင့် ပြင်ဆင်ထားနိုင်ရန်
* အဝေးရောက် ကွန်ပျူတာအပေါ်ရှိ အသုံးချကုဒ်များကို လုံခြုံစွာ အသုံးချနိုင်ရန် ဒီဇိုင်းရေးသားနိုင်ရန်
* ရေးသားမှု့ကို လွယ်ကူစေရန်အတွက်၊ ရှိပြီးသား C++ များကဲ့သို့Object Oriented ပရိုဂရမ်မင်း ဘာသာရပ်များမှ ကောင်းသောအချက်များကို လက်ခံရယူရန်

ကွန်ယက်နည်းပညာနှင့် အဝေးရောက်ကွန်ပျူတာအသုံးချနည်းပညာများကို အသုံးပြုရာတွင် အခြေအနေအပေါ်တွင်မှုတည်၍၊ Javaပရိုဂရမ်မာများသည်၊CORBA နှင့် Internet Communications Engine၊ OSGi များကဲ့သို့ နည်းပညာများကိုလည်း အသုံးပြုကြသည်။

### Object Oriented Programming (Object-Based Programming) 
Java သည်ကလပ်စ်ကို အခြေခံသော Object Oriented ပရိုဂရမ်မင်း ဘာသာရပ် တစ်ခု ဖြစ်၏။ Java ပရိုဂရမ်သည် ကလပ်စ်များဖြင့် ဖွဲ့စည်းထားပြီး၊ ထိုကလပ်စ်များကို ပုံစံသွင်းထားသော Object များက အချင်းချင်း ဆက်သွယ်လုပ်ဆောင်ခြင်းအားဖြင့် Java ပရိုဂရမ်များကို အလုပ်လုပ်စေသည်။ Java ကလပ်စ်များသည် အမွေဆက်ခံရာတွင် တစ်ခုသော ကလပ်စ်မှသာ အမွေဆက်ခံနိုင်ပြီး၊ အင်တာဖေစ်ကို တစ်ခုမက ပံ့ပိုးပေးထားနိုင်သည်။ အမွေဆက်ခံခြင်း(Inheritance)ဆိုသည်မှာ ကလပ်စ်တစ်ခုကို တည်ဆောက်ရာတွင် အခြားကလပ်စ်တစ်ခုအား စူပါကလပ်စ်အနေဖြင့် သတ်မှတ်ထားပါက၊ စူပါကလပ်စ်က ပိုင်ဆိုင်သော အချက်အလက်များနှင့်၊ လုပ်ဆောင်ချက်များကို အသုံးပြုနိုင်ခြင်းကို ဆိုလိုသည်။ Java ဘာသာရပ်တွင် ကလပ်စ်တစ်ခုသည် စူပါကလပ်စ်တစ်ခုတည်းကိုသာ သက်မှတ်နိုင်သော်လည်း၊ အင်တာဖေစ်များကို တစ်ခုထက်မက ပံ့ပိုးပေးနိုင်သောကြောင့်၊ ကလပ်စ်တစ်ခုမှ အမျိုးမျိုးသော တာဝန်ကို ထမ်းဆောင်စေနိုင်ခြင်းဖြစ်၏။

Java တွင် အသုံးပြုသော အချက်အလက်များ၏ ပုံစံသည်၊ ပြင်းထန်သော ငြိမ်သက်ပုံစံ(Strong Static Type)ကို အသုံးပြုထားသည်။ ငြိမ်သက်သော အချက်အလက်ပုံစံကို အသုံးပြုထားခြင်းအားဖြင့် Java ကွန်ပိုင်လာနှင့် အသုံးပြု ပတ်ဝင်းကျင်(ပလက်ဖေါင်း)သည်၊ ပုံစံအချင်းချင်း၏ ဆက်စပ်မှု့မှန်ကန်ခြင်းကို စမ်းစစ်ခြင်းအားဖြင့်၊ ပရိုဂရမ်၏ မှန်ကန်စွာအလုပ်လုပ်နိုင်ခြင်းနှင့်၊ လုံခြုံစိတ်ချစွာ အလုပ်လုပ်နိုင်မှု့ကို အာမခံပေးနိုင်ခြင်းဖြစ်၏။

Java ၏ ဒေတာပုံစံသည်၊ ကိုးကားပုံစံ（reference type）နှင့် ကနဦးပုံစံ（primitive type）ဟု နှစ်မျိုးခွဲခြားနိုင်၏။ Java ၏ Object များသည် ကိုးကားပုံစံများဖြစ်ကြ၏။ Java တွင် အသုံးပြုနေသော အချက်အလက်များ၏ အခြေခံပုံစံသည်၊ ရိုးရှင်းသော အချက်အလက်（int, boolean, char ...) ပုံစံများဖြစ်ကြ၏။ Java ၏ စနစ်ကျလိုင်ဘရီသည်၊ အခြေခံပုံစံအချက်အလက်များကို Object အဖြစ် အသုံးပြုနိုင်စေရန် အတွက် အခြေခံအချက်အလက်များကို ခြုံငုံထားသော Wrapper Class များကို ပြင်ဆင်ထား၏။ Java（J2SE 5.0）အရောက်တွင် အချက်အလက်ပုံစံများ၏ ပြုပြင်ပြောင်းလည်းမှု့များကို ပြုလုပ်ထားသည်။

* Java ၏ ကွန်ပိုင်လာသည် ကနဦးပုံစံအချက်အလက်များနှင့် သူ၏ Wrapper Class အကြားတွင် အလိုအအလျှောက် ပုံစံပြောင်းပေးနိုင်သည် (Auto Boxing)။ ဤနည်းအားဖြင့် ကိုးကားပုံစံနှင့် ကနဦးပုံစံ ဟူ၍ အချက်အလက်ပုံစံ ၂မျိုး တည်ရှိခြင်းကြောင့် ဖြစ်ပေါ်စေသော Java ၏ ရှုပ်ထွေးမှု့များကို သက်သာစေနိုင်သည်။ 
* Genericsကို အသုံးပြုလာနိုင်၏။ ပရိုဂရမ်ထဲတွင် ပုံစံပြောင်းခြင်း အလုပ်ကို သက်သာစေပြီး၊ မလိုအပ်သော အမှားများကိုလည်း နည်းပါးစေနိုင်၏။ Generics သည် ယခင်ကတည်းကC++ ကဲ့သို့သော ပရိုဂရမ်မင်းဘာသာရပ်များတွင် အသုံးပြုနေခဲ့သော နည်းပညာတစ်ခုဖြစ်၏။ 

Java ၏ ထူးခြားချက်တစ်ခုဖြစ်သော Object Orientedသည်၊ ပရိုဂရမ်မင်းနှင့် ပရိုဂရမ်မင်းဘာသာရပ်ဖွဲ့စည်းပုံ များ၏ နည်းစနစ်တစ်မျိုးဖြစ်၏။ Java သည် Object Orientedပရိုဂရမ်မင်း ဘာသာရပ် တစ်မျိုးဖြစ်၏။ Object Oriented ဘာသာရပ်၏ အတွေးအခေါ်နှင့် ပတ်သက်ပြီး၊ အဓိပ္ပာယ်ဖွင့်ဆိုချက်ပေါင်း များစွာရှိကြ၏။ အများအားဖြင့် Object Orientedသဘောတရား၏ ထင်ရှားချက်ကိုသတ်မှတ်ရာတွင် ဆော့ဖ်ဝဲတွင် အသုံးပြုသော အမျိုးမျိုးသော အချက်အလက်များနှင့်ပတ်သက်၍၊ အချက်အလက်နှင့် ထိုအချက်အလက်များနှင့်ပတ်သက်သော လုပ်ဆောင်ချက်များကို တနေရာတည်းတွင် ပူးတွဲထားပြီး၊ ဆော့ဖ်ဝဲကို ဒီဇိုင်းရေးသားခြင်းပင်ဖြစ်၏။ ဤကဲ့သို့ အချက်အလက်နှင့် ကုဒ်တို့ကို ပူးတွဲထားသည်ကို၊ Objectဟုခေါ်ဆိုသည်။ Object ဆိုသည်မှာ၊ အနေအထားကို ဖော်ပြသော အချက်အလက်များနှင့်၊ လုပ်ဆောင်မှု့များကိုပြုလုပ်နိုင်သော ကုဒ်တို့က တနေရာတည်းမှာ စုစည်းထားသော အစုအဝေးတစ်ခုဟု သတ်မှတ်နိုင်ပေသည်။ 

Java တွင် Object တစ်ခု၏ဖွဲ့စည်းပုံကိုဖော်ပြသော မြေပုံကြမ်း(Blue Print) တစ်ခုဖြစ်သော ကလပ်စ်တွင် လုပ်ဆောင်ချက်များကို မက်သတ်ဟုခေါ်ဆိုပြီး၊ အချက်အလက်များကို Fields (Instance Variable) ဟုခေါ်ဆိုသည်။

Object Oriented မတိုင်မှီတွင် အသုံးပြုခဲ့သော နည်းပညာများတွင် အချက်အလက်နှင့် လုပ်ဆောင်ချက်များသည် တစ်နေရာစီတွင် တည်ရှိခဲ့ကြ၏။ 

* အချက်အလက်ဖွဲ့စည်းပုံကို ပြုပြင်ပြောင်းလည်းလိုပါက၊ ထိုအချက်အလက်ကို အသုံးပြုနေသော အခြားတနေရာတွင်ရှိသည့် လုပ်ဆောင်ချက်များကိုလည်း ပြုပြင်ပြောင်းလည်းရန်လိုအပ်သည်။
* တဖန် လုပ်ဆောင်ချက်ကို ပြောင်းလည်းပါက၊ အချက်အလက်ဖွဲ့စည်းပုံကိုလည်း ပြောင်းလည်းရန်လိုအပ်ခဲ့၏။ 

Object Oriented အတွေးအမြင်ကို အခြေပြုပြီး၊ ယနေ့တိုင် တနေရာစီတွင် တည်ရှိခဲ့သော အချက်အလက်နှင့် လုပ်ဆောင်ချက်များအား၊ Object အနေဖြင့် တစ်နေရာတည်းတွင် စဉ်းစားလာနိုင်ခြင်းသည်၊ ဆော့ဖ်ဝဲစစ္စတမ်များ၏ ဖွဲ့စည်းပုံကို ဒီဇိုင်းရေးသားရာတွင် လွန်စွာမှအစဉ်ပြေသော အခြေခံတစ်ခုဖြစ်လာခဲ့၏။ Object Oriented ကို အသုံးပြုခြင်းအားဖြင့် ပမာဏကြီးမားသော စစ္စတမ်များကို ရေးသားရာတွင် ဖြစ်ပေါ်လေ့ရှိသော အခက်အခဲများကို လျှော့ပါးစေခြင်း၊ ဆော့ဖ်ဝဲ၏ အရည်အသွေးကို မြင့်မားစေခြင်းနှင့် မအောင်မြင်သော ပရိုဂျက်များကို နည်းပါးစေခြင်း အစရှိသော အကျိုးများကို ရရှိစေနိုင်သည်။ 

Object Oriented ၏ အခြားသော ရည်မှန်းချက် တစ်ခုမှာ နေရာ အမျိုးမျိုးတွင် အသုံးပြုနိုင်သော Object များကို ရေးသားခြင်းအားဖြင့်၊ ပရိုဂျက်များအကြားတွင် ဆော့ဖ်ဝဲများကို ပြန်လည်အသုံးပြုနိုင်ခြင်း ပင်ဖြစ်၏။ ဥပမာအားဖြင့်၊ User Object တစ်ခုသည်၊ အခြားသော ပရိုဂျက်တစ်ခုတွင်လည်း တူညီစွာအသုံးပြုနိုင်မည် ဖြစ်၏။ ကြီးမားသော အဖွဲ့အစည်းကြီးများတွင်၊ ပရိုဂျက်အမျိုးမျိုးတည်ရှိကြပြီး ထိုပရိုဂျက်များတွင် အခြေခံ အလွှာတစ်ခုကို တူညီစွာအသုံးပြုရန်လိုအပ်ပါက ပြန်လည်အသုံးပြုနိုင်သော ဆော့ဖ်ဝဲများသည် လွန်စွာမှအရေးကြီးလာသည်။ ဤကဲ့သို့ နေရာအမျိုးမျိုးတွင် အသုံးပြုနိုင်သော အခြေခံ ဆော့ဖ်ဝဲများကို ပြင်ဆင်ထားခြင်းအားဖြင့်၊ ဆော့ဖ်ဝဲများကို ရေးသားရာတွင် ရေးသားရန်လိုအပ်သော အချိန်ကို လျှော့ပါးစေသည်။

### ပလက်ဖေါင်းအပေါ်တွင် မှီခိုမှု့ မရှိခြင်း 
Java ထူးခြားချက်နောက်တစ်ခုမှာ ပလက်ဖေါင်းတွင် မှီခိုမှု့မရှိခြင်း ဖြစ်ပြီး၊ Java ပရိုဂရမ်များသည် အမျိုးမျိုးသော ဟဒ်ဝဲနှင့်Operating Systemများအပေါ်တွင် အမြဲတမ်း တူညီစွာ လုပ်ဆောင်မှု့ကို ပြနိုင်သည်ဟု ဆိုလိုခြင်းဖြစ်၏။ Java ပရိုဂရမ်ကို တစ်ကြိမ်ရေးသားပြီးပါက၊ ထိုပရိုဂရမ်ဖြင့် အမျိုးမျိုးသော ပလက်ဖေါင်းအပေါ်တွင် အလုပ်လုပ်စေ နိုင်သည်။ ယခုနောက်ပိုင်းနှစ်များတွင် Java အသုံးပြုပတ်ဝင်းကျင်တွင် ပါဝင်သော Java ဒြပ်မဲ့စက် သည် အမြန်အလုပ်လုပ်စေနိုင်သည့် နည်းပညာကို ထည့်သွင်းလာနိုင်ခဲ့ပြီး၊ ပလက်ဖေါင်းကို မှီခိုသော သဘာဝပရိုဂရမ်မင်းဘာသာရပ် များကဲ့သို့ပင် လျင်မြန်စွာ အလုပ်လုပ်နိုင်လာခဲ့၏။

Java သည် ပလက်ဖေါင်းအပေါ်တွင် မှီခိုမှု့မရှိသည်မှာ အောက်ပါအကြောင်းများကြောင့် ဖြစ်၏။

* Java ကွန်ပိုင်လာအတော်များများသည်၊ Java ၏ ပင်ရင်းကုဒ်များကို ကြားခံဘာသာအနေဖြင့် ကွန်ပိုင်းလုပ်ပေးပါသည်။ ထို Java ကြားခံဘာသာစကား ကုဒ်များကို Java ဘိုက်ကုဒ်ဟုခေါ်ဆိုသည်။ ဘိုက်ကုဒ်များသည်Java ဒြပ်မဲ့စက်တွင်အလုပ်လုပ်နိုင်သောစက်ဘာသာအမိန့်ပေး စာကြောင်းများ ဖြင့် ဖွဲ့စည်းသားပါသည်။ 
* Java ပရိုဂရမ်ကို အလုပ်လုပ်စေရာတွင်၊ အထက်ပါ ဘိုက်ကုဒ်အား Java ဒြပ်မဲ့စက်အပေါ်တွင် အလုပ်လုပ်စေခြင်းဖြစ်၏။ Java ဒြပ်မဲ့စက်သည် အလုပ်လုပ်မည့် ဟဒ်ဝဲ၏ သဘာဝ ဆော့ဖ်ဝဲတစ်မျိုးဖြစ်ပြီး ဘိုက်ကုဒ်ဖြင့် ရေးသားထားသည်များကို နားလည်ရင်း အလုပ်လုပ်စေနိုင်ခြင်း ဖြစ်သည်။
* Java ပတ်ဝင်းကျင်တွင်၊ Java ဒြပ်မဲ့စက် အပြင် အခြားသော အခြေခံလိုင်ဘရီကိုလည်း ပြင်ဆင်ထား၏။ ထိုအခြေခံ လိုင်ဘရီကို အသုံးပြုခြင်းအားဖြင့် Java ပရိုဂရမ်များမှ ဂရပ်ဖစ်၊ Thread နှင့် Network အစရှိသည့် ဟဒ်ဝဲ၏ လုပ်ဆောင်ချက်များကို နည်းလမ်း တစ်ခုတည်းဖြင့် ရေးသားအသုံးပြု နိုင်သည်။ ပလက်ဖေါင်းအပေါ်တွင်မှုတည်၍ ပြောင်းလည်းရေးသားရန် မလိုအပ်ပေ။
* Java ဘိုက်ကုဒ်များကို အလုပ်လုပ်စေရာတွင် Java ဒြပ်မဲ့စက်သည်၊ ဟဒ်ဝဲ၏ သဘာဝ စက်ဘာသာကုဒ်များအဖြစ်ပြောင်းလည်းပြီး အလုပ်လုပ်စေသည်။ ဘိုက်ကုဒ်များဟ စက်ဘာသာကို ပြောင်းလည်းရာ၌ Java ဒြပ်မဲ့စက်သည် အင်တာပရက်တာကို၎င်း၊ Just In Time ကွန်ပိုင်းလာကို၎င်း သင့်တော်သလို အသုံးချပါသည်။ 

တဖန်GNU၏GNU Compiler for Java (GCJ) ကဲ့သို့ Java ပင်ရင်းကုဒ်များမှ တိုက်ရိုက် စက်ဘာသာအဖြစ် ပြောင်းလည်း ပေးနိုင်သော ကွန်ပိုင်လာများလည်း ရှိကြ၏။ သို့ရာတွင် ဤနည်းဖြင့် ကွန်ပိုင်းလုပ်ထားသော ပရိုဂရမ်များသည် ကွန်ပိုင်းလုပ်စဉ်က အသုံးပြုထားသော ပလက်ဖေါင်းများအပေါ်၌သာ အလုပ်လုပ်နိုင်သည်။ 

ယခုနောက်ပိုင်းနှစ်များတွင် Ruby（JRuby）နှင့် Groovy၊Jabaco၊Python（Jython） အစရှိသည့် ဘာသာစကားဖြင့် ရေးသားထားသော ပရိုဂရမ်များကို ဘိုက်ကုဒ်အဖြစ် ကွန်ပိုင်းလုပ်ခြင်းအားဖြင့် Java ဒြပ်မဲ့စက် အပေါ်တွင် အလုပ်လုပ်စေသည့် နည်းလမ်းများကိုလည်း တွေလာရသည်။

### အမှိုက်သိမ်းစနစ် 
Java သည် အမှိုက်သိမ်းစနစ်(Garbage Collection)ဟုခေါ်သော အလိုအလျှောက် မံမိုရီထိမ်းသိမ်းရေးစနစ်ကို ပြင်ဆင်ထားပြီး၊ ထိုစနစ်ကို အသုံးမပြုသော အခြားသော ဘာသာရပ်များ နှင့်နှိုင်းယှဉ်လျှင် ပရိုဂရမ်ရေးသားရာတွင် လွယ်ကူမြန်ဆန်ပြီး၊ စိတ်ချစွာအလုပ်လုပ်စေနိုင်၏။ နောက်ပိုင်းနှစ်များတွင် Java ၌ သက်တမ်းအလိုက် အမှိုက်သိမ်းစနစ် (Generational Garbage Collection) ဟုအမည်ရသော ပိုမို၍ အကျိုးရှိစွာအသုံးချနိုင်သော နည်းပညာအသစ်ကို ထည့်သွင်းအသုံးပြုလာခဲ့၏။ 

အမှိုက်သိမ်းစနစ်ကို အသုံးမပြုထားသော C++ နှင့် အခြားသော ဘာသာရပ်များကို အသုံးပြုရာတွင်၊ ပရိုဂရမ်မာမှ မံမိုရီကို တိုက်ရိုက် ထိမ်းသိမ်းရန်လိုအပ်ခဲ့၏။ OOP ကို အသုံးပြုသော ပရိုဂရမ်မာသည် ပုံမှန်အားဖြင့်၊ Java ကဲ့သို့ Heap မံမိုရီအတွင်းတွင် Object ကို နေရာချ၍ အသုံးပြုလေ့ရှိ၏။ ထိုမှတဆင့် Object ကို အသုံးမလိုတော့သောအခါ မဖြစ်မနေ ထို Object ကို ဖျက်စီးခြင်းအားဖြင့် Object က အသုံးပြုနေသော မံမိုရီကို ပြန်ပြီး လက်လွှတ်ပေးရန် လိုအပ်သည်။ မံမိုရီထိမ်းသိမ်းရေးတွင် အားနည်းသော ပရိုဂရမ်သည် မံမိုရီယိုစီးမှု့ကို ဖြစ်ပွားစေနိုင်၏။ မံမိုရီယိုစီးမှု့ဆိုသည်မှာ မသင့်တော်သော အမိန့်ပေးမှု့များကြောင့် အသုံးမလိုသော Object များမှ မံမိုရီကို ဆက်လက် နေရာယူထားပြီး၊ စုစည်းမိလာသောအခါ ပရိုဂရမ်မှ အသုံးပြုနိုင်သော မံမိုရီက တဖြည်းဖြည်းနည်းပါးလာခြင်းကို ဆိုလို၏။ ထို့အပြင် မံမိုရီကို လက်လွှတ်ချိန်တွင် အကြိမ်ကြိမ် Object ကို ဖျက်မိပါသဖြင့် ပရိုဂရမ်ကို မှားယွင်းစေပြီး ရုတ်တရက် အမှားဖြင့် ပြီးဆုံးသည့်အခါများလည်း ရှိတတ်၏။ 

အမှိုက်သိမ်းစနစ်ကိုအသုံးပြုခြင်း အားဖြင့် မလိုအပ်သော အမှားများကို ကြိုတင်ကာကွယ်နိုင်၏။ ပရိုဂရမ်မာသည် နှစ်သက်သည့်အချိန်တွင် Object ကို ခေါ်ယူ အသုံးပြုနိုင်ပြီး၊ Java ပတ်ဝင်းကျင်မှ ထို Object ၏ ဘဝစက်ဝိုင်း(Life Cycle)ကို ထိမ်းသိမ်းပေးနိုင်သည်။

Object တစ်ခုသည် အခြားသော Object ကို ကိုးကားနိုင်ပြီး၊ ကိုးကားထားသည့် Object ၏ မက်သတ်များကို ခေါ်ယူအသုံးပြုနိုင်၏။ အခြားသော Object တစ်ခုကို ကိုးကားခြင်းဆိုသည်မှာ Heap မံမိုရီ အပေါ်တွင်ရှိသော Object ၏ လိပ်စာကိုရည်ညွှန်းခြင်းကို ဆိုလို၏။

Object တစ်ခုအား ဘယ်နေရာကမှ ကိုးကားခြင်း မပြုတော့ပါက၊ Java ၏အမှိုက်သိမ်းစနစ်သည် အသုံးပြုရန်မလိုသော Object ကို အလိုအလျှောက် ဖျက်စီးပေးခြင်းအားဖြင့် အလိုအပ်ပဲနေရာယူထားသော မံမိုရီများကို ပြန်လည် လွှတ်ထုတ်ပေးနိုင်၏။ ဤသို့ ပြုလုပ်ပေးခြင်းအားဖြင့် မလိုအပ်ပဲ နေရာယူထားသော မံမိုရီများက တဖြည်းဖြည့် စုစည်းပြီး ဖြစ်ပေါ်တက်သော မံမိုရီယိုယွင်းမှု့မှ ကာကွယ်ပေးနိုင်သည်။

### ကွန်ယက်နည်းပညာ 
Java ၏ ပြည့်စုံသော လိုင်ဘရီကို အသုံးပြုခြင်းအားဖြင့်၊ ကွန်ပျူတာကွန်ယက်ကို အသုံးပြုသည့် ဆော့ဖ်ဝဲများကို လွယ်ကူစွာရေးသားနိုင်၏။ Java ၏ ကနဦးဗားရှင်းများမှစ၍၊ TCP/IP（IPv4） ကို အသုံးပြုနိုင်သော လိုင်ဘရီကို ပြင်ဆင်ထားပြီး၊ Network တွင် ဆော့ကက်ကို အသုံးပြုပြီး ဆက်သွယ်နိုင်သည့် ဆော့ဖ်ဝဲများကို လွယ်ကူစွာရေးသားနိုင်ခဲ့၏။ Java RMI ဒါမှမဟုတ် CORBA ၏ အဝေးရောက် Object (Remote Object)နည်းပညာကိုလည်း အခြေခံမှစ၍ အသုံးပြုနိုင်ခဲ့၏။ နောက်ပိုင်းနှစ်များတွင် အခြေခံ လိုင်ဘရီနှင့် မွန်းမံလိုင်ဘရီများကို အသုံးပြုခြင်းအားဖြင့် အမျိုးမျိုးသော ကွန်ယက် ပရိုတိုကောများကို အဆင့်မြင့်စွာ အသုံးပြုလာနိုင်ခဲ့၏။

* FTP
* HTTP
* SMTP/POP/IMAP,NNTP
* SSH, TLS/SSL
* SMB

လက်ရှိတွင် IPv6 ကို လည်းအသုံးပြုလာနိုင်ခဲ့၏။

### လုံခြုံရေး 
Java သည် ကနဦးဗားရှင်းများမှစ၍ အခြားကွန်ပျူတာတစ်ခုအပေါ်ရှိ အလုပ်လုပ်နိုင်သောကုဒ်（Java အပလတ်）ကို စိတ်ချစွာအသုံးချနိုင်ရန် ဒီဇိုင်းရေးသားခဲ့သည်။

* Java ဒြပ်မဲ့စက်၏ ဘိုက်ကုဒ်စစ်ဆေးရေးစနစ်ဖြင့်၊ Java အလုပ်လုပ်နိုင်သောကုဒ်များဖြစ်သည့် ဘိုက်ကုဒ်များ၏ ရေးသားပုံကို စစ်ဆေးနိုင်၏။
* Java ပတ်ဝင်းကျင်၏ ကလပ်စ်လုဒ်ဒါစနစ်ဖြင့်၊ ကလပ်စ်များကို ခေါ်ယူရာတွင် ထိုကလပ်စ်၏ သတင်းအချက်အလက်များကို စမ်းစစ်၍ စိတ်ချမှု့ကို စစ်ဆေးနိုင်၏။
* Java ပတ်ဝင်းကျင်၏လုံခြုံရေးမန်နေဂျာစနစ်ဖြင့်၊ Java အပလတ်သည် အသုံးပြုသူက ခွင့်ပြုထားသော နေရာများအပြင် အခြားသောပိုင်ဆိုင်မှု့များကို ခိုးဝှက်ဆက်သွယ်ခြင်းကို တားမြစ်ထားသည်။ 

Java ပတ်ဝင်းကျင်၏ မှုလသတ်မှတ်ချက်ဖြင့်၊ အဝေးရောက်ကွန်ပျူတာ တစ်ခုအပေါ်ရှိ အလုပ်လုပ်နိုင်သောကုဒ်များမှ၊ လိုကယ်ဖိုင်စစ္စတမ်ဆီသို့ ဆက်သွယ်ခြင်းနှင့်၊ လုဒ်လုပ်ခဲ့သော ဆာဗာအပြင် အခြားသောနေရာများနှင့် ဆက်သွယ်ခြင်းကို တားမြစ်ထားသည်။

## ရေးသားရန် အထောက်အကူပစ္စည်းကရိယာများ 
Java အပလီကေးရှင်းများကို ရေးသားရန်လိုအပ်သော အဓိက အထောက်အကူပြု ဆော့ဖ်ဝဲ ကရိယာများကို ဖော်ပြသွားပါမည်။ ဖော်ပြပါ ဆော့ဖ်ဝဲများအပြင် အခြားသော တူးများလည်းရှိပါဦးမိ။

* Java Development Kit（Java Development Kit、JDK） - Java အပလီကေးရှင်းတစ်ခုကို ရေးသားရန်လိုအပ်သောအခြေခံပတ်ဝင်းကျင်။
* စုပေါင်းပတ်ဝင်းကျင်（IDE） - အပလီကေးရှင်းများကို ရေးသားရန်လိုအပ်သော ဖန်ရှင်များကို စုစည်းထားသော ပလက်ဖေါင်းဖြစ်၏။
* Apache Ant - Java အပလီကေးရှင်းများကို တည်ဆောက်နိုင်သည့် အထောက်အကူပြု ကရိယာ။ Apache Software Foundation ၏ ပရိုဂျက်ဖြင့် ရေးသားခဲ့သော ဆော့ဖ်ဝဲ တစ်ခုဖြစ်၏။ ကွန်ပိုင်းလုပ်ခြင်း၊ ဗားရှင်းများကို ထိမ်းသိမ်းခြင်း နှင့် ပတ်သက်ပြီး၊ jar、javadoc များကို ဆောက်တည်ခြင်း၊ ဖိုင်များကို ကော်ပီကူခြင်း၊ နေရာရွှေ့ခြင်း၊ ဖျက်စီးပစ်ခြင်း၊ ပြောင်းလည်းခြင်း အစရှိသည့် လုပ်ငန်းများကို အလိုအလျှောက် ဆောင်ရွက်ပေးနိုင်သည်။ make နှင့် သဏ္ဌာန်တူသော ကရိယာတစ်မျိုးဖြစ်ပြီး၊ XML ဖြင့် တည်ဆောက်မည့် ဖွဲ့စည်းပုံကို ဖော်ပြထားသည်။ Java အပြင် ဘာသာရပ်များတွင်လည်း အသုံးပြုနိုင်သည်။
* Apache Maven - Java အပလီကေးရှင်း ပရိုဂျက်ထိမ်းသိမ်းရေး ကရိယာ တစ်ခုဖြစ်ပြီး Apache ဆော့ဖ်ဝဲ အစည်းအရုံးမှ တီထွင်ရေးသားထားခြင်းဖြစ်၏။
* JUnit - Java အပလီကေးရှင်း၏ တစ်စိတ်တပိုင်း စမ်းသပ်မှု့များကို ပြုလုပ်နိုင်သော Unit Test Framework ဖြစ်၏။ Unit Test များကို အလိုအလျှောက် စမ်းသပ်ပေးနိုင်ရန် အထောက်အကူပြုပါသည်။ xUnit ၏ အမျိုးအစားတစ်ခုဖြစ်၏။ Test Driven Developmentကို အထောက်အကူပြုပါသည်။ 

### စုပေါင်းပတ်ဝန်းကျင် (IDE)များ 
* Sun Java Studio Enterprise(2005/11/9 တွင် Open Source အဖြစ်ပြောင်းလဲ)။ Sun Java Studio Creator(2005/11/9 တွင် Open Source အဖြစ်ပြောင်းလဲ)။ Windows၊Linux၊Solaris၊Mac OS။NetBeansတွင် ဆန်း မိုက်ခရို စစ်စတမ်မှ အချို့သော ဖန်ရှင်များကို ဖြည့်စွက်ထားသည့် ပတ်ဝန်းကျင်ဖြစ်၏။
** Sun Java Studio Enterprise  Sun Java Studio Creator 
* NetBeans - Sun Java Studio Enterprise ၏Open Sourceထုတ် ဟုလည်းဆိုနိုင်၏။ Windows၊ Linux၊ Solaris နှင့် Mac OS တို့တွင် အသုံးပြုနိုင်သည်။
** NetBeans.org  NetBeans.jp 
* WebSphere Studio - IBM。Eclipse SDK ၏ အဆင့်မြင့် ပုံစံဟုလည်း ဆိုနိုင်၏။ WebSphere Application Server နှင့် ပူးတွဲထားသည်။ Windows၊ Linux၊ Solaris နှင့် Mac OS တို့တွင် အသီးသီး အသုံးပြုနိုင်သည်။
** WebSphere အထောက်အကူပြုကရိယာ
* Eclipse SDK - Eclipse အဖွဲ့အစည်း။ ယခင် IBM ၏လက်အောက်တွင် တည်ရှိခဲ့၏။ Web Sphere Studio ၏ Open Source ဟုလည်း သတ်မှတ်နိုင်၏။Windows၊ Linux၊ Solaris နှင့် Mac OS တို့တွင် အသီးသီး အသုံးပြုနိုင်သည်။
** eclipse.org 
* Borland JBuilder - Borland။ Foundation ထုတ်မှာ အခမဲ့ရရှိနင်ပါသည်။ Windows၊ Linux၊ Solaris၊ Mac OS တို့တွင် အသီးသီး အသုံးပြုနိုင်သည်။
** JBuilder 
* JDeveloper - အိုရကယ်။ Oracle Application Server နှင့် ပူးတွဲထား၏။ Windows၊ Linux၊ Solaris။ 2005/6/28 မှစ၍ အခမဲ့ ရယူနိုင်သည်။
** JDeveloper 
* Xcode - ပန်းသီး။Mac OS X တွင်ပါဝင်သော Development ပတ်ဝန်းကျင်ဖြစ်၏။
* Visual J++ - မိုက်ကရိုဆော့ဖ်။ Windows တွင်သာအသုံးပြုနိုင်၏။ မိုက်ကရိုဆော့ဖ်၏ မူပိုင်ပြောင်းလည်းမှုများကို ပြုလုပ်ထားပါသဖြင့် ဆန်း၏ Java နှင့် တူညီမှု့များမှာအလွန်နည်းပါသည်။

## Java နည်းပညာ၏ အခြေခံစနှစ်ချမှတ်မှု့များ 
: *အသေးစိတ်အား Java Community Process（JCP） တွင် လေ့လာနိုင်သည်*

လက်ရှိ Javaပလက်ဖေါင်း၏ အနာဂတ်ဗားရှင်းနှင့် ဖန်ရှင်များကို၊ JCP（Java Community Process）၏စနစ်ချမှတ်ရေး နည်းလမ်းများဖြင့် ပြုပြင်ရေးသားနေကြ၏။ JCP ၏ အဖွဲ့ဝင်ဖြစ်ခြင်းအားဖြင့် Javaနည်းပညာ၊ အနာဂတ်ဗားရှင်းနှင့် ဖန်ရှင်များကိုသတ်မှတ်ရာတွင် ပါဝင်နိုင်သည်။ JCP တွင်IBM၊ Borland၊ BEA Systems၊ Fujitu၊ Apache Software Foundation၊ HP အစရှိသော နယ်ပယ်အသီးသီးမှ ပါဝင်လျက် ရှိ၏။

JCP သည် Javaပလက်ဖေါင်းတွင် ထည့်သွင်းမည့် အသုံးပြုပုံနှင့် နည်းပညာများအား JSRs（Java Specification Requests） ဟုအမည်ရသော စာတမ်းများဖြင့် သတ်မှတ်လျက် ရှိ၏။

ပရိုဂရမ်မင်းဘာသာရပ် Java နှင့် Java Core API နှင့် ပတ်သက်သော JSRs အချို့ကို စုစည်းထားပါမည်။

* JSR 14 *Add Generic Types To The Java Programming Language*（J2SE 5.0）
* JSR 41 *A Simple Assertion Facility*（J2SE 1.4）
* JSR 47 *Logging API Specification*（J2SE 1.4）
* JSR 51 *New I/O APIs for the Java Platform*（J2SE 1.4）
* JSR 59 *J2SE Merlin Release Contents*（J2SE 1.4）
* JSR 121 *Application Isolation API*
* JSR 133 *Java Memory Model and Thread Specification Revision*（J2SE 5.0）
* JSR 166 *Concurrency Utilities*（J2SE 5.0）
* JSR 175 *A Metadata Facility for the Java Programming Language*（J2SE 5.0）
* JSR 176 *J2SE 5.0（Tiger）Release Contents*（J2SE 5.0）
* JSR 201 *Extending the Java Programming Language with Enumerations, Autoboxing, Enhanced for loops and Static Import*（J2SE 5.0）
* JSR 203 *More New I/O APIs for the Java Platform（"NIO.2"）*（Java SE 7）
* JSR 204 *Unicode Supplementary Character Support*（J2SE 5.0） - Unicode 3.1 Support
* JSR 244 *Java EE 5 Specification*（Java EE 5）
* JSR 270 *Java SE 6（"Mustang"）Release Contents*（Java SE 6）
* JSR 275 *Physical Units/Quantities Support（Java SE） 
* JSR 901 *Java Language Specification''（J2SE 5.0）

## ကိုးကား