Java dasturlash
_____________________
Java java - krossplatformali dasturlash tili. Java da qilingan dastur biror platformada ishlashi uchun usha platformada JVM - Java Virtual Machine bulishi kerak. Ya'ni javada boshqa kompilyatorlardan farqli ravishda kod mashina kodi ugirilmaydi , balki byte code larga ugiriladi, JVM esa bu byte code larni ishlash jarayonida mashina kodiga ugirib bajaradi. Oddiy qilib aytganda, masalan C++, Delphi yoki VB da dastur tuzib, so'ng uni kompilyasiya qilinganda (exe fayl yaratilganda), kod kompyuter prosessori (CPU) va OS buyruqlariga tarjima qilinadi, bu dasturni boshqa OS yoki boshqa turdagi platformaga (KPK, Mobil qurilma va boshq.) qo'yilganda u ishlamaydi, chunki prosessorlar va OS lar instruksiyalari bir-biriga tug'ri kelmaydi. Masalan, komp da "2 ta sonni qo'sh" degan buyruq kodi 15 bo'lsa (dastur exe formatga ugirilganda shunday kodlarga aylanadi), boshqa qurilmada (mobil qurilma, kpk, ..) bu buyruq kodi boshqacha bo'ladi, natijada dastur bu qurilmada ishlamaydi. Java da qilingan dastur esa mashina (CPU) kodlariga emas, uzining maxsus byte code lariga ugiriladi. JVM esa qaysi qurilmada bulsa dasturni ochib, undagi byte code larni usha qurilma buyruqlariga "tarjima" qilib turadi. Shuni hisobiga Java da qilingan dastur universal buladi. Hozirgi ishlab chiqilayotgan qurilmalarda JVM urnatilgan buladi. 
Java ga uxshagan byte code li til - Python. Faqat uni JVM ga uxshagan virtual mashinasi qurilmada oldindan urnatilgan bulmaydi (urnatib olish kerak, bulmasa python dasturlari ishlamaydi)
---------------------------
Java ni mobil qurilmalarga moslashtirilgan ixcham versiyasi - J2ME. Telefonimizdagi .jar fayllar shuni mevasidir.
---------------------------
Java texnologyasi o'ta sodda, xavfsizlikni yuqori darajada ta'minlab bera oladigan, kuchli, to'la obyektga yo'naltirilgan dasturlash tili bo'lib, muhit (platforma)ga bo'liq bo'lmagan holda ishlaydi.U bilan xatto eng kichik qurilmalarga xam dasturlar yozish mumkin.Java texnologiyasi to'laligicha Java Virtual Machine(JVM) ga asoslangan. JVM ning vazifasi tarjimonlik ya'ni, dastlab biz yozgan *.java fayl compilyator yordamida bayt kodga o'giriladi va JVM yordamida esa mashina tiliga o'giradi.
---------------------------
Java texnologiyalari:
Java SE - Java SE yoki Java Standart Edition, serverda, shaxsiy kompyuterda desktoplarda ishlovchi dasturlar, appletlar yaratish uchun ishlatiladi.Bu texnologiya yordamida yaratilgan dasturlar deyarli barcha Operatsion tizimlarda ishlay oladi(Windows NT, Macintosh,Linux va Solaris).Shu bilan birga JavaSE boshqa Java turlarining asosi hisoblanadi.
---------------------------
Java EE - Java Enterprise Edition, Java texnologiyalari orasida eng keng tarqalgan turi xisoblanib unda asosan serverda ishlovchi dasturlar yaratiladi, masalan ko'p foydalanuvchili web-saytlar yaratishda keng qo'llaniladi va asosan internetda ishlovchi dasturlarda qo'llaniladi.Java SE ni Java EE dan eng asosiy farqi Java EE o'z tarkibiga Java SE ni olibgina qolmay shu bilan birga ko'pgina boshqa qo'shimcha kutubxonalarni(odatda *.jar) ham o'z ichiga oladi ya'ni:Servlet,JavaMail, JSF(Java Server Face) va boshqa ko'pgina internetga asoslangan qoshimcha kutubxonalar.
---------------------------
Java ME - Java ME yoki Java Micro Edition Java SE ning ba'zi qismlarini o'z ichiga oladi, JavaME yordamida kichik qurilmalar uchun dastrular yozish mumkin, masalan, mobil telefon uchun o'yinlar, dasturlar yaratish mumkin.

---------------------------

Xulosa qilib aytganda Java ni o'rganish darajasi bo'yicha 3 ga bo'lishimiz mumkin:
Java yadrosi(Core Java) 
---------------------------
Rivojlangan Java(Advanced Java)
---------------------------
Java Enterprise Edition

---------------------------

Bundan kelib chiqib,Core Java va Advanced Java bu JavaSE ga tegishli bo'lgan bilimlar deydigan bo'lsak ,bu ikkovini o'rganmay JavaEE ga o'tish to'gri kelmaydi.Shuning uchun dastlab Core Java ni o'rganish kerak. 
---------------------------
J2me da dastur asosiy moduli quyidagicha buladi:
/* va */ ichida yozilgan va // bilan boshlanuvchi matnlar izoh, dastur ishiga ta'sir qilmaydi.
---------------------------
/*
 *  (c) 2012, DADSoft, U2B3K.
 *  UZExplorer
 *
 */
---------------------------

package UZExplorer;    
---------------------------
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
---------------------------
public class UZExplorer extends MIDlet
      implements CommandListener
      
{
    private Display display;
    private Main main;
    private boolean firstTime;

    public UZExplorer()
    {
        display = Display.getDisplay(this);
        firstTime = true;
    }

    protected void startApp()
    {
        if(firstTime)
        {
            main = new Main(this);
            firstTime = false;
            display.setCurrent(main);
        }
    }

    protected void destroyApp(boolean flag)
    {
    }

    protected void pauseApp()
    {
    }

    public void commandAction(Command c, Displayable d)
    {

    }

}

 Faraz qilaylik java programma bulagi:
...
String matn="(c) U2B3K, 2012";
g.drawString (matn, 0, 0, Graphics.TOP);
...
bu kod bulagi ekranni 0,0 koordinatasidan (yuqori chap burchak) boshlab "(c) U2B3K, 2012" so'zini yozadi. Huddi shu kod Menyu degan klass ichida bulsin. Endi dasturni kompilyasiya qilgandan sung bu kod Menyu.class degan fayl ichida buladi. Class fayl ichida yuqoridagi kabi kurinishda bulmaydi albatta. Ya'ni barcha buyruqlar byte-code larga aylangan holda buladi. Faqat matnlar uzgarmaydi. Agar biz bu Menyu.class faylini biror redaktorda ochib yuqoridagi "(c) U2B3K, 2012" matn urniga undan uzunroq matn yozsak, matnni ortiqcha qismi keyingi qatordagi, matnni chizish buyrug'i (g.drawString) ustiga yoziladi va natijada kod buziladi. Shu sababli class faylni bevosita to'g'ridan to'g'ri tekst (yoki hex) redaktorda uzgartirganda matnlardagi belgilar sonini bir xil qilib uzgartirish kk.
---------------------------
Class faylni uzgartirish un 2 xil usuldan foydalanish mumkin (yuqoridagi usul xisobmas):
1. Class redaktor. Bu dastur classdagi barcha matn, funksiyalar ruyhatini kursatadi. Biror matnni uzgartirib saqlansa dastur class faylni boshqatdan yig'adi. Funksiyalar, matnlar joylashuvi boshqatdan xisoblanib keyin saqlanadi.
2. Java dekompilyator. Bu dastur class fayldan (ya'ni byte-code lardan) dasturni Javada yozilgan holatini (post boshidagi kod) hosil qilib beradi. Uni xoxlagancha uzgartirib sung qaytadan class fayl yaratish mn.

Java kod (.java) va uni kompilyasiya qilinganda hosil buladigan byte-codelar to'plamini (.class fayl) -  hamma tushunadigan alifbo va morze alifbosiga uxshatish mumkin. To'g'ri tildagi (java kod) buyruq morze alifbosida (byte-kod) uzunroq va tushunarsizroq buladi.
Dekompilyator morze alifbosidan to'g'ri alifboga utkazib beruvchi dastur (qiyosiy).
---------------------------
1-turdagi dasturlardan biri - JavaBite
1-turdagi dasturlardan biri - JavaDecompiler
