Προγραμματισμός

Κατανόηση των κατασκευαστών

Το να πούμε ότι ένας κατασκευαστής είναι μια μέθοδος είναι σαν να λέμε ότι ο αυστραλιανός πλατύτυπος είναι ένα άλλο θηλαστικό. Για να κατανοήσετε τον πλατύπολο, είναι σημαντικό να γνωρίζετε πώς διαφέρει από άλλα θηλαστικά. Για να κατανοήσουμε τον κατασκευαστή, είναι εξίσου σημαντικό να κατανοήσουμε πώς διαφέρει από μια μέθοδο. Κάθε μαθητής της Java, ειδικά ένας που σπουδάζει για πιστοποίηση, πρέπει να γνωρίζει αυτές τις διαφορές. σε αυτό το άρθρο, θα τα εξηγήσω συγκεκριμένα. Ο Πίνακας 1, στο τέλος αυτού του άρθρου, συνοψίζει τις βασικές διακρίσεις κατασκευαστή / μεθόδου.

Σκοπός και λειτουργία

Οι κατασκευαστές έχουν έναν σκοπό στη ζωή: να δημιουργήσουν μια παρουσία μιας τάξης. Αυτό μπορεί επίσης να ονομαστεί δημιουργία αντικειμένου, όπως στο:

Platypus p1 = νέο Platypus (); 

Αντίθετα, ο σκοπός των μεθόδων είναι πολύ γενικότερος. Η βασική λειτουργία μιας μεθόδου είναι η εκτέλεση κώδικα Java.

Διαφορές υπογραφής

Οι κατασκευαστές και οι μέθοδοι διαφέρουν σε τρεις πτυχές της υπογραφής: τροποποιητές, τύπος επιστροφής και όνομα. Όπως οι μέθοδοι, οι κατασκευαστές μπορούν να έχουν οποιονδήποτε από τους τροποποιητές πρόσβασης: δημόσιος, προστατευμένος, ιδιωτικός ή κανένας (συχνά καλείται πακέτο ή φιλικός). Σε αντίθεση με τις μεθόδους, οι κατασκευαστές μπορούν να λάβουν μόνο τροποποιητές πρόσβασης. Επομένως, οι κατασκευαστές δεν μπορούν να είναι αφηρημένη, τελικός, ντόπιος, στατικός, ή συγχρονισμένος.

Οι τύποι επιστροφής είναι επίσης πολύ διαφορετικοί. Οι μέθοδοι μπορούν να έχουν οποιοδήποτε έγκυρο τύπο επιστροφής, ή κανένα τύπο επιστροφής, οπότε ο τύπος επιστροφής δίνεται ως κενός. Οι κατασκευαστές δεν έχουν τύπο επιστροφής, ούτε καν κενός.

Τέλος, όσον αφορά την υπογραφή, οι μέθοδοι και οι κατασκευαστές έχουν διαφορετικά ονόματα. Οι κατασκευαστές έχουν το ίδιο όνομα με την τάξη τους. κατά σύμβαση, οι μέθοδοι χρησιμοποιούν ονόματα διαφορετικά από το όνομα της τάξης. Εάν το πρόγραμμα Java ακολουθεί κανονικές συμβάσεις, οι μέθοδοι θα ξεκινήσουν με πεζά γράμματα, κατασκευαστές με κεφαλαίο γράμμα. Επίσης, τα ονόματα κατασκευαστών είναι συνήθως ουσιαστικά επειδή τα ονόματα τάξεων είναι συνήθως ουσιαστικά. Τα ονόματα μεθόδων συνήθως υποδηλώνουν ενέργειες.

Η χρήση του "αυτό"

Οι κατασκευαστές και οι μέθοδοι χρησιμοποιούν τη λέξη-κλειδί Αυτό πολύ διαφορετικά. Μια μέθοδος χρησιμοποιεί Αυτό να αναφέρεται στην παρουσία της κλάσης που εκτελεί τη μέθοδο. Οι στατικές μέθοδοι δεν χρησιμοποιούν Αυτό; δεν ανήκουν σε μια τάξη, έτσι Αυτό δεν θα είχε τίποτα να αναφερθεί. Οι στατικές μέθοδοι ανήκουν στην τάξη στο σύνολό της και όχι σε μια παρουσία. Οι κατασκευαστές χρησιμοποιούν Αυτό να αναφέρεται σε άλλο κατασκευαστή στην ίδια τάξη με διαφορετική λίστα παραμέτρων. Μελετήστε τον ακόλουθο κώδικα:

δημόσια τάξη Platypus {String name; Platypus (είσοδος συμβολοσειράς) {name = input; } Platypus () {αυτό ("John / Mary Doe"); } δημόσιος στατικός κενός κενός (String args []) {Platypus p1 = new Platypus ("digger"); Platypus p2 = νέο Platypus (); }} 

Στον κώδικα, υπάρχουν δύο κατασκευαστές. Το πρώτο παίρνει ένα Σειρά εισαγωγή για να ονομάσετε την παρουσία. Το δεύτερο, χωρίς παραμέτρους, καλεί τον πρώτο κατασκευαστή με το προεπιλεγμένο όνομα "John / Mary Doe".

Εάν ένας κατασκευαστής χρησιμοποιεί Αυτό, πρέπει να είναι στην πρώτη γραμμή του κατασκευαστή. Αν αγνοήσουμε αυτόν τον κανόνα, ο μεταγλωττιστής θα αντιδράσει.

Η χρήση του "σούπερ"

Οι μέθοδοι και οι κατασκευαστές χρησιμοποιούν και οι δύο σούπερ να αναφέρεται σε ένα superclass, αλλά με διαφορετικούς τρόπους. Χρήση μεθόδων σούπερ για να εκτελέσετε μια παράκαμψη μεθόδου στο superclass, όπως δείχνει το ακόλουθο παράδειγμα:

τάξη Mammal {void getBirthInfo () {System.out.println ("γεννήθηκε ζωντανός."); }} Η κλάση Platypus επεκτείνει το Mammal {void getBirthInfo () {System.out.println ("εκκόλαψη από αυγά"); System.out.print ("ένα θηλαστικό είναι συνήθως"); super.getBirthInfo (); }} 

Στο παραπάνω πρόγραμμα, η κλήση προς super.getBirthInfo () καλεί την παράκαμψη της μεθόδου του Θηλαστικό ζώο σούπερ γυαλί.

Οι κατασκευαστές χρησιμοποιούν σούπερ να επικαλεστεί τον κατασκευαστή του superclass. Εάν ένας κατασκευαστής χρησιμοποιεί σούπερ, πρέπει να το χρησιμοποιήσει στην πρώτη γραμμή. Διαφορετικά, ο μεταγλωττιστής θα παραπονεθεί. Ακολουθεί ένα παράδειγμα:

δημόσια κλάση SuperClassDemo {SuperClassDemo () {}} Η κλάση Child επεκτείνει το SuperClassDemo {Child () {super (); }} 

Στο παραπάνω παράδειγμα (και ασήμαντο!), Ο κατασκευαστής Παιδί() περιλαμβάνει μια κλήση προς σούπερ, που προκαλεί την τάξη SuperClassDemo να είναι instantiated, εκτός από το Παιδί τάξη.

Κωδικός που παρέχεται από μεταγλωττιστή

Ο νέος προγραμματιστής Java ενδέχεται να σκοντάψει όταν ο μεταγλωττιστής παρέχει αυτόματα κώδικα για κατασκευαστές. Αυτό συμβαίνει εάν γράφετε μια τάξη χωρίς κατασκευαστές. ο μεταγλωττιστής θα παρέχει αυτόματα έναν κατασκευαστή χωρίς ορίσματα. Έτσι, αν γράψετε:

Παράδειγμα δημόσιας τάξης {} 

είναι λειτουργικά ισοδύναμο με το γράψιμο:

δημόσιο μάθημα Παράδειγμα {Παράδειγμα () {}} 

Ο μεταγλωττιστής παρέχει επίσης αυτόματα κωδικό όταν δεν το χρησιμοποιείτε σούπερ (χρησιμοποιώντας μηδέν ή περισσότερες παραμέτρους) ως την πρώτη γραμμή ενός κατασκευαστή. Σε αυτήν την περίπτωση, ο υπολογιστής εισάγει αυτόματα σούπερ. Έτσι, αν γράψετε:

δημόσια τάξη TestConstructors {TestConstructors () {}} 

είναι λειτουργικά ισοδύναμο με το γράψιμο:

δημόσια τάξη TestConstructors {TestConstructors () { σούπερ; } } 

Ο αρχάριος με έντονα μάτια μπορεί να αναρωτιέται πώς το παραπάνω πρόγραμμα μπορεί να καλέσει τον κατασκευαστή της γονικής τάξης πότε TestConstructor δεν επεκτείνει καμία τάξη. Η απάντηση είναι ότι η Java επεκτείνει το Αντικείμενο τάξη όταν δεν επεκτείνετε ρητά μια τάξη. Ο μεταγλωττιστής παρέχει αυτόματα έναν κατασκευαστή χωρίς ορίσματα εάν κανένας κατασκευαστής δεν δηλώνεται ρητά και παρέχει αυτόματα ένα μη όρισμα σούπερ κλήση όταν ένας κατασκευαστής δεν έχει ρητή κλήση σούπερ. Επομένως, τα ακόλουθα δύο αποσπάσματα κώδικα είναι λειτουργικά ισοδύναμα:

Παράδειγμα δημόσιας τάξης {} 

και

δημόσιο μάθημα Παράδειγμα {Παράδειγμα () { σούπερ; } } 

Κληρονομία

Τι συμβαίνει με το ακόλουθο σενάριο; Ένας δικηγόρος διαβάζει τη διαθήκη του Μια τάξη. Μέλη του Τάξη η οικογένεια μαζεύεται γύρω από ένα μεγάλο τραπέζι συνεδριάσεων, μερικοί λυγίζουν απαλά. Ο δικηγόρος διαβάζει, "Εγώ, Μια τάξη, έχοντας υγιές μυαλό και σώμα, αφήστε όλους τους κατασκευαστές μου στα παιδιά μου. "

Το πρόβλημα είναι ότι οι κατασκευαστές δεν μπορούν να κληρονομηθούν. Ευτυχώς για το Τάξη παιδιά, θα κληρονομήσουν αυτόματα οποιαδήποτε από τις μεθόδους των γονιών τους, έτσι Τάξη τα παιδιά δεν θα γίνουν εντελώς άπορα.

Θυμηθείτε, οι μέθοδοι Java κληρονομούνται, οι κατασκευαστές δεν είναι. Εξετάστε την ακόλουθη τάξη:

δημόσια τάξη Παράδειγμα {public void sayHi {system.out.println ("Γεια"); } Παράδειγμα () {}} η δημόσια κλάση SubClass επεκτείνει το Παράδειγμα {} 

ο Υποδιαίρεση τάξεως η τάξη κληρονομεί αυτόματα το πες γεια μέθοδο που βρέθηκε στη μητρική τάξη. Ωστόσο, ο κατασκευαστής Παράδειγμα() δεν κληρονομείται από το Υποδιαίρεση τάξεως.

Συνοψίζοντας τις διαφορές

Ακριβώς όπως ο πλατύπολος διαφέρει από το τυπικό θηλαστικό, έτσι και οι κατασκευαστές διαφέρουν από τις μεθόδους. ειδικά στο σκοπό, την υπογραφή και τη χρήση του Αυτό και σούπερ. Επιπλέον, οι κατασκευαστές διαφέρουν ως προς τον κώδικα κληρονομιάς και τον μεταγλωττιστή. Η διατήρηση όλων αυτών των λεπτομερειών μπορεί να είναι μια δουλειά. Ο ακόλουθος πίνακας παρέχει μια βολική σύνοψη των σημαντικών σημείων. Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τους κατασκευαστές και τις μεθόδους στην ενότητα Πόροι παρακάτω.

Πίνακας 1. Διαφορές μεταξύ κατασκευαστών και μεθόδων

ΘέμαΚατασκευαστέςΜέθοδοι
ΣκοπόςΔημιουργήστε μια παρουσία μιας τάξηςΟμαδοποιήσεις Java
ΤροποποιητέςΔεν μπορεί αφηρημένη, τελικός, ντόπιος, στατικός, ή συγχρονισμένοςΜπορεί να είναι αφηρημένη, τελικός, ντόπιος, στατικός, ή συγχρονισμένος
Τύπος επιστροφήςΧωρίς τύπο επιστροφής, ούτε καν κενόςκενός ή έναν έγκυρο τύπο επιστροφής
ΟνομαΊδιο όνομα με την τάξη (το πρώτο γράμμα είναι κεφαλαίο από τη σύμβαση) - συνήθως ένα ουσιαστικόΟποιοδήποτε όνομα εκτός από την τάξη. Τα ονόματα της μεθόδου ξεκινούν με πεζά γράμματα κατά σύμβαση - συνήθως το όνομα μιας ενέργειας
ΑυτόΑναφέρεται σε άλλο κατασκευαστή στην ίδια τάξη. Εάν χρησιμοποιείται, πρέπει να είναι η πρώτη γραμμή του κατασκευαστήΑναφέρεται σε μια παρουσία της τάξης που κατέχει. Δεν μπορεί να χρησιμοποιηθεί με στατικές μεθόδους
σούπερΚαλεί τον κατασκευαστή της γονικής τάξης. Εάν χρησιμοποιείται, πρέπει να είναι η πρώτη γραμμή του κατασκευαστήΚαλεί μια παράκαμψη μεθόδου στη γονική τάξη
ΚληρονομίαΟι κατασκευαστές δεν κληρονομούνταιΟι μέθοδοι κληρονομούνται
Ο μεταγλωττιστής παρέχει αυτόματα έναν προεπιλεγμένο κατασκευαστήΕάν η τάξη δεν έχει κατασκευαστή, παρέχεται αυτόματα ένας κατασκευαστής χωρίς ορίσματαΔεν ισχύει
Ο μεταγλωττιστής παρέχει αυτόματα μια προεπιλεγμένη κλήση στον κατασκευαστή superclassΕάν ο κατασκευαστής δεν καλεί κανένα όρισμα μηδενικού ή περισσότερου ορίσματος σούπερ, μια κλήση χωρίς επιχειρήματα προς σούπερ είναι φτιαγμένοΔεν ισχύει
Ο Robert Nielsen είναι προγραμματιστής Sun 2 με πιστοποίηση Sun. Είναι κάτοχος μεταπτυχιακού τίτλου στην εκπαίδευση, ειδικεύεται σε υποβοηθούμενες από υπολογιστή οδηγίες και έχει διδάξει στον τομέα των υπολογιστών για αρκετά χρόνια. Έχει επίσης δημοσιεύσει άρθρα σχετικά με τον υπολογιστή σε διάφορα περιοδικά.

Μάθετε περισσότερα σχετικά με αυτό το θέμα

  • Ορισμένα βιβλία που καλύπτουν τα βασικά των κατασκευαστών και μεθόδων είναι
  • Ο πλήρης οδηγός πιστοποίησης μελέτης Java 2, Simon Roberts κ.ά. (Sybex, 2000) //www.amazon.com/exec/obidos/ASIN/0782128254/qid=969399182/sr=1-2/102-9220485-9634548
  • Java 2 (εξετάσεις Cram), Bill Brogden (The Coriolis Group, 1999):

    //www.amazon.com/exec/obidos/ASIN/1576102912/qid%3D969399279/102-9220485-9634548

  • Java με λίγα λόγια, Davis Flanagan (O'Reilly & Associates, 1999) // www.amazon.com/exec/obidos/ASIN/1565924878/o/qid=969399378/sr=2-1/102-9220485-9634548
  • Επισκεφθείτε την ιστοσελίδα της Sun Microsystems για περισσότερη κάλυψη μεθόδων και κατασκευαστών

    //java.sun.com/docs/books/tutorial/trailmap.html

  • Για περισσότερο περιεχόμενο Java για αρχάριους, διαβάστε JavaWorld 'νέο Java 101 σειρά στηλών

    //www.javaworld.com/javaworld/topicalindex/jw-ti-java101.html

Αυτή η ιστορία, "Κατανοώντας κατασκευαστές" δημοσιεύθηκε αρχικά από το JavaWorld

$config[zx-auto] not found$config[zx-overlay] not found