JavaRush /Blog Jawa /Random-JV /Assignment lan Initialization in Java
Viacheslav
tingkat

Assignment lan Initialization in Java

Diterbitake ing grup

Pambuka

Tujuan utama program komputer yaiku ngolah data. Kanggo ngolah data sampeyan kudu nyimpen piye wae. Aku propose kanggo ngerti carane data disimpen.
Assignment lan Initialization in Java - 1

Variabel

Variabel minangka wadhah sing nyimpen data apa wae. Ayo ndeleng Tutorial resmi saka Oracle: Deklarasi Variabel Anggota . Miturut Tutorial iki, ana sawetara jinis variabel:
  • Fields : variabel sing diumumake ing kelas;
  • Variabel lokal : variabel ing metode utawa blok kode;
  • Parameter : variabel ing deklarasi metode (ing teken).
Kabeh variabel kudu duwe jinis variabel lan jeneng variabel.
  • Jinis variabel nuduhake data apa sing diwakili variabel (yaiku, data apa sing bisa disimpen). Kaya sing kita ngerteni, jinis variabel bisa dadi primitif (primitif primitif ) utawa obyek , non-primitif (Non-primitif). Kanthi variabel obyek, jinis kasebut diterangake dening kelas tartamtu.
  • Jeneng variabel kudu huruf cilik, ing kasus unta. Sampeyan bisa maca liyane babagan jeneng ing " Variables: Naming ".
Uga, yen variabel tingkat kelas, i.e. iku lapangan kelas, lan akses modifier bisa ditemtokake kanggo. Waca Ngontrol Akses menyang Anggota Kelas kanggo rincian liyane .

Deklarasi Variabel

Dadi, kita ngelingi apa variabel kasebut. Kanggo miwiti nggarap variabel, sampeyan kudu ngumumake. Pisanan, ayo goleki variabel lokal. Tinimbang IDE, kanggo penak, kita bakal nggunakake solusi online saka tutorialspoint: IDE online . Ayo mbukak program prasaja iki ing IDE online:
public class HelloWorld{
    public static void main(String []args){
        int number;
        System.out.println(number);
    }
}
Dadi, kaya sing sampeyan deleng, kita wis ngumumake variabel lokal kanthi jeneng numberlan jinis int. Kita menet tombol "Eksekusi" lan entuk kesalahan:
HelloWorld.java:5: error: variable number might not have been initialized
        System.out.println(number);
Ana apa? Kita ngumumake variabel, nanging ora miwiti nilai kasebut. Wigati dicathet yen kesalahan iki ora kedadeyan ing wektu eksekusi (yaiku, ora ing Runtime), nanging ing wektu kompilasi. Compiler pinter mriksa apa variabel lokal bakal diwiwiti sadurunge ngakses utawa ora. Mulane, statement ing ngisor iki tindakake saka iki:
  • Variabel lokal mung kudu diakses sawise diinisialisasi;
  • Variabel lokal ora duwe nilai standar;
  • Nilai variabel lokal dicenthang ing wektu kompilasi.
Dadi, kita dikandhani manawa variabel kasebut kudu diinisialisasi. Inisialisasi variabel yaiku menehi nilai menyang variabel. Ayo dadi ngerti apa iku lan apa.

Inisialisasi variabel lokal

Variabel wiwitan minangka salah sawijining topik sing paling angel ing Jawa, amarga ... raket banget karo nggarap memori, implementasi JVM, spesifikasi JVM lan liyane sing medeni lan angel. Nanging sampeyan bisa nyoba kanggo mangerteni ing paling kanggo sawetara ombone. Ayo dadi saka prasaja kanggo Komplek. Kanggo miwiti variabel, kita bakal nggunakake operator penugasan lan ngganti baris ing kode sadurunge:
int number = 2;
Ing pilihan iki, ora bakal ana kesalahan lan nilai bakal ditampilake ing layar. Apa sing kedadeyan ing kasus iki? Ayo dadi nyoba kanggo alesan. Yen kita pengin menehi nilai menyang variabel, mula kita pengin variabel kasebut nyimpen nilai. Pranyata regane kudu disimpen ing endi wae, nanging ing endi? Ing disk? Nanging iki alon banget lan bisa uga mbatesi kita. Pranyata mung siji-sijine papan sing bisa nyimpen data kanthi cepet lan efisien "ing kene lan saiki" yaiku memori. Iki tegese kita kudu nyedhiakke sawetara papan ing memori. Iki bener. Nalika variabel diinisialisasi, spasi bakal dialokasikan ing memori sing diparengake kanggo proses java ing ngendi program kita bakal dieksekusi. Memori sing dialokasikan kanggo proses java dipérang dadi sawetara wilayah utawa zona. Sapa wae sing bakal menehi papan gumantung saka jinis variabel sing diumumake. Memori dipérang dadi bagean ing ngisor iki: Heap, Stack lan Non-Heap . Ayo dadi miwiti karo tumpukan memori. Tumpukan dijarwakake minangka tumpukan (contone, tumpukan buku). Iki minangka struktur data LIFO (Last In, First Out). Yaiku, kaya tumpukan buku. Nalika kita nambah buku, kita sijine ing ndhuwur, lan nalika kita njupuk wong-wong mau, kita njupuk ndhuwur (yaiku sing ditambahake paling anyar). Dadi, kita miwiti program kita. Kaya sing kita ngerteni, program Java dieksekusi dening JVM, yaiku mesin virtual Java. JVM kudu ngerti ngendi eksekusi program kudu diwiwiti. Kanggo nindakake iki, kita ngumumake cara utama, sing diarani "titik entri". Kanggo eksekusi ing JVM, utas utama (Thread) digawe. Nalika thread digawe, diparengake tumpukan dhewe ing memori. Tumpukan iki kasusun saka pigura. Nalika saben cara anyar dieksekusi ing thread, pigura anyar bakal diparengake lan ditambahake ing ndhuwur tumpukan (kaya buku anyar ing tumpukan buku). Pigura iki bakal ngemot referensi kanggo obyek lan jinis primitif. Ya, ya, int kita bakal disimpen ing tumpukan, amarga ... int minangka jinis primitif. Sadurunge nyedhiyakake pigura, JVM kudu ngerti apa sing kudu disimpen ing kana. Mulane kita bakal nampa kesalahan "variabel bisa uga ora diinisialisasi", amarga yen ora diinisialisasi, JVM ora bakal bisa nyiyapake tumpukan kanggo kita. Mula, nalika nyusun program, kompiler sing cerdas bakal mbantu supaya ora nggawe kesalahan lan ngrusak kabeh. (!) Kanggo gamblang, Aku nyaranake artikel super-duper : " Java Stack lan Heap: Java Memory Alokasi Tutorial ". Iki pranala menyang video sing padha keren:
Sawise eksekusi cara rampung, pigura sing diparengake kanggo metode kasebut bakal dibusak saka tumpukan benang, lan bebarengan karo memori sing diparengake kanggo pigura iki kanthi kabeh data bakal dibusak.

Inisialisasi Variabel Objek Lokal

Ayo ganti kode maneh dadi luwih angel:
public class HelloWorld{

    private int number = 2;

    public static void main(String []args){
        HelloWorld object = new HelloWorld();
        System.out.println(object.number);
    }

}
Apa sing bakal kelakon ing kene? Ayo dirembug maneh. JVM ngerti saka ngendi kudu nglakokake program kasebut, yaiku. dheweke ndeleng cara utama. Iku nggawe thread, allocates memori kanggo (sawise kabeh, thread perlu kanggo nyimpen data needed kanggo eksekusi nang endi wae). Ing thread iki, pigura diparengake kanggo cara utama. Sabanjure kita nggawe obyek HelloWorld. Objek iki ora digawe maneh ing tumpukan, nanging ing tumpukan. Amarga obyek dudu jinis primitif, nanging jinis obyek. Lan tumpukan mung bakal nyimpen referensi kanggo obyek ing numpuk (kita kudu piye wae ngakses obyek iki). Sabanjure, ing tumpukan metode utama, pigura bakal dialokasikan kanggo nglakokake metode println. Sawise nglakokake cara utama, kabeh pigura bakal dirusak. Yen pigura wis numpes, kabeh data bakal numpes. Objek obyek ora bakal dirusak langsung. Kaping pisanan, referensi kasebut bakal dirusak lan ora ana sing bakal ngrujuk menyang obyek obyek maneh lan akses menyang obyek kasebut ing memori ora bakal bisa maneh. JVM pinter duwe mekanisme dhewe kanggo iki - kolektor sampah (pengumpul sampah utawa GC kanggo cendhak). Banjur mbusak saka obyek memori sing ora ana wong liya referensi. Proses iki maneh diterangake ing link diwenehi ndhuwur. Malah ana video kanthi panjelasan.

Bidang wiwitan

Inisialisasi kolom sing ditemtokake ing kelas ditindakake kanthi cara khusus gumantung apa lapangan kasebut statis utawa ora. Yen kolom nduweni tembung kunci statis, kolom iki nuduhake kelas kasebut dhewe, lan yen tembung statis ora ditemtokake, lapangan iki nuduhake conto kelas kasebut. Ayo ndeleng iki kanthi conto:
public class HelloWorld{
    private int number;
    private static int count;

    public static void main(String []args){
        HelloWorld object = new HelloWorld();
        System.out.println(object.number);
    }
}
Ing conto iki, lapangan diwiwiti ing wektu sing beda-beda. Kolom angka bakal diwiwiti sawise obyek kelas HelloWorld digawe. Nanging lapangan count bakal initialized nalika kelas dimuat dening mesin virtual Jawa. Isi kelas minangka topik sing kapisah, mula kita ora bakal nyampur ing kene. Iku mung worth ngerti sing variabel statis initialized nalika kelas dadi dikenal ing runtime. Ana liyane sing luwih penting ing kene, lan sampeyan wis ngelingi iki. Kita ora nemtokake nilai ing ngendi wae, nanging bisa digunakake. Lan tenan. Variabel sing kolom, yen ora duwe nilai sing ditemtokake, diinisialisasi kanthi nilai standar. Kanggo angka numerik iki 0 utawa 0.0 kanggo angka floating point. Kanggo boolean iki palsu. Lan kanggo kabeh variabel jinis obyek nilai bakal null (kita bakal pirembagan bab iki mengko). Iku misale jek, kenapa iki? Nanging amarga obyek digawe ing Heap (ing heap). Nggarap area iki ditindakake ing Runtime. Lan kita bisa miwiti variabel kasebut nalika runtime, ora kaya tumpukan, memori sing kudu disiapake sadurunge eksekusi. Iki carane memori dianggo ing Jawa. Nanging ana siji fitur liyane ing kene. Piece cilik iki ndemek macem-macem sudut memori. Nalika kita ngelingi, pigura diparengake ing memori Stack kanggo cara utama. Pigura iki nyimpen referensi kanggo obyek ing memori Heap. Nanging ing ngendi count disimpen banjur? Nalika kita ngelingi, variabel iki diwiwiti langsung, sadurunge obyek digawe ing tumpukan. Iki pitakonan tenan angel. Sadurunge Jawa 8, ana area memori sing diarani PERMGEN. Diwiwiti saka Jawa 8, wilayah iki wis diganti lan diarani METASPACE. Ateges, variabel statis minangka bagean saka definisi kelas, yaiku. metadata sawijining. Mulane, logis yen disimpen ing repositori metadata, METASPACE. MetaSpace kalebu wilayah memori Non-Heap sing padha lan minangka bagean saka iku. Sampeyan uga penting kanggo nimbang yen urutan variabel sing diumumake dianggep. Contone, ana kesalahan ing kode iki:
public class HelloWorld{

    private static int b = a;
    private static int a = 1;

    public static void main(String []args){
        System.out.println(b);
    }

}

Apa iku null

Kaya sing kasebut ing ndhuwur, variabel jinis obyek, yen minangka lapangan kelas, diinisialisasi dadi nilai standar lan nilai standar kasebut nol. Nanging apa null ing Jawa? Wangsulan: Bab ingkang pisanan kanggo elinga iku jinis primitif ora bisa null. Lan kabeh amarga null minangka referensi khusus sing ora ngrujuk ing ngendi wae, kanggo obyek apa wae. Mulane, mung variabel obyek bisa null. Ingkang kaping kalih ingkang kedah dipun mangertosi inggih menika null minangka referensi. Aku referensi uga duwe bobot. Ing topik iki, sampeyan bisa maca pitakonan ing stackoverflow: " Apa null variabel mbutuhake spasi ing memori ".

Pamblokiran Initialization

Nalika nimbang initialization saka variabel, iku bakal dadi dosa ora nimbang pamblokiran initialization. Katon kaya mangkene:
public class HelloWorld{

    static {
        System.out.println("static block");
    }

    {
        System.out.println("block");
    }

    public HelloWorld () {
        System.out.println("Constructor");
    }

    public static void main(String []args){
        HelloWorld obj = new HelloWorld();
    }

}
Urutan output bakal: blok statis, blok, Konstruktor. Minangka kita bisa ndeleng, pamblokiran initialization dieksekusi sadurunge konstruktor. Lan kadhangkala iki bisa dadi sarana initialization sing trep.

Kesimpulan

Muga-muga ringkesan singkat iki bisa menehi katrangan babagan cara kerjane lan kenapa. #Viacheslav
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION