1. Variabel wiwitan

Kaya sing wis dingerteni, sampeyan bisa ngumumake sawetara variabel ing kelas sampeyan, lan ora mung ngumumake, nanging uga langsung miwiti kanthi nilai awal.

Lan variabel sing padha bisa diinisialisasi ing konstruktor uga. Iki tegese, ing teori, variabel kasebut bisa diwenehi nilai kaping pindho. Tuladha

Kode Cathetan
class Cat
{
   public String name;
   public int age = -1;

   public Cat(String name, int age)
   {
     this.name = name;
     this.age = age;
   }

   public Cat()
   {
     this.name = "Nameless";
   }
}



Variabel agediwenehi nilai awal




Nilai awal ditimpa


Variabel umur nyimpen nilai awal.
 Cat cat = new Cat("Whiskers", 2);
Iki diijini: konstruktor pisanan bakal diarani
 Cat cat = new Cat();
Iki diijini: konstruktor kapindho bakal diarani

Iki kedadeyan nalika Cat cat = new Cat("Whiskers", 2);dieksekusi:

  • A Catobyek digawe
  • Kabeh variabel conto diinisialisasi karo nilai awal
  • Konstruktor diarani lan kode kasebut dieksekusi.

Ing tembung liyane, variabel pisanan entuk nilai awal, lan mung banjur kode konstruktor dieksekusi.


2. Urutan initialization saka variabel ing kelas

Variabel ora mung diwiwiti sadurunge konstruktor mlaku - diinisialisasi kanthi urutan sing wis ditemtokake: urutan sing diumumake ing kelas.

Ayo goleki sawetara kode sing menarik:

Kode Cathetan
public class Solution
{
   public int a = b + c + 1;
   public int b = a + c + 2;
   public int c = a + b + 3;
}

Kode iki ora bakal dikompilasi, amarga nalika avariabel digawe durung ana b lan c variabel. Nanging sampeyan bisa nulis kode kaya ing ngisor iki - kode iki bakal dikompilasi lan bakal mlaku kanthi apik.

Kode Cathetan
public class Solution
{
   public int a;
   public int b = a + 2;
   public int c = a + b + 3;
}


0
0+2
0+2+3

Nanging elinga yen kode sampeyan kudu transparan kanggo pangembang liyane. Luwih becik ora nggunakake teknik kaya iki, amarga bisa ngganggu maca kode kasebut.

Ing kene kita kudu ngelingi yen sadurunge variabel diwenehi nilai, dheweke duwe nilai standar . Kanggo intjinis, iki nol.

Nalika JVM miwiti avariabel, mung bakal nemtokake nilai standar kanggo jinis int: 0.

Nalika tekan b, variabel kasebut wis dikenal lan duwe nilai, mula JVM bakal menehi nilai 2.

Lan nalika tekan cvariabel, variabel alan bwis diwiwiti, mula JVM bakal gampang ngetung nilai awal kanggo c: 0 + 2 + 3.

Yen sampeyan nggawe variabel ing sawijining metode, sampeyan ora bisa nggunakake kasebut kajaba sampeyan wis menehi nilai sadurunge. Nanging iki ora bener kanggo variabel kelas! Yen nilai dhisikan ora diutus kanggo variabel kelas, banjur diwenehi nilai standar.


3. Konstanta

Nalika kita lagi nganalisa carane obyek digawe, iku worth ndemek ing initialization saka konstanta, IE variabel karo modifier final.

Yen variabel duwe finalmodifier, mula kudu diwenehi nilai awal. Sampeyan wis ngerti iki, lan ora ana sing nggumunake.

Nanging apa sampeyan ora ngerti iku sampeyan ora kudu nemtokake nilai awal langsung yen sampeyan nemtokake ing konstruktor. Iki bakal bisa digunakake kanthi becik kanggo variabel pungkasan. Siji-sijine syarat yaiku yen sampeyan duwe sawetara konstruktor, mula variabel pungkasan kudu diwenehi nilai ing saben konstruktor.

Tuladha:

public class Cat
{
   public final int maxAge = 25;
   public final int maxWeight;

   public Cat (int weight)
   {
     this.maxWeight = weight; // Assign an initial value to the constant
   }
}


4. Kode ing konstruktor

Lan sawetara cathetan sing luwih penting babagan konstruktor. Mengko, nalika sampeyan terus sinau basa Jawa, sampeyan bakal nemokake bab kaya warisan, serialization, pangecualian, etc. Padha kabeh pengaruhe karya konstruktor kanggo werna-werna derajat. Ora ana gunane kanggo nyilem menyang topik kasebut saiki, nanging kita kudu paling ora ndemek.

Contone, iki minangka komentar penting babagan konstruktor. Ing teori, sampeyan bisa nulis kode apa wae kerumitan ing konstruktor. Nanging aja nindakake iki. Tuladha:

class FilePrinter
{
   public String content;

   public FilePrinter(String filename) throws Exception
   {
      FileInputStream input = new FileInputStream(filename);
      byte[] buffer = input.readAllBytes();
      this.content = new String(buffer);
   }

   public void printFile()
   {
      System.out.println(content);
   }
}






Mbukak file maca stream
Waca file menyang array bait
Simpen array bait minangka string




Nampilake isi file ing layar

Ing konstruktor kelas FilePrinter, kita langsung mbukak stream byte ing file lan maca isine. Iki minangka prilaku sing rumit lan bisa nyebabake kesalahan.

Apa yen ora ana file kasebut? Apa yen ana masalah nalika maca file kasebut? Apa yen gedhe banget?

Logika kompleks nyebabake kemungkinan kesalahan sing dhuwur lan tegese kode kasebut kudu nangani pangecualian kanthi bener.

Conto 1 - Serialisasi

Ing program Java standar, ana akeh kahanan sing dudu sampeyan sing nggawe obyek kelas sampeyan. Contone, umpamane sampeyan mutusake ngirim obyek liwat jaringan: ing kasus iki, mesin Java dhewe bakal ngowahi obyek sampeyan dadi sakumpulan bita, ngirim, lan nggawe maneh obyek saka set bita.

Nanging umpamane file sampeyan ora ana ing komputer liyane. Bakal ana kesalahan ing konstruktor, lan ora ana sing bakal nangani. Lan cukup bisa nyebabake program kasebut mandheg.

Conto 2 - Initializing kolom saka kelas

Yen konstruktor kelas sampeyan bisa mbuwang pangecualian sing dicenthang, yaiku ditandhani karo tembung kunci mbuwang, sampeyan kudu nyekel pangecualian sing dituduhake ing metode sing nggawe obyek sampeyan.

Nanging apa yen ora ana cara kasebut? Tuladha:

Kode  Cathetan
class Solution
{
   public FilePrinter reader = new FilePrinter("c:\\readme.txt");
}
Kode iki ora bakal kompilasi.

Konstruktor FilePrinterkelas bisa mbuwang pangecualian sing dicenthang , tegese sampeyan ora bisa nggawe FilePrinterobyek tanpa mbungkus ing blok coba. Lan blok nyoba-nyekel mung bisa ditulis ing cara



5. Konstruktor kelas dhasar

Ing wulangan sadurunge, kita ngrembug babagan warisan. Sayange, rembugan lengkap kita warisan lan OOP dilindhungi undhang-undhang kanggo tingkat darmabakti kanggo OOP, lan pusaka konstruktor wis cocog kanggo kita.

Yen kelas sampeyan entuk warisan kelas liyane, obyek saka kelas induk bakal dilebokake ing obyek kelas sampeyan. Apa maneh, kelas induk duwe variabel dhewe lan konstruktor dhewe.

Tegese iku penting banget kanggo sampeyan ngerti lan ngerti carane variabel diinisialisasi lan konstruktor diarani nalika kelas sampeyan duwe kelas induk lan sampeyan entuk warisan lan metode.

Kelas

Kepiye carane ngerti urutan variabel sing diinisialisasi lan konstruktor diarani? Ayo diwiwiti kanthi nulis kode kanggo rong kelas. Siji bakal oleh warisan liyane:

Kode Cathetan
class ParentClass
{
   public String a;
   public String b;

   public ParentClass()
   {
   }
}

class ChildClass extends ParentClass
{
   public String c;
   public String d;

   public ChildClass()
   {
   }
}










Kelas ChildClass marisi ParentClasskelas.

Kita kudu nemtokake urutan variabel sing diinisialisasi lan konstruktor diarani. Log bakal mbantu kita nindakake iki.

logging

Logging minangka proses ngrekam tumindak sing ditindakake dening program nalika mlaku, kanthi nulis menyang konsol utawa file.

Iku cukup prasaja kanggo nemtokake sing konstruktor wis disebut: ing awak konstruktor, nulis pesen kanggo console. Nanging kepiye sampeyan bisa ngerti yen variabel wis diinisialisasi?

Bener, iki uga ora angel banget: nulis cara khusus sing bakal ngasilake nilai sing digunakake kanggo nginisialisasi variabel, lan log initialization. Iki kaya kode kasebut:

Kode pungkasan

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

   public static String print(String text)
   {
      System.out.println(text);
      return text;
   }
}

class ParentClass
{
   public String a = Main.print("ParentClass.a");
   public String b = Main.print("ParentClass.b");

   public ParentClass()
   {
      Main.print("ParentClass.constructor");
   }
}

class ChildClass extends ParentClass
{
   public String c = Main.print("ChildClass.c");
   public String d = Main.print("ChildClass.d");

   public ChildClass()
   {
      Main.print("ChildClass.constructor");
   }
}




Nggawe ChildClassobyek


Cara iki nulis teks liwati menyang console lan uga ngasilake.





Nyatakake teks Tampilan ParentClasskelas

lan uga miwiti variabel kasebut.




Tulis pesen sing konstruktor wis disebut. Nglirwakake nilai bali.


Nyatakake teks Tampilan ChildClasskelas

lan uga miwiti variabel kasebut.




Tulis pesen sing konstruktor wis disebut. Nglirwakake nilai bali.

Yen sampeyan nindakake kode iki, teks bakal ditampilake ing layar kaya mangkene:

Output konsol saka metodeMain.print()
ParentClass.a
ParentClass.b
ParentClass.constructor
ChildClass.c
ChildClass.d
ChildClass.constructor

Supaya sampeyan bisa tansah mesthekake yen variabel kelas diwiwiti sadurunge konstruktor diarani. Kelas dhasar diwiwiti kanthi lengkap sadurunge wiwitan kelas sing diwarisake.