CodeGym /Blog Jawa /Acak /Urutan tumindak sajrone nggawe obyek
John Squirrels
tingkat
San Francisco

Urutan tumindak sajrone nggawe obyek

Diterbitake ing grup
Hi! Pawulangan dina iki bakal cukup ... uh ... multifaceted :) ing pangertèn sing kita bakal nutupi macem-macem topik, nanging kabeh bakal ana hubungane karo proses nggawe obyek . Urutan tumindak sajrone nggawe obyek - 1Kita bakal njelasno saka awal nganti pungkasan: carane konstruktor disebut, carane lan ing urutan apa kothak (kalebu kolom statis) initialized, etc. Kita sadurunge wis ndemek sawetara saka TCTerms rembugan ing artikel, supaya sampeyan bisa Mirit liwat materi ing konstruktor kelas dhasar . Pisanan, ayo ngelingi carane obyek digawe. Sampeyan uga ngelingi carane proses iki katon saka sudut pandang pangembang: dheweke nggawe kelas, nulis new, lan kabeh wis siyap :) Ing kene kita bakal ngomong babagan apa sing kedadeyan ing komputer lan mesin Java nalika nulis, contone:

Cat cat = new Cat();
Kita wis ngomong babagan iki sadurunge, nanging mung yen kita bakal ngelingake sampeyan:
  • Pisanan, memori kanggo nyimpen obyek diparengake.
  • Sabanjure, mesin Java nggawe referensi kanggo obyek kasebut (ing kasus kita referensi yaiku Cat cat).
  • Pungkasan, variabel diinisialisasi lan konstruktor diarani (kita bakal nliti proses iki kanthi luwih rinci).
Kajaba iku, saka pawulangan babagan siklus urip obyek , sampeyan bisa uga ngelingi manawa obyek kasebut bisa tahan nganti paling ora ana siji referensi. Yen ora ana sing isih ana, barang kasebut dadi mangsa kanggo tukang sampah. Urutan tumindak sajrone nggawe obyek - 2Iki rong titik pisanan ngirim ora mundhakaken pitakonan khusus. Alokasi memori minangka proses sing prasaja, lan mung ana rong asil: ana memori utawa ora :) Lan nggawe link ora aneh. Nanging titik kaping telu nuduhake kabeh operasi sing ditindakake kanthi urutan sing ketat. Aku dudu penggemar cramming kanggo tes, nanging sampeyan kudu ngerti proses iki lan sampeyan kudu apal urutan operasi iki.. Nalika kita ngomong babagan proses nggawe obyek ing pawulangan sadurunge, sampeyan durung ngerti apa-apa babagan warisan, mula nerangake sawetara perkara dadi masalah. Saiki sampeyan ngerti akeh banget lan pungkasane bisa nimbang pitakonan iki kanthi lengkap :) Dadi titik katelu ujar " Pungkasan, variabel diinisialisasi lan konstruktor diarani. " Nanging apa urutane kabeh kedadeyan kasebut? Kanggo pangerten sing luwih apik, ayo nggawe rong kelas super prasaja - wong tuwa lan bocah:

public class Vehicle { 

   public static int vehicleCounter = 0; 

   private String description = "Vehicle"; 
   public Vehicle() { 
   } 

   public String getDescription() { 
       return description; 
   } 
} 

public class Truck extends Vehicle { 

   private static int truckCounter = 0; 

   private int yearOfManufacture; 
   private String model; 
   private int maxSpeed; 

   public Truck(int yearOfManufacture, String model, int maxSpeed) { 
       this.yearOfManufacture = yearOfManufacture; 
       this.model = model; 
       this.maxSpeed = maxSpeed; 

       Vehicle.vehicleCounter++; 
       truckCounter++; 
   } 
}
Kelas kasebut Truckminangka implementasi truk kanthi lapangan sing nuduhake taun, model, lan kecepatan maksimal. Saiki kita pengin nggawe siji obyek kasebut:

public class Main { 

   public static void main(String[] args) throws IOException { 

       Truck truck = new Truck(2017, "Scania S 500 4x2", 220); 
   } 
}
Kanggo mesin Java, proses bakal katon kaya iki:
  1. Babagan pisanan sing kedadeyan yaiku variabel statis kelas Vehiclediinisialisasi . Ya, aku ngomong Vehiclekelas, ora Truck. Variabel statis diinisialisasi sadurunge konstruktor diarani, lan iki diwiwiti ing kelas induk. Ayo dadi nyoba kanggo verifikasi iki. We nyetel vehicleCounterlapangan ing Vehiclekelas witjaksono kanggo 10 lan nyoba kanggo nampilake ing loro Vehiclelan Truckkonstruktor.

    
    public class Vehicle { 
    
       public static int vehicleCounter = 10; 
       private String description = "Vehicle"; 
    
       public Vehicle() { 
           System.out.println(vehicleCounter); 
       } 
    
       public String getDescription() { 
           return description; 
       } 
    } 
    
    public class Truck extends Vehicle { 
    
       private static int truckCount = 0;
    
       private int yearOfManufacture; 
       private String model; 
       private int maxSpeed; 
    
       public Truck(int yearOfManufacture, String model, int maxSpeed) { 
           System.out.println(vehicleCounter); 
           this.yearOfManufacture = yearOfManufacture; 
           this.model = model; 
           this.maxSpeed = maxSpeed; 
    
           Vehicle.vehicleCounter++; 
           truckCount++; 
       } 
    }
    

    Kita sengaja nyelehake statement println ing wiwitan konstruktor Truckkanggo mesthekake yen lapangan truk durung diwiwiti nalika vehicleCounterditampilake.

    Lan iki asile:

    
    10 
    10
    
  2. Sawise variabel statis kelas induk diinisialisasi, variabel statis kelas anak diinisialisasi. Ing kasus kita, iki minangka truckCounterlapangan kelas Truck.

    Ayo nindakake eksperimen liyane ing ngendi kita bakal nyoba nampilake nilai truckCountering Truckkonstruktor sadurunge kolom liyane diwiwiti:

    
    public class Truck extends Vehicle { 
    
       private static int truckCounter = 10; 
    
       private int yearOfManufacture; 
       private String model; 
       private int maxSpeed; 
    
       public Truck(int yearOfManufacture, String model, int maxSpeed) { 
           System.out.println(truckCounter); 
           this.yearOfManufacture = yearOfManufacture; 
           this.model = model; 
           this.maxSpeed = maxSpeed; 
    
           Vehicle.vehicleCounter++; 
           truckCounter++; 
       } 
    }
    

    Nalika sampeyan bisa ndeleng, nilai 10 wis ditugasake kanggo variabel statis nalika Truckkonstruktor diwiwiti.

  3. Iku isih durung wektu kanggo konstruktor! Initialization variabel terus. Variabel non-statis saka kelas induk diinisialisasi katelu. Kaya sing sampeyan ngerteni, warisan nggawe rumit proses nggawe obyek, nanging ora ana sing bisa ditindakake: Sampeyan mung kudu ngeling-eling sawetara perkara ing pemrograman :)

    Minangka eksperimen, kita bisa nemtokake sawetara nilai awal kanggo descriptionvariabel ing Vehiclekelas, lan banjur ngganti ing konstruktor.

    
    public class Vehicle { 
    
       public static int vehicleCounter = 10; 
    
       private String description = "Initial value of the description field"; 
    
       public Vehicle() { 
           System.out.println(description); 
           description = "Vehicle"; 
           System.out.println(description); 
       } 
    
       public String getDescription() { 
           return description; 
       } 
    }
    

    Ayo mbukak main()metode sing nggawe truk:

    
    public class Main { 
    
       public static void main(String[] args) throws IOException { 
    
           Truck truck = new Truck(2017, "Scania S 500 4x2", 220); 
       } 
    }
    

    Kita entuk asil ing ngisor iki:

    
    Initial value of the description field 
    Vehicle
    

    Iki mbuktekake yen nalika Vehiclekonstruktor wiwit descriptionlapangan wis diwenehi nilai.

  4. Akhire, iku wektu kanggo konstruktor! Luwih tepat, wektu kanggo konstruktor kelas dasar. Iki dijaluk ing langkah kaping papat saka proses nggawe obyek.

    Iki uga cukup gampang kanggo verifikasi. Ayo dadi nyoba outputting loro baris kanggo console: siji nang Vehiclekonstruktor kelas basa, liyane nang Truckkonstruktor. Kita kudu yakin manawa baris ing njero Vehicleditampilake dhisik:

    
    public Vehicle() { 
    
       System.out.println("Hello from the Vehicle constructor!"); 
    } 
    
    public Truck(int yearOfManufacture, String model, int maxSpeed) { 
    
       System.out.println("Hello from the Truck constructor!"); 
       this.yearOfManufacture = yearOfManufacture; 
       this.model = model; 
       this.maxSpeed = maxSpeed; 
    
       Vehicle.vehicleCounter++; 
       truckCounter++; 
    }
    

    Kita bakal mbukak main()cara kita lan ndeleng asil:

    
    Hello from the Vehicle constructor! 
    Hello from the Truck constructor! 
    

    Banget. Berarti ora kliru :) ayo maju.

  5. Saiki iku wektu kanggo initialization saka kothak non-statis saka kelas anak, IE Truckkelas kita. Bidang sing langsung ana ing kelas sing bakal ditindakake ora diwiwiti nganti langkah kaping lima! Ngageti, nanging bener :) Maneh, kita bakal nindakake mriksa prasaja - kaya karo kelas induk: kita bakal sawetara nilai awal kanggo variabel maxSpeedlan ing Truckkonstruktor kita bakal mriksa yen nilai kasebut ditugasake sadurunge konstruktor diwiwiti:

    
    public class Truck extends Vehicle { 
    
       private static int truckCounter = 10; 
    
       private int yearOfManufacture; 
       private String model; 
       private int maxSpeed = 150; 
    
       public Truck(int yearOfManufacture, String model, int maxSpeed) { 
    
           System.out.println("Initial value of maxSpeed = " + this.maxSpeed); 
           this.yearOfManufacture = yearOfManufacture; 
           this.model = model; 
           this.maxSpeed = maxSpeed; 
    
           Vehicle.vehicleCounter++; 
           truckCounter++; 
       } 
    }
    

    Output konsol:

    
    Initial value of maxSpeed = 150
    

    Nalika sampeyan bisa ndeleng,  nalika Truck konstruktor wiwit, maxSpeed wis padha karo 150!

  6. Konstruktor Truckkelas anak diarani.

    Lan mung ing titik iki, pungkasan kabeh, bakal konstruktor saka kelas kita instantiating bakal disebut!

    Mung ing langkah enem lapangan bakal diwenehi nilai sing kita pass minangka bantahan kanggo truk kita.

    Kaya sing sampeyan ngerteni, "mbangun" truk, yaiku proses nggawe obyek, ora gampang. Nanging kayane wis dipecah dadi bagean sing paling cilik :)

Urutan tumindak sajrone nggawe obyek - 3 Yagene penting banget kanggo ngerti proses iki kanthi apik? Mbayangno carane ora dikarepke asil nggawe obyek biasa yen sampeyan ora ngerti persis apa sing kedadeyan "ing hood" :) Saiki wektune bali menyang kursus lan ngrampungake sawetara tugas! Good luck lan ndeleng sampeyan rauh! :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION