private abstract array
Αυτό το σεμινάριο θα συζητήσει ειδικούς κατασκευαστές όπως Ιδιωτικός κατασκευαστής στην Java, Abstract, String, Array, Interface και Destructor στην Java:
Στο τελευταίο μας σεμινάριο για τους κατασκευαστές στην Java, μάθαμε τις σημαντικές έννοιες που σχετίζονται με τους κατασκευαστές στην Java. Συζητήσαμε πώς να δημιουργήσουμε έναν κατασκευαστή και τους κανόνες για τον ορισμό των κατασκευαστών, μαζί με τους τύπους των κατασκευαστών κ.λπ.
Μάθαμε επίσης υπερφόρτωση κατασκευαστή και αλυσίδα κατασκευαστή. Τώρα, ας συζητήσουμε συγκεκριμένους ειδικούς κατασκευαστές όπως έναν ιδιωτικό κατασκευαστή, έναν αφηρημένο κατασκευαστή και έναν κατασκευαστή συμβολοσειρών & συστοιχιών στην Java. Στη συνέχεια, θα συζητήσουμε τους καταστροφείς στην Java και τέλος, θα διερευνήσουμε τις διαφορές μεταξύ μεθόδου και κατασκευαστών.
=> Ρίξτε μια ματιά στον οδηγό για αρχάριους Java εδώ.
Ας ξεκινήσουμε με έναν ιδιωτικό κατασκευαστή στην Java.
Τι θα μάθετε:
- Ιδιωτικός κατασκευαστής στην Java
- Περίληψη Κατασκευαστής κλάσης στην Ιάβα
- Κατασκευαστής διασύνδεσης στην Java
- String Κατασκευαστής στην Java
- Κατασκευαστές συστοιχιών στην Ιάβα
- Καταστροφέας στην Ιάβα
- Μέθοδος Κατασκευαστή Vs στην Java
- Συχνές Ερωτήσεις
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Ιδιωτικός κατασκευαστής στην Java
Όπως αναφέρθηκε ήδη, οι κατασκευαστές στην κλάση Java μπορούν να έχουν προσδιοριστές πρόσβασης που σχετίζονται με αυτούς. Ως εκ τούτου, μπορούμε να έχουμε κατασκευαστές που είναι ιδιωτικοί ή δημόσιοι. Θα συζητήσουμε περισσότερα σχετικά με τους προσδιοριστές πρόσβασης στα επόμενα σεμινάρια μας και θα επανεξετάσουμε επίσης τους κατασκευαστές για άλλη μια φορά.
Όταν ο κατασκευαστής δηλώνεται ιδιωτικός, τότε μπορεί να έχει πρόσβαση μόνο μέσα στην τάξη. Δεν μπορεί να αποκτήσει πρόσβαση στις παράγωγες τάξεις μέσω άλλης κλάσης. Ως εκ τούτου, πρέπει να παρέχουμε μια δημόσια μέθοδο στην τάξη που έχει ιδιωτικούς κατασκευαστές, έτσι ώστε αυτή η δημόσια μέθοδος να έχει πρόσβαση στους ιδιωτικούς κατασκευαστές.
Στην Java, ο ιδιωτικός κατασκευαστής μπορεί να χρησιμοποιηθεί στις ακόλουθες περιπτώσεις:
- Για την εφαρμογή singletons.
- Για ενσωμάτωση εργοστασιακών μεθόδων.
- Για τάξεις που έχουν μόνο στατικά μέλη (μεταβλητές και μέθοδοι).
- Για τάξεις που έχουν τελικά μέλη. (σταθερές - τελικές και στατικές).
- Για να χρησιμοποιήσετε απαριθμήσεις ασφαλούς τύπου.
Για παράδειγμα , ας πάρουμε ένα μάθημα singleton. Μια τάξη singleton είναι μια τάξη που επιτρέπει μόνο ένα αντικείμενο κάθε φορά. Μπορούμε να χρησιμοποιήσουμε τον ιδιωτικό κατασκευαστή για να διασφαλίσουμε ότι δεν επιτρέπουμε να δημιουργηθούν περισσότερα από ένα αντικείμενα.
Το παρακάτω πρόγραμμα εφαρμόζει μια τάξη singleton χρησιμοποιώντας έναν ιδιωτικό κατασκευαστή.
class SingleTonClass { //Static Class Reference private static SingleTonClass obj=null; private SingleTonClass(){ System.out.println('SingleTonClass::Private constructor'); } public static SingleTonClass create_object(){ //logic to create only one instance if(obj==null){ obj= new SingleTonClass(); } return obj; } public void display(){ System.out.println('This is SingleTonClass !!'); } } class Main { public static void main(String args()){ //cannot call private constructor directly. SingleTonClass myobject= SingleTonClass.create_object(); myobject.display(); } }
Παραγωγή:
Το παραπάνω πρόγραμμα δηλώνει μια τάξη singleton. Παρέχουμε έναν ιδιωτικό κατασκευαστή και μια δημόσια μέθοδο πρόσβασης στον ιδιωτικό κατασκευαστή και επίσης περιορίζουμε τον αριθμό των αντικειμένων σε ένα μόνο. Στην κύρια μέθοδο, εκτελούμε τη δημόσια μέθοδο για να δημιουργήσουμε ένα αντικείμενο κατηγορίας singleton.
Περίληψη Κατασκευαστής κλάσης στην Ιάβα
Περίληψη κλάσης στην Java ως C ++ εκτός από ότι σε αντίθεση με το C ++, έχουμε μια αφηρημένη λέξη-κλειδί στην Java που χρησιμοποιείται για να δηλώσει μια αφηρημένη τάξη. Οι αφηρημένες τάξεις στην Java μπορούν να έχουν κατασκευαστές. Αυτός ο κατασκευαστής αφηρημένης κλάσης ονομάζεται όταν δημιουργούμε μια παρουσία μιας κλάσης υλοποίησης (που κληρονομεί την αφηρημένη τάξη).
Εξετάστε το ακόλουθο παράδειγμα ενός Abstract Class Κατασκευαστή.
//abstract class declaration abstract class BaseClass { BaseClass() { System.out.println('BaseClass::Constructor Called'); } abstract void func1(); } class DerivedClass extends BaseClass { DerivedClass() { System.out.println('DerivedClass::Constructor Called'); } void func1() { System.out.println('DerivedClass::func1() called'); } } class Main { public static void main(String args()) { DerivedClass d = new DerivedClass(); } }
Παραγωγή:
Δεδομένου ότι μια αφηρημένη τάξη δεν μπορεί να τεκμηριωθεί, κληρονομούμε μια νέα τάξη από αυτήν την αφηρημένη τάξη. Η έξοδος του προγράμματος δείχνει ότι όταν δημιουργούμε ένα αντικείμενο της παραγόμενης κλάσης στην κύρια μέθοδο, τότε ο κατασκευαστής της αφηρημένης κλάσης ονομάζεται πρώτος, ακολουθούμενος από έναν παράγωγο κατασκευαστή κλάσης.
Κατασκευαστής διασύνδεσης στην Java
Οι διεπαφές στην Java είναι παρόμοιες με τις αφηρημένες τάξεις. Οι διεπαφές είναι από προεπιλογή δημόσια περίληψη και έχουν μόνο πρωτότυπα μεθόδων. Αυτά τα πρωτότυπα εφαρμόζονται στη συνέχεια στην κλάση που εφαρμόζει τη διεπαφή.
Υπάρχουν λοιπόν κατασκευαστές στο Interfaces;
Όχι. Οι διεπαφές δεν έχουν κατασκευαστές. Αυτό συμβαίνει επειδή οι μέθοδοι σε μια διεπαφή είναι απλώς πρωτότυπα και ως εκ τούτου δεν χρειάζεται να δημιουργήσουμε ή να δημιουργήσουμε ένα αντικείμενο της διεπαφής, καθώς δεν πρόκειται να το χρησιμοποιήσουμε καθόλου. Ως εκ τούτου, δεν χρειάζεται να υπάρχει κατασκευαστής στη διεπαφή.
Το παρακάτω πρόγραμμα Java δείχνει αυτή τη λογική.
//interface declaration interface Interface_Add{ public int addNumbers(int num1, int num2); //method prototype } class AddClass implements Interface_Add{ public int addNumbers(int num1, int num2){ //method implementation int result= num1+num2; return result; } } class Main{ public static void main(String args()) { AddClass obj= new AddClass(); System.out.println('Result of addition:' + obj.addNumbers(2, 3)); } }
Παραγωγή:
Εδώ, έχουμε μια διεπαφή «Interface_add» με ένα πρωτότυπο «addNumbers» μιας μεθόδου. Στη συνέχεια, μια κλάση «AddClass» εφαρμόζει αυτήν τη διεπαφή και επίσης τη μέθοδο addNumbers.
Στην κύρια μέθοδο, η τάξη είναι instantiated και η μέθοδος εκτελείται. Ως εκ τούτου, δεν βλέπουμε καμία ανάγκη για έναν κατασκευαστή σε αυτήν τη διεπαφή.
Τώρα ας συζητήσουμε τους κατασκευαστές ορισμένων προϋπάρχουσων τάξεων σε Java-String και Array.
String Κατασκευαστής στην Java
Ένα αντικείμενο συμβολοσειράς στην Java μπορεί να οριστεί ως αντικείμενο της κλάσης String. Η κλάση συμβολοσειράς παρέχει τους ακόλουθους κατασκευαστές για τη δημιουργία και την προετοιμασία αντικειμένων String.
Μερικοί από αυτούς τους κατασκευαστές συζητούνται παρακάτω:
# 1) Συμβολοσειρά (byte () myArray)
Κατασκευάζει ένα νέο αντικείμενο String από έναν δεδομένο πίνακα byte. Για την κατασκευή του αντικειμένου συμβολοσειράς, χρησιμοποιεί το προεπιλεγμένο σύνολο χαρακτήρων πλατφόρμας και αποκωδικοποιεί τον πίνακα byte.
Παράδειγμα:
byte() myArray = {65, 66, 67, 68, 69}; String str =new String(myArray); //ABCDE
# 2) Συμβολοσειρά (byte () myArray, Charset char_set)
Αυτός ο κατασκευαστής κατασκευάζει ένα νέο αντικείμενο συμβολοσειράς χρησιμοποιώντας char_set που καθορίζεται στην κλήση κατασκευαστή για την αποκωδικοποίηση του πίνακα byte.
Παράδειγμα:
byte() myArray = {65, 66, 67, 68, 69}; Charset cs = Charset.defaultCharset(); String str = new String(myArray, cs); //ABCDE
# 3) Συμβολοσειρά (char () myArray)
Μπορούμε να κατασκευάσουμε ένα αντικείμενο String από έναν πίνακα χαρακτήρων.
Παράδειγμα:
ποια είναι η διαφορά μεταξύ qa και qc
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray); //Paris
# 4) String (char () myArray, int start_index, int count)
Εδώ, κατασκευάζουμε ένα αντικείμενο συμβολοσειράς από πίνακα χαρακτήρων συμπεριλαμβάνοντας τον αριθμό χαρακτήρων από το start_index έως το πλήθος.
Παράδειγμα:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray, 0,2); //Pa
# 5) Συμβολοσειρά (int () intArray, int offset, int count)
Ο παραπάνω κατασκευαστής εκχωρεί ένα νέο αντικείμενο String από έναν πίνακα int. Ο αριθμός των χαρακτήρων στη συμβολοσειρά καθορίζεται από το όφσετ και τον αριθμό.
Παράδειγμα:
int() intArray = {65, 69,73,79,85 }; String s = new String (intArray, 0, 5); //AEIOU
# 6) String (StringBuffer strbuffer)
Σε αυτόν τον κατασκευαστή, ένα νέο αντικείμενο String κατασκευάζεται από ένα αντικείμενο StringBuffer.
Παράδειγμα:
StringBuffer strbuffer = new StringBuffer('SoftwareTestingHelp'); String s = new String (strbuffer); //SoftwareTestingHelp
# 7) String (StringBuilder strbuilder)
Δημιουργείται ένα νέο αντικείμενο String χρησιμοποιώντας το αντικείμενο StringBuilder.
Παράδειγμα:
StringBuilder strbuilder = new StringBuilder('SoftwareTestingHelp'); String s = new String(strbuilder); // SoftwareTestingHelp
Κατασκευαστές συστοιχιών στην Ιάβα
Οι πίνακες χρησιμοποιούν κατασκευαστές για να δημιουργήσουν και να αρχικοποιήσουν πίνακες χρησιμοποιώντας μια νέα λέξη-κλειδί όπως φαίνεται παρακάτω.
int() data = new int(4);
Η παραπάνω δήλωση αρχικοποιεί έναν πίνακα 4 στοιχείων ως προεπιλογή 0.
Ένας άλλος τρόπος αρχικοποίησης του πίνακα δίνεται παρακάτω:
int() data = new int(){2, 4, 6, 8};
Καταστροφέας στην Ιάβα
Μέχρι τώρα έχουμε δει κατασκευαστές στην Java να χρησιμοποιούν τους οποίους δημιουργούμε ένα αντικείμενο. Όταν το αντικείμενο έχει τελειώσει με την εργασία του και δεν απαιτείται πλέον, τότε η μνήμη που έχει εκχωρηθεί στο αντικείμενο πρέπει να απελευθερωθεί ή να αφαιρεθεί. Αυτή είναι η δουλειά ενός καταστροφικού στην Java.
Στην Java, ο Συλλέκτης απορριμμάτων είναι υπεύθυνος για την απελευθέρωση αντικειμένων που δεν χρησιμοποιούνται πλέον ή έχουν καταστεί απρόσιτα. Οι καταστροφείς στην Java ονομάζονται οριστικοποιητές και δεν είναι ντετερμινιστικοί έτσι ώστε δεν μπορούμε να εγγυηθούμε ότι θα εκτελεστούν.
Στην Java, δεν χρειάζεται να ανησυχούμε για τους καταστροφείς. Οι καταστροφείς δεν έχουν συγκεκριμένη σύνταξη στην Java. Τα αντικείμενα καταστρέφονται αλλά δεν καλούμε καταστροφέα με τον τρόπο που το ονομάζουμε στο C ++.
Όπως αναφέρθηκε παραπάνω, η εργασία του καταστροφικού γίνεται από τον οριστικοποιητή που καλείται από τον Συλλέκτη απορριμάτων.
Η μέθοδος οριστικοποίησης στην Java παρουσιάζεται παρακάτω για την αναφορά σας.
class Main { public static void main(String() args) { Main dm = new Main(); //create object dm = null; System.gc(); //call garbage collector System.out.println('Main Mathod'); } protected void finalize() //finalize method { System.out.println('Finalize method :: object is garbage collected'); } }
Παραγωγή:
Στο παραπάνω πρόγραμμα, δημιουργούμε ένα αντικείμενο κλάσης. Ορίστε το σε μηδέν και στη συνέχεια καλούμε τη μέθοδο System.gc (). Τώρα αυτό το αντικείμενο δεν είναι προσβάσιμο και η μέθοδος οριστικοποίησης (destructor) καλείται σιωπηρά.
Μέθοδος Κατασκευαστή Vs στην Java
Ας παρουσιάσουμε μερικές από τις διαφορές μεταξύ ενός Κατασκευαστή και μιας μεθόδου στην Java.
Κατασκευαστές | Μέθοδος |
---|---|
Δημιουργεί ένα νέο αντικείμενο. | Λειτουργεί σε ήδη υπάρχον αντικείμενο. |
Ένα μπλοκ κώδικα που χρησιμοποιείται για την προετοιμασία των μελών της τάξης κατά τη δημιουργία ενός αντικειμένου. | Μια συλλογή από δηλώσεις προγραμματισμού που δημιουργούν ένα αποτέλεσμα κατά την εκτέλεση. |
Χρησιμοποιείται για την εκτέλεση αρχικοποίησης αντικειμένων. | Μια ακολουθία δηλώσεων που εκτελούνται από την Java. Μπορεί να περιέχει ή όχι μια ρουτίνα αρχικοποίησης. |
Επικαλέστηκε σιωπηρά. | Πρέπει να καλείται ρητά σε ένα πρόγραμμα. |
Επικαλέστηκε όταν δημιουργείται ένα νέο αντικείμενο χρησιμοποιώντας τη νέα λέξη-κλειδί. | Επικαλέστηκε όταν η μέθοδος καλείται από τον προγραμματιστή. |
Έχει το ίδιο όνομα με αυτό μιας τάξης. | Μπορεί να έχει οποιοδήποτε όνομα επιτρέπεται από τη γλώσσα προγραμματισμού. |
Δεν έχει τύπο επιστροφής. | Πρέπει να έχει τύπο επιστροφής ή αλλιώς θα πρέπει να επιστρέψει άκυρο. |
Μια τάξη μπορεί να έχει πολλούς υπερφορτωμένους κατασκευαστές. | Η τάξη μπορεί να έχει υπερφορτωθεί καθώς και ξεχωριστές μεθόδους. |
Δεν μπορεί να κληρονομηθεί από την παιδική τάξη. | Μπορεί να κληρονομηθεί από την παιδική τάξη και ακόμη και να παρακαμφθεί. |
Συχνές Ερωτήσεις
Q # 1) Μπορούν οι κατασκευαστές να είναι ιδιωτικοί;
Απάντηση: Ναί. Οι κατασκευαστές στην Java μπορεί να είναι ιδιωτικοί. Όλες οι τάξεις, συμπεριλαμβανομένων των αφηρημένων τάξεων, μπορούν να έχουν ιδιωτικούς κατασκευαστές. Χρησιμοποιώντας ιδιωτικούς κατασκευαστές μπορούμε να αποτρέψουμε την εγκατάσταση της κλάσης ή να περιορίσουμε τον αριθμό των αντικειμένων αυτής της κλάσης.
Q # 2) Ποια είναι η χρήση του Abstract Class Constructor στην Java;
Απάντηση: Ένας κατασκευαστής αφηρημένης τάξης καλείται όταν δημιουργούμε ένα αντικείμενο της παραγόμενης κλάσης που κληρονομεί την αφηρημένη τάξη. Εκτός εάν η αφηρημένη κλάση έχει κάποιες μεταβλητές μελών, μπορούμε να τις αρχικοποιήσουμε στον κατασκευαστή αφηρημένης τάξης.
Q # 3) Μπορούμε να ορίσουμε έναν Παραμερισμένο Κατασκευαστή σε μια κλάση Abstract στην Java;
Απάντηση: Ναι, μπορούμε να έχουμε έναν παραμετροποιημένο κατασκευαστή σε μια αφηρημένη τάξη. Στη συνέχεια, μπορούμε να καλέσουμε αυτόν τον κατασκευαστή από την παράγωγη κλάση που κληρονόμησε την αφηρημένη τάξη χρησιμοποιώντας super () κλήση.
Q # 4) Ξέρετε γιατί δεν υπάρχει καταστροφέας στην Java;
Απάντηση: Η Java δεν χρειάζεται να έχει συγκεκριμένο καταστροφέα καθώς έχει τον συλλέκτη απορριμμάτων. Αυτός ο συλλέκτης απορριμμάτων καταστρέφει τα αντικείμενα που δεν είναι προσβάσιμα και απελευθερώνει τη μνήμη. Μια μέθοδος που ονομάζεται οριστικοποίηση είναι επίσης ένα μέρος του συλλέκτη απορριμμάτων που εκτελεί μη-ντετερμινιστικά και εκτελεί τη λειτουργία του καταστροφικού όπως απελευθέρωση των πόρων κ.λπ.
Ε # 5) Μπορεί το Abstract Class να έχει σώμα;
Απάντηση: Όχι. Μια αφηρημένη τάξη μπορεί να έχει μόνο δηλώσεις μεθόδων και κατασκευαστές. Οι μέθοδοι του δεν εφαρμόζονται. Η τάξη που κληρονομεί αυτήν την αφηρημένη τάξη εφαρμόζει τις μεθόδους. Εκτός από το πρωτότυπο ή τις δηλώσεις, μπορεί επίσης να έχει προσδιοριστές ορατότητας ή πρόσβασης.
συμπέρασμα
Αυτό ολοκληρώνει το σεμινάριό μας για κατασκευαστές στην Java. Εδώ, έχουμε καλύψει τον ορισμό, τη δημιουργία και τους τύπους κατασκευαστών. Συζητήσαμε επίσης την υπερφόρτωση κατασκευαστή και την αλυσίδα κατασκευαστή στην Java.
Εξερευνήσαμε αφηρημένους και ιδιωτικούς κατασκευαστές στην Java και μάθαμε γιατί οι διεπαφές δεν μπορούν να έχουν κατασκευαστές. Είδαμε κατασκευαστές που χρησιμοποιούνται σε τάξεις array και String.
Συζητήσαμε επίσης καταστροφείς στην Java που εκτελούν τη λειτουργία αντίθετη από αυτήν των κατασκευαστών. Οι κατασκευαστές δημιουργούν αντικείμενα ενώ οι καταστροφείς καταστρέφουν αντικείμενα. Στην Java, η λειτουργία καταστροφής εκτελείται από τον οριστικοποιητή που εκτελείται κατά τη συλλογή απορριμμάτων.
Έτσι, δεν έχουμε συγκεκριμένο καταστροφέα στην Java και δεν χρειάζεται να το ορίσουμε με τον τρόπο που κάνουμε στο C ++. Συζητήσαμε επίσης τις διαφορές μεταξύ μεθόδου και κατασκευαστή. Γνωρίζουμε ότι ο κατασκευαστής δεν είναι ο ίδιος με μια μέθοδο, αλλά μπορούμε να δούμε τον κατασκευαστή ως μια ειδική μέθοδο.
=> Διαβάστε ολόκληρη τη σειρά Easy Java Training.
Συνιστώμενη ανάγνωση
- Java Constructor - Class, Copy και Default Κατασκευαστές
- C # Έννοιες: Κατασκευαστής, Καταστροφέας, Στατική Κατηγορία, Δομή & Enum
- Java String Array - Εκμάθηση με παραδείγματα κώδικα
- Java String με String Buffer και String Builder Tutorial
- Java String length () Μέθοδος με παραδείγματα
- Το Java String περιέχει () Μέθοδος Εκμάθησης με Παραδείγματα
- Ευρετήριο Java String της μεθόδου με παραδείγματα κώδικα
- Java String membandingkanTo Method Με Παραδείγματα Προγραμματισμού