Κορυφαίες 367 βασικές ερωτήσεις συνέντευξης Java για το 2021


Αυτό το άρθρο θα σας καθοδηγήσει να προετοιμαστείτε για να αντιμετωπίσετε ερωτήσεις συνέντευξης που σχετίζονται με το Core Java. Καλύπτει όλα τα θέματα όπως τα βασικά της Java, οι έννοιες OOP, ο χειρισμός συμβολοσειρών, το multithreading, οι συλλογές κ.λπ.

Πίνακας περιεχομένων

1. Τι είναι η Java;

Η Java είναι η απλούστερη και η πιο συχνά χρησιμοποιούμενη γλώσσα προγραμματισμού που βασίζεται στην αντικειμενοστρεφή ιδέα προγραμματισμού. Υποστηρίζει cross-platform, multithreading και είναι ανεξάρτητη από την πλατφόρμα και ισχυρή. Η Sun Microsystems ανέπτυξε την Java το 1995 και αργότερα εξαγοράστηκε από την Oracle Systems.

2. Ποια είναι τα χαρακτηριστικά της γλώσσας προγραμματισμού Java;

Η Java διαθέτει τα παρακάτω χαρακτηριστικά:

  • Απλούς: Η Java είναι εύκολο να μάθει και δεν απαιτεί σύνθετες έννοιες προγραμματισμού όπως δείκτες ή πολλαπλή κληρονομιά.
  • Χωρίς πλατφόρμα: Η Java δεν εξαρτάται από καμία πλατφόρμα αφού ο κώδικας που καταρτίζουμε και εκτελούμε είναι ο ίδιος σε οποιαδήποτε το λειτουργικό σύστημα. Αυτό σημαίνει ότι μπορούμε να μεταγλωττίσουμε τον κώδικα σε ένα σύστημα και να τον εκτελέσουμε σε άλλο.
  • Αντικειμενοστραφής: Η Java χρησιμοποιεί μια συλλογή αντικειμένων μιας κλάσης για να εκτελέσει οποιαδήποτε λειτουργία και ακολουθεί αντικειμενοστρεφή μεθοδολογία.
  • Ασφαλής: Είναι εξαιρετικά ασφαλές, καθώς δεν δημιουργεί ελαττώματα ασφαλείας, όπως υπερχείλιση στοίβας κ.λπ. Αυτό συμβαίνει επειδή δεν χρησιμοποιεί την έννοια των δεικτών.
  • Εύρωστος: Η Java είναι ανθεκτική και αξιόπιστη καθώς εντοπίζει σφάλματα σε πρώιμο στάδιο και αποφεύγει ζητήματα όπως η συλλογή απορριμμάτων, η κατανομή μνήμης, χειρισμός εξαιρέσεωνΚ.λπ.
  • Πολυνηματικά: Υποστηρίζει την έννοια πολλαπλών νημάτων που σημαίνει ότι μπορούμε να εκτελέσουμε ταυτόχρονα 2 ή προγράμματα και, κατά συνέπεια, να χρησιμοποιήσουμε την CPU στο μέγιστο.
  • Υψηλή απόδοση: Η Java χρησιμοποιεί έναν μεταγλωττιστή Just-in-time και παρέχει έτσι υψηλή απόδοση.
  • Διανέμονται: Η Java υποστηρίζει κατανεμημένο προγραμματισμό που σημαίνει ότι μπορούμε να διανείμουμε προγράμματα java σε περισσότερα από 1 συστήματα που είναι συνδεδεμένα μέσω του Διαδικτύου. Μπορούμε να χρησιμοποιήσουμε λειτουργίες όπως EJB (Enterprise Java Bean) και RMI (Απομακρυσμένη μέθοδος επίκλησης) στην Java για την υποστήριξη κατανεμημένων λειτουργιών.
  • Δυναμικός: Η Java είναι πιο δυναμική όταν συγκρίνουμε με άλλες γλώσσες προγραμματισμού όπως C ή C ++. Αυτό συμβαίνει επειδή μπορεί να μεταφέρει μεγάλο αριθμό πληροφοριών χρόνου εκτέλεσης που μπορούμε να χρησιμοποιήσουμε για να επαληθεύσουμε την πρόσβαση στο αντικείμενο χρόνου εκτέλεσης.

3. Ποια είναι η διαφορά μεταξύ C ++ και Java;

Μέθοδος σύγκρισηςC + +Ιάβα
Ανεξαρτησία πλατφόρμαςΕξαρτάται από την πλατφόρμα. Πρέπει να καταρτιστεί σε κάθε πλατφόρμαΕίναι ανεξάρτητη από την πλατφόρμα. Μπορεί να μεταγλωττιστεί σε μια πλατφόρμα και να εκτελεστεί σε άλλη
Μεταγλωττιστής και διερμηνέαςΕίναι μια μεταγλωττισμένη γλώσσαΕίναι μια μεταγλωττισμένη και ερμηνευμένη γλώσσα
ΦορητότηταΔεν είναι φορητόΕίναι φορητό αφού η έξοδος bytecode μπορεί να εκτελεστεί σε οποιοδήποτε σύστημα
Διαχείριση μνήμηςΗ διαχείριση μνήμης είναι χειροκίνητηΗ διαχείριση μνήμης ελέγχεται από το σύστημα
Πολλαπλή κληρονομικότηταΥποστηρίζει πολλαπλή κληρονομιάΔεν υποστηρίζει πολλαπλή κληρονομιά. Αλλά μπορεί να επιτευχθεί μέσω διεπαφής
ΥπερφόρτωσηΥποστηρίζει υπερφόρτωση χειριστήΔεν υποστηρίζει υπερφόρτωση χειριστή
Εικονική λέξη-κλειδίΧρησιμοποιεί εικονική λέξη-κλειδί για να παρακάμψει τη λειτουργίαΔεν χρησιμοποιεί εικονική λέξη-κλειδί. Από προεπιλογή, όλες οι μη στατικές μέθοδοι παρακάμπτονται ή είναι εικονικές
δείκτεςΧρησιμοποιεί την έννοια του δείκτηΔεν έχει έννοια δείκτες
Σχόλια τεκμηρίωσηςΔεν υπάρχει υποστήριξη για σχόλια τεκμηρίωσηςΈχει ενσωματωμένη υποστήριξη για σχόλια τεκμηρίωσης (/ ** ... * /
Υποστήριξη νημάτωνΤο C ++ δεν διαθέτει ενσωματωμένο μηχανισμό νήματος και χρησιμοποιεί βιβλιοθήκες τρίτωνΗ Java διαθέτει ενσωματωμένη υποστήριξη νήματος χρησιμοποιώντας την κλάση "Νήμα"
Κλήση με αξία και Κλήση με αναφοράΥποστηρίζει τόσο Call by value όσο και Call by ReferenceΥποστηρίζει μόνο κλήση από αξία
Δομή και ΈνωσηΥποστηρίζει δομή και ένωσηΔεν υποστηρίζει δομές και ένωση
Χειριστής χωρίς υπογραφή δεξιάς αλλαγής >>>Δεν υποστηρίζει χειριστή δεξιάς αλλαγής χωρίς υπογραφήΥποστηρίζει μη υπογεγραμμένο χειριστή δεξιάς αλλαγής
Ιεραρχία ρίζαςΔεν υπάρχει ιεραρχία ρίζαςΈχει μια ιεραρχία μιας ρίζας που είναι java.lang.Object
Μηχανισμός εισαγωγήςΧρησιμοποιεί Cin και Cout για λειτουργίες εισόδου / εξόδουΧρησιμοποιεί System.in και System.out για λειτουργίες εισόδου / εξόδου.
Πήγαινε δήλωσηΥποστηρίζει τη δήλωση GotoΔεν υποστηρίζει τη δήλωση Goto
Πεδίο δεδομένων και λειτουργιώνΤα δεδομένα και οι λειτουργίες μπορούν να βρίσκονται εκτός της τάξηςΤα δεδομένα και οι συναρτήσεις πρέπει να υπάρχουν μέσα στην τάξη
Διαχείριση αντικειμένωνΧρησιμοποιεί νέα και διαγράφει για τη διαχείριση αντικειμένωνΧρησιμοποιεί αυτόματη συλλογή απορριμμάτων για τη διαχείριση αντικειμένων
εφαρμογέςΧρησιμοποιείται για προγραμματισμό συστήματοςΧρησιμοποιείται για προγραμματισμό εφαρμογών όπως εφαρμογές που βασίζονται σε παράθυρα, που βασίζονται στον Ιστό, για επιχειρήσεις και για κινητά.
ΤύποςΤόσο διαδικαστική όσο και αντικειμενοστραφής γλώσσα προγραμματισμούΕίναι μόνο αντικειμενοστρεφής γλώσσα προγραμματισμού
ΈννοιαΓράψτε μια φορά μεταγλώττιση οπουδήποτεΓράψτε μια φορά εκτελείται οπουδήποτε παντού
Τελεστής ανάλυσης πεδίου (: :)Υποστηρίζει χειριστή ανάλυσης πεδίουΔεν υποστηρίζει τον τελεστή ανάλυσης εύρους
βιβλιοθήκεςΥποστηρίζει λειτουργικότητα χαμηλού επιπέδουΥποστηρίζει λειτουργικότητα υψηλού επιπέδου
ΚαταστροφέαςΥποστηρίζει καταστροφέςΔεν υποστηρίζει καταστροφές
Χειρισμός σφαλμάτων χρόνου εκτέλεσηςΟ προγραμματιστής είναι υπεύθυνος για τον χειρισμό σφαλμάτων χρόνου εκτέλεσης και εξαιρέσεωνΗ JVM είναι υπεύθυνη για σφάλματα και εξαιρέσεις χρόνου εκτέλεσης

4. Τι είναι η εικονική μηχανή Java (JVM);

JVM or Εικονική μηχανή Java είναι μια εικονική μηχανή που εκτελεί το πρόγραμμα java. Εκτελεί τον bytecode που δημιουργείται από τον μεταγλωττιστή κατά την κατάρτιση του προγράμματος. Το JVM ενεργεί σαν μηχανή χρόνου εκτέλεσης που εκτελεί το πρόγραμμα καλώντας την κύρια μέθοδο. Η έξοδος που παράγει το JVM μετά την εκτέλεση του bytecode είναι η ίδια σε όλα τα λειτουργικά συστήματα. Αυτός είναι ο λόγος για τον οποίο η Java είναι ανεξάρτητη από την πλατφόρμα.

5. Τι σημαίνουν οι ορολογίες JDK και JRE;

JDK μέσα Κιτ ανάπτυξης Java που περιέχει πολλά στοιχεία όπως JRE, μεταγλωττιστές, διάφορα εργαλεία όπως JavaDoc, JavaDebugger, βιβλιοθήκες κ.λπ. Είναι υποχρεωτικό να εγκαταστήσετε το JDK στα συστήματά μας για να μεταγλωττίσετε και να εκτελέσετε οποιαδήποτε προγράμματα java.

JRE μέσα Java Runtime Environment που είναι μέρος του JDK που χρησιμοποιείται για την εκτέλεση οποιουδήποτε προγράμματος java. Περιλαμβάνει επίσης πρόσθετα προγράμματος περιήγησης, υποστήριξη μικροεφαρμογών και JVM.

6. Ποιοι είναι οι διαφορετικοί τύποι περιοχών μνήμης που διατίθενται από το JVM;

Το JVM περιέχει 5 διαφορετικές περιοχές μνήμης όπως δίνεται παρακάτω:

  • Περιοχή κλάσης (Μέθοδος): Αποθηκεύει όλα τα δεδομένα που σχετίζονται με την κλάση, όπως μεταβλητές, μεθόδους, συνεχή συγκέντρωση χρόνου εκτέλεσης.
  • Σωρός: Εκχωρεί μνήμη για αντικείμενα κατά το χρόνο εκτέλεσης.
  • Στοίβα: Αποθηκεύει το αποτέλεσμα της εκτέλεσης μεθόδου, όπως η επιστροφή της τιμής ή της τιμής που χρησιμοποιείται για τη δυναμική σύνδεση. Το Stack αποθηκεύει επίσης καρέ και κάθε νήμα έχει μια ιδιωτική στοίβα JVM.
  • Μητρώο προγράμματος: Περιέχει τη διεύθυνση των οδηγιών JVM της μεθόδου.
  • Εγγενής στοίβα μεθόδου: Περιέχει όλες τις εγγενείς μεθόδους που χρησιμοποιούνται στην εφαρμογή.

7. Τι είναι ένας μεταγλωττιστής JIT;

JIT σημαίνει Πάνω στην ώρα. Είναι ένας μεταγλωττιστής που είναι μέρος του JRE. Συγκεντρώνει όλα τα bytecode που έχουν παρόμοια λειτουργικότητα μαζί και έτσι μειώνει το χρόνο σύνταξης. Ως εκ τούτου, ο μεταγλωττιστής JIT υποστηρίζει βελτιστοποίηση απόδοσης.

8. Τι είναι η πλατφόρμα;

Η πλατφόρμα είναι ένας συνδυασμός περιβάλλοντος υλικού και λογισμικού που βοηθά στην εκτέλεση λογισμικού. Η Java έχει το δικό της περιβάλλον που ονομάζεται JRE (Java Runtime Environment)

9. Ποια είναι η διαφορά μεταξύ πλατφόρμας Java και άλλων πλατφορμών;

  • Η Java είναι μια πλατφόρμα που βασίζεται σε λογισμικό, ενώ άλλες μπορεί να είναι λογισμικό υλικού ή μόνο με βάση υλικό.
  • Η Java εκτελείται πάνω από άλλες πλατφόρμες υλικού ενώ άλλες μπορούν να εκτελούνται μόνο σε στοιχεία που βασίζονται σε υλικό.
  • Μπορούμε να εκτελέσουμε κώδικα Java σε οποιοδήποτε λειτουργικό σύστημα ενώ άλλες πλατφόρμες δεν έχουν αυτήν την ικανότητα.
  • Η Java έχει το δικό της περιβάλλον (JRE) και JVM, ενώ άλλες πλατφόρμες δεν έχουν αυτήν τη λειτουργικότητα.

10. Τι σημαίνει «Γράψτε μία φορά και Εκτελέστε οπουδήποτε»;

Η Java είναι μια γλώσσα προγραμματισμού ανεξάρτητη από την πλατφόρμα όπου μπορούμε να γράψουμε κώδικα Java και να συντάξουμε σε μια πλατφόρμα και να τον εκτελέσουμε σε άλλη πλατφόρμα. Μπορούμε να εκτελέσουμε αυτό το πρόγραμμα java σε οποιοδήποτε λειτουργικό σύστημα, δεδομένου ότι η έξοδος της συλλογής που είναι ο bytecode δεν είναι συγκεκριμένη για την πλατφόρμα.

11. Τι είναι ένας φορτωτής κατηγορίας;

Το Java classloader είναι μέρος του JRE(Περιβάλλον Java Runtime) που φορτώνει τα αρχεία κλάσης στο JVM(Java Virtual Machine) όποτε απαιτείται από την εφαρμογή. Ένας απλός φορτωτής κλάσης δεν φορτώνει όλες τις τάξεις. Με βάση τον τύπο της κλάσης, ο αντίστοιχος φορτωτής κλάσης φορτώνει τα αρχεία τάξης όποτε χρειάζεται.

Ακολουθούν οι διαφορετικοί τύποι φορτωτών Java:

  • Φορτωτής κλάσης Bootstrap: Αυτό είναι το πρώτο classloader που φορτώνει όλα τα αρχεία από την τοποθεσία rt.jar. Ονομάζεται επίσης το πρωταρχικός class loader που είναι ο γονέας όλων των άλλων classloaders.
  • Φορτωτής κλάσης επέκτασης: Αυτή είναι η θυγατρική κατηγορία του bootstrap class loader που φορτώνει τις επεκτάσεις των βασικών κλάσεων java από τον κατάλογο Extensions jre / lib / ext.
  • Φορτωτής κλάσης συστήματος: Ονομάζεται επίσης ως Εφαρμογή class loader που φορτώνει τάξεις τύπου εφαρμογής ή αρχεία κλάσης από το CLASSPATH μεταβλητός. Είναι η υποκατηγορία του φορτωτή κατηγορίας Extension.

12. Μπορεί να αποθηκευτεί ένα όνομα αρχείου java ως κενό αρχείο .java;

Ναι, μπορούμε να αποθηκεύσουμε ένα αρχείο java χωρίς όνομα αρχείου χρησιμοποιώντας μόνο .java. Για να μεταγλωττίσουμε, χρησιμοποιούμε την εντολή javac .java και για την εκτέλεση, χρησιμοποιούμε την εντολή java classname.

13. Οι λέξεις-κλειδιά διαγραφής, μηδενικής, επόμενης, κύριας και εξόδου στην Java

Ναι, το delete, null, exit, next, main και null είναι οι λέξεις-κλειδιά στη γλώσσα προγραμματισμού Java.

14. Όταν δεν μεταβιβάζουμε τιμές στα ορίσματα του πίνακα συμβολοσειρών της κύριας μεθόδου, η τιμή παραμένει κενή ή μηδενική;

Η τιμή θα είναι κενή αλλά όχι μηδενική όταν δεν μεταβιβάζουμε τιμές στα ορίσματα του πίνακα συμβολοσειρών στην κύρια μέθοδο.

public static void main(String[] args)

15. Τι συμβαίνει όταν γράφουμε ένα στατικό δημόσιο κενό αντί για το δημόσιο στατικό κενό για την κύρια μέθοδο;

Μεταγλωττίζεται και εκτελείται με επιτυχία αφού η παραγγελία δεν έχει σημασία και και τα δύο είναι σωστά.

16. Ποια είναι η προεπιλεγμένη τιμή μιας τοπικής μεταβλητής;

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

17. Ποιοι είναι οι διαφορετικοί τύποι προσδιοριστών πρόσβασης στην Java;

Η Java διαθέτει 4 διαφορετικούς τύπους προσδιοριστών πρόσβασης:

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

Τροποποιητές πρόσβασης Java

Μπορείτε να αναφέρετε Τροποποιητής πρόσβασης Java φροντιστήριο για περισσότερες λεπτομέρειες.

18. Ποια είναι η χρήση στατικών μεθόδων και μεταβλητών;

Όταν δηλώνουμε μια μεταβλητή ή μια μέθοδο που χρησιμοποιεί το static λέξη-κλειδί, γίνεται στατική μέθοδος ή στατική μεταβλητή. Αυτό σημαίνει ότι ανήκει σε μια τάξη και όχι στο αντικείμενο. Με άλλα λόγια, δεν χρειάζεται να δημιουργήσουμε ένα αντικείμενο για πρόσβαση σε μια στατική μέθοδο ή μεταβλητή. Μοιράζεται μεταξύ όλων των αντικειμένων μιας τάξης. Για παράδειγμα, όλοι οι μαθητές σε ένα σχολείο χρησιμοποιούν το ίδιο όνομα σχολείου. Ως εκ τούτου μπορούμε να δηλώσουμε το όνομα του σχολείου ως στατική μεταβλητή. Μπορείτε να ανατρέξετε στο Στατική λέξη-κλειδί Java για περισσότερες λεπτομέρειες σχετικά με αυτό το θέμα.

19. Ποια είναι τα πλεονεκτήματα της χρήσης πακέτων στην Java;

Χρησιμοποιώντας πακέτα στην Java παρέχει τα παρακάτω πλεονεκτήματα:

  • Αποφεύγει την ονομασία διενέξεων τάξεων. Αυτό σημαίνει ότι μπορούμε να χρησιμοποιήσουμε τα ίδια ονόματα τάξεων σε 2 διαφορετικά πακέτα.
  • Παρέχει δυνατότητα επαναχρησιμοποίησης με πρόσβαση σε μια κλάση από 1 πακέτο σε άλλο.
  • Εύκολη συντήρηση αφού τα μαθήματα θα οργανωθούν
  • Παρέχει προστασία πρόσβασης για προστατευμένες και προεπιλεγμένες τάξεις.
  • Βοηθά στον εγκλεισμό ή στην απόκρυψη δεδομένων.

20. Ποια είναι η έξοδος του ακόλουθου προγράμματος Java;

public class StringExample {

  public static void main(String[] args) {
    System.out.println(90 + 10 + "Java");
    System.out.println("Java" + 15 + 15);

  }

}
100Java
Java1515

Στην πρώτη περίπτωση, προσθέτει πρώτα τους 2 ακέραιους αριθμούς και μετά συνδυάζει την έξοδο με την τιμή συμβολοσειράς. Ως εκ τούτου οδηγεί σε "100 Java".

Στη δεύτερη περίπτωση, συνδυάζει την τιμή συμβολοσειράς με τους ακέραιους αντί να προσθέτει πρώτα τους ακέραιους αριθμούς. Ως εκ τούτου οδηγεί σε "Java1515". Αυτό συμβαίνει επειδή επειδή όλοι οι χειριστές είναι + ακολουθεί αριστερά προς τα δεξιά προτεραιότητα για συνένωση.

21. Ποια είναι η έξοδος του παρακάτω κώδικα Java;

public class StringExample {

  public static void main(String[] args) {
          System.out.println(10 * 10 + "Java");
    System.out.println("Java" + 10 * 10);
    
  }

}
100Java
Java100

Στην πρώτη περίπτωση, η έξοδος είναι "100 Java" αφού ο τελεστής πολλαπλασιασμού προηγείται του τελεστή προσθήκης. Ως εκ τούτου, πολλαπλασιάζει πρώτα 10 και 10 και μετά συνδυάζει το προϊόν με τη συμβολοσειρά.

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

22. Ποια είναι η έξοδος του παρακάτω κώδικα Java;

public class Sample {

  public static void main(String[] args) {
    for(int i=0;5;i++)
      System.out.println("Java");
  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  Type mismatch: cannot convert from int to boolean

  at Sample.main(Sample.java:4)

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

23. Τι είναι ο αντικειμενοστραφής προγραμματισμός;

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

Ακολουθούν τα χαρακτηριστικά του αντικειμενοστρεφούς προγραμματισμού:

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

24. Τι είναι ένα αντικείμενο;

Ένα αντικείμενο αντιπροσωπεύει μια πραγματική οντότητα που είναι μια παρουσία μιας τάξης. Περιέχει και τα δύο ημερομηνία   μέθοδοι(συμπεριφορές). Τα αντικείμενα έχουν κυρίως 2 χαρακτηριστικά κατάσταση   συμπεριφορές. Η κατάσταση δεν είναι παρά μια ταυτότητα του αντικειμένου (δεδομένα) και η συμπεριφορά περιγράφει τη λειτουργία (μέθοδος) του αντικειμένου. Μπορούμε να δημιουργήσουμε ένα αντικείμενο στην Java χρησιμοποιώντας το new λέξη-κλειδί. Ένα αντικείμενο είναι ένα από τα σημαντικά χαρακτηριστικά των OOP.

25. Ποια είναι η διαφορά μεταξύ αντικειμενοστρεφούς προγραμματισμού και αντικειμενικής γλώσσας προγραμματισμού;

Αντικειμενοστραφής προγραμματισμόςΠρογραμματισμός βάσει αντικειμένων
Χρησιμοποιεί όλες τις έννοιες των OOP.Δεν χρησιμοποιεί λίγες έννοιες OOPs όπως κληρονομιά, πολυμορφισμό
Δεν έχει ενσωματωμένα αντικείμεναΈχει ενσωματωμένα αντικείμενα, όπως αντικείμενο παραθύρων σε JavaScript
Π.χ .: Java, C, C ++, κ.λπ.Π.χ .: JavaScript, VBScript κ.λπ.

26. Ποια θα είναι η αρχική τιμή μιας αναφοράς αντικειμένου που ορίζεται ως μεταβλητή παρουσίας;

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

27. Τι είναι ένας κατασκευαστής;

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

28. Ποιοι είναι οι διαφορετικοί τύποι κατασκευαστών στην Java;

Υπάρχουν 3 διαφορετικοί τύποι κατασκευαστών στην Java:

  • Προεπιλεγμένος κατασκευαστής: Όταν δεν δημιουργούμε κατασκευαστή, ο μεταγλωττιστής Java δημιουργεί εσωτερικά έναν προεπιλεγμένο κατασκευαστή που έχει κενό σώμα. Αυτός ο κατασκευαστής δεν θα είναι ορατός σε εμάς.
  • Χωρίς κατασκευαστή ορίσματος: Αυτός ο κατασκευαστής δεν έχει ορίσματα ή παραμέτρους, αλλά μπορεί να περιέχει κώδικα εντός του κατασκευαστή.
  • Παραμετροποιημένος κατασκευαστής: Περιέχει ορίσματα ή παραμέτρους που χρησιμοποιούνται για την προετοιμασία ή την εκχώρηση τιμών σε μεταβλητές.

29. Ποια είναι η χρήση ενός προεπιλεγμένου κατασκευαστή;

Ο κύριος σκοπός ενός προεπιλεγμένου κατασκευαστή είναι να εκχωρήσει προεπιλεγμένες τιμές σε αντικείμενα. Ο μεταγλωττιστής Java δημιουργεί εσωτερικά έναν προεπιλεγμένο κατασκευαστή εάν δεν τον δημιουργήσουμε. Αυτός ο κωδικός δεν θα είναι ορατός σε εμάς. Η προεπιλεγμένη τιμή για ακέραια τιμή είναι 0 και για το String είναι μηδενική.

Κατασκευαστής στην Java

30. Επιστρέφει ο κατασκευαστής κάποια τιμή;

Ο κατασκευαστής επιστρέφει σιωπηρά την τρέχουσα παρουσία τάξης. Αλλά δεν μπορούμε να χρησιμοποιήσουμε ρητά έναν τύπο επιστροφής με έναν κατασκευαστή.

31. Κληρονομείται ο κατασκευαστής;

Ο κατασκευαστής δεν υποστηρίζει κληρονομιά και δεν μπορεί να κληρονομηθεί.

32. Μπορούμε να δημιουργήσουμε έναν τελικό κατασκευαστή;

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

33. Μπορούμε να υπερφορτώσουμε έναν κατασκευαστή;

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

public class Employee {
  int empId;
  String empName;
  String empRole;
  
  public Employee() {
    this.empId = 100;
  }
  
  public Employee(int id, String name) {
    this.empId = id;
    this.empName = name;
  }
  
  public Employee(String designation) {
    this.empRole = designation;
  }
  
  public static void main(String[] args) {
    Employee e1 = new Employee();
    Employee e2 = new Employee(102,"Rakesh");
    Employee e3 = new Employee("Java Developer");
    Employee e4 = new Employee("Tester");
    System.out.println("Default value of Empid: " + e1.empId);
    System.out.println("Employee id: " + e2.empId + " " + "Employee Name:" + e2.empName);
    System.out.println("Employee Role: " + e3.empRole + " and " + e4.empRole);
    
  }
}
Default value of Empid: 100
Employee id: 102 Employee Name:Rakesh
Employee Role: Java Developer and Tester

34. Τι είναι ένας κατασκευαστής αντιγράφων στην Java;

Δεν υπάρχει κατασκευαστής αντιγράφων ως τέτοιος στην Java, αλλά μπορούμε να αντιγράψουμε τιμές ενός αντικειμένου σε ένα άλλο χρησιμοποιώντας τον κατασκευαστή που είναι παρόμοιος με έναν κατασκευαστή αντιγράφων στο C ++. Υπάρχουν διαφορετικοί τρόποι αντιγραφής τιμών:

  • Χρησιμοποιώντας τον κατασκευαστή
  • Χρησιμοποιώντας τη μέθοδο κλώνου ()
  • Αντιστοίχιση τιμών από ένα αντικείμενο σε άλλο.

Ακολουθεί ένα παράδειγμα κατασκευαστή αντιγράφων όπου μεταδίδουμε το αντικείμενο ως παράμετρο σε έναν κατασκευαστή και εκεί μπορούμε να αντιγράψουμε τις τιμές από το ένα αντικείμενο στο άλλο.

public class Employee {
  int empId;
  String empName;
  public Employee(int id, String name) {
    this.empId = id;
    this.empName = name;
  }
  
   //Copy constructor
  public Employee(Employee emp) {
    empId = emp.empId;
    empName = emp.empName;
  }
  
  public void displayDetails() {
    System.out.println("Employee ID:" + empId);
    System.out.println("Employee Name:" + empName);
  }
  
  public static void main(String[] args) {
    Employee e1 = new Employee(102,"Dev");
    //Create a copy of another object
    Employee e2 = new Employee(e1);
    e1.displayDetails();
    e2.displayDetails();
  }
}
Employee ID:102
Employee Name:Dev
Employee ID:102
Employee Name:Dev

35. Ποιες είναι οι διαφορές μεταξύ ενός κατασκευαστή και μιας μεθόδου;

Παρόλο που ονομάζουμε κατασκευαστή ως ειδική μέθοδο, υπάρχουν αρκετές διαφορές μεταξύ κατασκευαστή και μεθόδου.

Κατασκευαστής JavaΜέθοδος Java
Αρχικοποιεί μια κατάσταση αντικειμένουΠεριγράφει τη συμπεριφορά του αντικειμένου
Δεν έχει τύπο επιστροφήςΈχει τύπο επιστροφής
Επικαλείται σιωπηράΕπικαλείται ρητά
Το όνομα του κατασκευαστή πρέπει να είναι ίδιο με το όνομα της τάξηςΤο όνομα της μεθόδου μπορεί να είναι οτιδήποτε ανεξάρτητα από το όνομα της τάξης

36. Ποια είναι η έξοδος του παρακάτω κώδικα;

public class Sample {
  
  Sample(int a) {
    System.out.println("Value of a: " + a);
  }
  
  Sample(float a) {
    System.out.println("Value of a: " + a);
  }

  public static void main(String[] args) {
    byte x = 5;
    Sample s = new Sample(5);

  }

}
Value of a: 5

Στον παραπάνω κώδικα, έχουμε 2 κατασκευαστές, ο ένας με τον τύπο ορίσματος int και ο άλλος με έναν τύπο δεδομένων float. Κατά τη δημιουργία αντικειμένων, περνάμε μια τιμή byte. Σε αυτήν την περίπτωση, επικαλείται τον πρώτο κατασκευαστή ακέραιου τύπου καθώς ο τύπος byte προωθείται σε ακέραιο τύπο.

37. Ποια είναι η έξοδος του παρακάτω κώδικα;

class Result {
  int a;
  String s;
}
public class Demo {

  public static void main(String[] args) {
    Result r = new Result();
    System.out.println(r.a);
    System.out.println(r.s);

  }

}
0
null

Έχουμε 2 μεταβλητές Τύπος δεδομένων ακέραιος και String. Δεδομένου ότι δεν υπάρχει κατασκευαστής, η JVM καλεί εσωτερικά τον προεπιλεγμένο κατασκευαστή και αρχικοποιεί αυτές τις μεταβλητές με μια προεπιλεγμένη τιμή που είναι 0 και null αντίστοιχα.

38. Ποια είναι η έξοδος του παρακάτω κώδικα;

class Result {
  int a;
  String s;
  
  Result(int a, String s) {
    this.a = a;
    this.s = s;
  }
}
public class Demo {

  public static void main(String[] args) {
    Result r = new Result();
    System.out.println(r.a);
    System.out.println(r.s);

  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The constructor Result() is undefined

  at Demo.main(Demo.java:13)

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

39. Τι είναι μια στατική μεταβλητή;

Όταν δηλώνουμε μια μεταβλητή με ένα static λέξη-κλειδί, το αποκαλούμε α στατική μεταβλητή. Αυτές ονομάζονται επίσης μεταβλητές κλάσης που σημαίνει ότι δεν είναι συγκεκριμένη για κανένα αντικείμενο και δεν απαιτεί κανένα αντικείμενο για πρόσβαση στις στατικές μεταβλητές. Συνήθως χρησιμοποιείται διαχειριστείτε τη μνήμη αποτελεσματικά αφού εκχωρεί μνήμη μόνο μία φορά (περιοχή κλάσης) για στατικές μεταβλητές που συμβαίνουν όταν φορτώνεται η τάξη. Μπορούμε να χρησιμοποιήσουμε μια στατική μεταβλητή όταν θέλουμε να μοιραζόμαστε την ίδια τιμή μεταξύ διαφορετικών αντικειμένων ή παρουσιών μιας κλάσης. Π.χ .: όνομα σχολείου, όνομα κολλεγίου, επωνυμία εταιρείας κ.λπ.

40. Τι είναι μια στατική μέθοδος;

Όταν δηλώνουμε μια μέθοδο χρησιμοποιώντας το static λέξη-κλειδί, γίνεται α στατική μέθοδος. Μπορούμε να έχουμε άμεση πρόσβαση στις στατικές μεθόδους και τις μεταβλητές τους χωρίς να χρησιμοποιήσουμε το αντικείμενο. Αυτές οι μέθοδοι ανήκουν σε μια τάξη. Δεν μπορούμε να καλέσουμε μια μη στατική μέθοδο ή μεταβλητή παρουσίας από μια στατική μέθοδο, καθώς θα προκαλέσει σφάλμα σύνταξης. Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν μόνο για την προετοιμασία στατικών μεταβλητών και όχι για την εμφάνιση (αντικείμενο).

41. Ποιοι είναι οι περιορισμοί στη χρήση μιας στατικής μεθόδου;

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

42. Γιατί δηλώνουμε την κύρια μέθοδο ως στατική;

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

43. Μπορούμε να παρακάμψουμε τις στατικές μεθόδους;

Όχι, δεν μπορούμε να παρακάμψουμε τις στατικές μεθόδους και θα οδηγήσει σε σφάλμα σύνταξης.

44. Τι είναι ένα στατικό μπλοκ;

Όταν ένα μπλοκ περιέχει το όνομα ως λέξη-κλειδί java στατικός, το ονομάζουμε στατικό μπλοκ. Χρησιμοποιούμε στατικό μπλοκ όταν θέλουμε να αρχίσουμε τα στατικά μέλη κατά τη φόρτωση της τάξης. Πρώτα εκτελεί αυτό το στατικό μπλοκ πριν καλέσει την κύρια μέθοδο.

public class StaticBlockExample {
  static int i;
  static {
    System.out.println("Inside the static block");
    i = 10;
  }
  public static void main(String[] args) {
    System.out.println("Inside the main method");
    System.out.println("Value of i: " + i);
  }
}
Inside the static block
Inside the main method
Value of i: 10

45. Είναι δυνατόν να εκτελέσετε ένα πρόγραμμα java χωρίς την κύρια μέθοδο;

Μπορούμε να εκτελέσουμε ένα πρόγραμμα java χωρίς την κύρια μέθοδο χρησιμοποιώντας το στατικό μπλοκ. Ένα στατικό μπλοκ εκτελείται πριν από την κύρια μέθοδο και όταν φορτώνεται η τάξη. Αλλά αν δεν έχουμε στατικό μπλοκ, τότε ο μεταγλωττιστής θα αναζητήσει την κύρια μέθοδο () και ρίχνει το σφάλμα συλλογής εάν δεν βρεθεί.

Σημείωση: Αυτό δεν είναι δυνατό για την έκδοση Java 7.

46. ​​Τι συμβαίνει όταν ορίζουμε την κύρια μέθοδο χωρίς στατική λέξη-κλειδί;

Ο κώδικας java μεταγλωττίζεται με επιτυχία, ωστόσο, θα ρίξει το "NoSuchMethodError".

47. Ποια είναι η διαφορά μεταξύ στατικής (κλάσης) μεθόδου και μεθόδου παρουσίας;

Στατική μέθοδοςΜέθοδος παρουσίας
Η δήλωση μεθόδου περιέχει τη στατική λέξη-κλειδίΗ δήλωση μεθόδου δεν έχει στατική λέξη-κλειδί
Δεν απαιτεί αντικείμενο για πρόσβαση στη στατική μέθοδοΑπαιτείται αντικείμενο για πρόσβαση στη μέθοδο παρουσίας
Δεν μπορούμε να προσπελάσουμε μη στατικές μεθόδους ή μεταβλητές μέσα σε μια στατική μέθοδοΜπορούμε να έχουμε πρόσβαση τόσο στατικά όσο και μη στατικά μέλη με μια μέθοδο παρουσίας
Η στατική μέθοδος ανήκει στην τάξη. Ως εκ τούτου καλείται επίσης ως μέθοδος κατηγορίαςΟι μέθοδοι παρουσίας ανήκουν στο αντικείμενο.

48. Μπορούμε να δημιουργήσουμε έναν στατικό κατασκευαστή;

Δεν μπορούμε να κάνουμε κατασκευαστή static αφού χρειαζόμαστε αντικείμενα για να επικαλεστούμε έναν κατασκευαστή. Το Static δεν απαιτεί αντικείμενα, επομένως θα ρίξει το σφάλμα συλλογής ως "Παράνομος τροποποιητής πρόσβασης".

49. Μπορούμε να κάνουμε αφηρημένες μεθόδους ως στατικές;

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

50. Μπορούμε να δηλώσουμε στατικές μεθόδους και στατικές μεταβλητές μέσα σε μια αφηρημένη τάξη;

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

51. Ποια είναι αυτή η λέξη-κλειδί στην Java;

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

52. Ποιες είναι οι χρήσεις του this λέξη-κλειδί στην Java;

Ο κύριος στόχος της χρήσης του java thisΗ λέξη-κλειδί είναι η διάκριση μεταξύ της μεταβλητής παρουσίας και της τοπικής μεταβλητής. Ακολουθούν άλλες διαφορετικές χρήσεις:

  • Για να αναφερθείτε στην τρέχουσα μεταβλητή παρουσίας τάξης
  • Επικαλέστε την τρέχουσα μέθοδο τάξης σιωπηρά
  • Για να επικαλεστεί τον τρέχοντα κατασκευαστή τάξης
  • Περάστε ως όρισμα στην κλήση μεθόδου
  • Περάστε ως επιχείρημα στην κλήση κατασκευαστή
  • Επιστρέψτε την τρέχουσα παρουσία τάξης από τη μέθοδο

53. Είναι δυνατόν να ανατεθεί οποιαδήποτε αναφορά στο this μεταβλητός?

Δεν μπορούμε να αντιστοιχίσουμε καμία τιμή αναφοράς στο java this λέξη-κλειδί επειδή από προεπιλογή αναφέρεται στην τρέχουσα παρουσία τάξης. Εάν προσπαθήσουμε να αντιστοιχίσουμε οποιαδήποτε τιμή, θα προκαλέσει σφάλμα συλλογής.

public class SampleTest {

  public SampleTest()
  {
    this = 5;
  }
  public static void main(String[] args) {
    SampleTest s = new SampleTest();

  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The left-hand side of an assignment must be a variable

54. Μπορούμε να χρησιμοποιήσουμε αυτήν τη λέξη-κλειδί για να αναφερθούμε σε στατικές μεταβλητές;

Μπορούμε να χρησιμοποιήσουμε το java this λέξη-κλειδί για να αναφερθείτε στο static μεταβλητές και δεν θα ρίξει κανένα σφάλμα. Ωστόσο, δεν είναι η καλύτερη πρακτική να το κάνετε, καθώς οι στατικές μεταβλητές είναι άμεσα προσβάσιμες και δεν απαιτούν αντικείμενο ή μεταβλητή αναφοράς.

55. Πώς να επιτύχετε χρήση αλυσίδας κατασκευαστή this λέξη-κλειδί;

Χρησιμοποιούμε την java αυτή τη λέξη-κλειδί για να επικαλεστούμε έναν κατασκευαστή κυρίως για να εφαρμόσουμε κατασκευαστική αλυσίδα που καλεί έναν κατασκευαστή σε έναν άλλο κατασκευαστή. Αυτό βοηθά στην επαναχρησιμοποίηση κώδικα. Με βάση τον τύπο του κατασκευαστή, μπορούμε να περάσουμε τις παραμέτρους. Κλήση κατασκευαστή χρησιμοποιώντας το java αυτό Η λέξη-κλειδί πρέπει πάντα να είναι η πρώτη δήλωση, αλλιώς θα ρίξει λάθος συλλογής.

Μπορούμε να καλέσουμε έναν κατασκευαστή χρησιμοποιώντας 2 διαφορετικούς τρόπους:

Αυτό() - προεπιλεγμένος κατασκευαστής

αυτό (παράμετρος) - παραμετροποιημένος κατασκευαστής

Μπορείτε να αναφέρετε εδώ Για περισσότερες πληροφορίες.

56. Ποιο είναι το πλεονέκτημα του περάσματος this σε μια μέθοδο αντί για το τρέχον αντικείμενο κλάσης;

Αυτό αναφέρεται επίσης στην τρέχουσα παρουσία κλάσης που είναι παρόμοια με το τρέχον αντικείμενο. Αλλά έχει μερικές διαφορές όπως παρακάτω:

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

57. Τι είναι η κληρονομιά;

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

58. Ποιοι είναι οι διαφορετικοί τύποι κληρονομιάς στην Java;

Ακολουθούν οι διαφορετικοί τύποι κληρονομιάς στην Java:

  • Ενιαία κληρονομιά
  • Πολυεπίπεδη κληρονομιά
  • Υβριδική κληρονομιά
  • Ιεραρχική κληρονομιά
  • Πολλαπλή κληρονομιά - Δεν υποστηρίζεται με χρήση κλάσης Java αλλά μπορεί να επιτευχθεί μέσω διεπαφής.

59. Γιατί χρησιμοποιούμε κληρονομιά στην Java;

  • Δυνατότητα επαναχρησιμοποίησης του υπάρχοντος κώδικα μιας κλάσης
  • Υποστηρίζει παράκαμψη μεθόδου
  • Επιτρέπει τις μεθόδους κλήσης του superclass μέσα σε μεθόδους μιας υποκατηγορίας που χρησιμοποιούν το σούπερ λέξη-κλειδί.
  • Δεν επιτρέπει την κληρονομιά της τελικής τάξης ή παράκαμψης των τελικών μεθόδων.
  • Υποστηρίζει πολλαπλή κληρονομιά χρησιμοποιώντας διεπαφές

60. Ποια κατηγορία είναι το superclass για όλες τις κατηγορίες;

Η κλάση Object είναι η superclass για όλες τις τάξεις.

61. Γιατί η Java δεν υποστηρίζει πολλαπλή κληρονομιά;

Η Java δεν υποστηρίζει πολλαπλή κληρονομιά λόγω της πολυπλοκότητας και της ασάφειας που δημιουργεί κατά την εκτέλεση. Πολλαπλή κληρονομιά σημαίνει ότι μια τάξη μπορεί να επεκτείνει περισσότερες από 1 τάξεις. Με άλλα λόγια, μια παιδική τάξη μπορεί να έχει περισσότερες από 1 τάξεις γονέων. Μπορούμε να το καταλάβουμε αν το συγκρίνουμε με την πραγματική ζωή. Είναι αδύνατο για ένα παιδί να έχει περισσότερες από 1 μητέρες. Με τον ίδιο τρόπο, η κληρονομιά στην Ιάβα δεν μπορεί να έχει 1 παιδική τάξη με περισσότερους από 1 γονείς.

Για παράδειγμα, εάν αυτό επιτρέπεται σε java, λάβετε υπόψη το παρακάτω παράδειγμα. Όταν καλούμε obj.show (), δεν θα ξέρει ποια μέθοδο κλάσης θα καλέσει αφού υπάρχει και στις δύο κατηγορίες.

class classA {
  public void show() {
    System.out.println("Class A");
  }
}
class classB {
  public void show() {
    System.out.println("Class B");
  }
}
public class MultipleInheritance extends classA,classB { //Suppose if allowed
  public static void main(String[] args) {
    MultipleInheritance obj = new MultipleInheritance();
    obj.show();
  }
}
Compile-time error

Μπορούμε να εφαρμόσουμε πολλαπλή κληρονομιά χρησιμοποιώντας μια διεπαφή στην Java.

62. Τι είναι η συγκέντρωση;

Ο συνδυασμός σε Java μας επιτρέπει να παρέχουμε μια αναφορά για μια τάξη σε μια άλλη τάξη. Με άλλα λόγια, υποστηρίζει ένα μονόδρομος σχέση και υλοποιεί α ΕΧΕΙ ΕΝΑ σχέσης.

Όταν δύο τάξεις έχουν μια σχέση HAS-A, λέμε ότι εφαρμόζει τη συγκέντρωση. Ένα καλύτερο παράδειγμα που μπορούμε να σκεφτούμε είναι «Ο υπάλληλος έχει ένα αυτοκίνητο«. Λέμε ότι αυτό είναι μονοκατευθυντικό, καθώς ένα αυτοκίνητο δεν μπορεί να έχει υπάλληλο και μόνο ένας υπάλληλος μπορεί να έχει αυτοκίνητο.

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

class Car {
  String carname;
  String color;
  String regno;
  
  Car(String carname, String color, String regno) {
    this.carname = carname;
    this.color = color;
    this.regno = regno;
  }
  
}
public class Employee {
  
  String empname;
  int empid;
  Car car;
  
  Employee(String empname, int empid, Car car) {
    this.empname = empname;
    this.empid = empid;
    this.car = car;
  }
  public static void main(String[] args) {
    Car car = new Car("Dezire","blue","KA 02 B 5544");
    Employee e = new Employee("Raj",456234,car);
    System.out.println("----------Employee Details:------------");
    System.out.println("Employee Name: " + e.empname);
    System.out.println("Employee ID: " + e.empid);
    System.out.println("----------Employee's car details-------");
    System.out.println("Car Name: " + e.car.carname);
    System.out.println("Car color: " + e.car.color);
    System.out.println("Car Reg No: " + e.car.regno);
  }
}
----------Employee Details:------------
Employee Name: Raj
Employee ID: 456234
----------Employee's car details-------
Car Name: Dezire
Car color: blue
Car Reg No: KA 02 B 5544

63. Τι είναι η σύνθεση;

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

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

64. Ποια είναι η διαφορά μεταξύ συνάθροισης και σύνθεσης;

ΣύνθεσηΣυσσωμάτωση
Ισχυρός τύπος σύνδεσηςΑδύναμος τύπος συσχέτισης
Υλοποιεί μέρος ή ανήκει στη σχέσηΗ εφαρμογή έχει σχέση
Και τα δύο μαθήματα εξαρτώνται το ένα από το άλλο.
Η παιδική τάξη δεν μπορεί να υπάρχει χωρίς γονική τάξη
Η παιδική τάξη μπορεί να υπάρχει ανεξάρτητα ακόμη και χωρίς γονική τάξη

65. Γιατί η Java δεν υποστηρίζει τη χρήση δεικτών;

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

66. Τι είναι μια υπερ-λέξη-κλειδί στην Java;

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

67. Πώς να εφαρμόσετε την αλυσίδα κατασκευαστή χρησιμοποιώντας τη σούπερ λέξη-κλειδί Java;

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

Στο παρακάτω παράδειγμα, πραγματοποιούμε μια ρητή σούπερ κλήση στον γονικό κατασκευαστή τάξης Σχήματα (Όνομα συμβολοσειράς) που έχει επιχειρήματα από τον κατασκευαστή παιδικής τάξης Τετράγωνο().

class Shapes {
  Shapes() {
    System.out.println("This is a shape");
  }
  
  Shapes(String name) {
    System.out.println("Shape name is: " + name);
  }
}
public class Square extends Shapes {
  
  Square() {
    super("Square");
    System.out.println("Square constructor");
  }
  public static void main(String[] args) {
    Square s = new Square();
  }
}
Shape name is: Square
Square constructor

68. Ποιες είναι οι χρήσεις της υπερ-λέξης-κλειδιού Java;

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

69. Ποιες είναι οι διαφορές μεταξύ this super λέξη-κλειδί;

αυτή η λέξη-κλειδίσούπερ λέξη-κλειδί
Αναφέρεται στο τρέχον πλαίσιο τάξηςΑναφέρεται στη βασική τάξη ή στο περιβάλλον της γονικής τάξης
Χρησιμοποιείται κυρίως για τη διάκριση μεταξύ των τοπικών και των μεταβλητών παρουσίας σε έναν κατασκευαστήΧρησιμοποιείται για την αρχικοποίηση των μεταβλητών κατηγορίας βάσης εντός του παραγόμενου κατασκευαστή κλάσης

70. Ποιο είναι το αποτέλεσμα του παρακάτω προγράμματος java;

class College {
  
  College() {
    System.out.println("College Name is BITS Pilani");
  }
}

public class Department extends College {
  public String dept;
  public Department(String deptname) {
    dept = deptname;
  }
  public static void main(String[] args) {
    Department d = new Department("Computer Science");
    System.out.println("Department Name:" + d.dept);
  }
}
College Name is BITS Pilani
Department Name:Computer Science

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

71. Μπορούμε να χρησιμοποιήσουμε και τα δύο this super λέξη-κλειδί σε κατασκευαστή;

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

72. Τι είναι η κλωνοποίηση αντικειμένων;

Η κλωνοποίηση αντικειμένων είναι η διαδικασία δημιουργίας ενός ακριβούς αντιγράφου του αντικειμένου. Χρησιμοποιεί τη μέθοδο κλώνου της κλάσης Object. Η τάξη πρέπει να εφαρμόσει τη διασύνδεση Cloneable για να χρησιμοποιήσει τη μέθοδο κλώνου αλλιώς θα ρίξει το CloneNotSupportedException. Η μέθοδος κλώνου εξοικονομεί περισσότερο χρόνο από τη δημιουργία ενός αντικειμένου χρησιμοποιώντας το new λέξη-κλειδί εάν θέλουμε ένα ακριβές αντίγραφο του δημιουργούμενου αντικειμένου.

73. Τι είναι η μέθοδος υπερφόρτωσης;

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

  • Περνώντας έναν διαφορετικό αριθμό παραμέτρων
  • Περνώντας διαφορετικούς τύπους παραμέτρων.

74. Γιατί δεν είναι δυνατή η υπερφόρτωση μεθόδου αλλάζοντας τον τύπο επιστροφής;

Η Java δεν υποστηρίζει υπερφόρτωση μεθόδου αλλάζοντας μόνο τον τύπο επιστροφής επειδή θα δημιουργήσει ασάφεια και ο μεταγλωττιστής δεν θα γνωρίζει ποια μέθοδο θα καλέσει.

75. Μπορούμε να υπερφορτώσουμε τις μεθόδους κάνοντάς τις απλώς στατικές;

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

public class College {
  
  public void getCollegeName() {
    System.out.println("CollegeName is BITS Pilani");
  }
  
//Throws compilation error as duplicate method name
  public static void getCollegeName() {
    System.out.println("CollegeName is BITS Pilani");
  }

}

76. Μπορούμε να υπερφορτώσουμε την κύρια μέθοδο στην Java;

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

77. Τι είναι η μέθοδος υπερφόρτωσης με προώθηση τύπου;

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

Βασικές ερωτήσεις συνέντευξης Java

public class Sample {

  public void add(int a, int b) {
    int sum = a + b;
    System.out.println("Integer addition");
    System.out.println("Sum: " + sum);
  }
  
  public void add(float a, float b) {
    float sum = a + b;
    System.out.println("Float addition");
    System.out.println("Sum: " + sum);
  }
    
  public static void main(String[] args) {
    Sample s = new Sample();
    short x,y;
    s.add(4, 5);

  }

}
Integer addition
Sum: 9

78. Ποιο είναι το αποτέλεσμα του παρακάτω προγράμματος java;

public class Sample {

  public void add(int a, float b) {
    System.out.println("Integer addition");
  }
  
  public void add(float a, int b) {
    System.out.println("Float addition");
  }
    
  public static void main(String[] args) {
    Sample s = new Sample();
    s.add(4, 5);
  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The method add(int, float) is ambiguous for the type Sample

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

79. Τι είναι η μέθοδος παράκαμψης;

Όταν η υποκατηγορία έχει την ίδια μέθοδο της βασικής κλάσης μαζί με την υπογραφή, την ονομάζουμε α παράκαμψη μεθόδου που σημαίνει ότι η υποκατηγορία έχει αντικαταστήσει τη μέθοδο βασικής κατηγορίας. Με βάση τον τύπο του αντικειμένου που δημιουργούμε, καλεί τη μέθοδο αυτής της αντίστοιχης κλάσης. Αυτό σημαίνει, εάν δημιουργήσουμε ένα αντικείμενο της superclass και το παραπέμψουμε χρησιμοποιώντας την υποκατηγορία, τότε καλεί τη μέθοδο της υποκατηγορίας. Δεδομένου ότι το υπολογίζει κατά τη διάρκεια του χρόνου εκτέλεσης, το ονομάζουμε ως πολυμορφισμός χρόνου εκτέλεσης στην Ιάβα.

80. Μπορούμε να παρακάμψουμε μια στατική μέθοδο;

Όχι, δεν μπορούμε να παρακάμψουμε μια στατική μέθοδο καθώς θα ρίξει ένα σφάλμα συλλογής.

81. Γιατί η Java δεν επιτρέπει την παράκαμψη της στατικής μεθόδου;

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

82. Μπορούμε να παρακάμψουμε μια υπερφορτωμένη μέθοδο;

Ναι, η Java επιτρέπει την παράκαμψη μιας υπερφορτωμένης μεθόδου.

83. Ποια είναι η διαφορά μεταξύ υπερφόρτωσης μεθόδου και παράκαμψης μεθόδου;

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

84. Μπορούμε να παρακάμψουμε τις ιδιωτικές μεθόδους στην Java;

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

85. Μπορούμε να αλλάξουμε το εύρος των παρακάμψεων μεθόδων στην υποκατηγορία;

Ναι, μπορούμε να αλλάξουμε το εύρος των παρακάμψεων μεθόδων στην υποκατηγορία υπό την προϋπόθεση ότι δεν μειώσουμε την προσβασιμότητα.

  • Το ιδιωτικό μπορεί να αλλάξει σε προστατευμένο, προεπιλεγμένο ή δημόσιο.
  • Μπορούμε να αλλάξουμε προστατευμένο σε προεπιλογή ή δημόσιο.
  • Ένας προεπιλεγμένος τροποποιητής μπορεί να αλλάξει σε δημόσιο.
  • Ο δημόσιος τροποποιητής μπορεί να δηλωθεί μόνο ως δημόσιος.

86. Μπορούμε να τροποποιήσουμε τη ρήτρα ρίψεων της μεθόδου superclass, παρακάμπτοντάς την στην υποκατηγορία;

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

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

87. Ποιο είναι το αποτέλεσμα του παρακάτω προγράμματος Java;

class parent {
  
  public void print(int a) {
    System.out.println("Prints base class integer number");
  }
  
  public void print(double a) {
    System.out.println("Prints base class double number");
  }
}
public class child extends parent{
  
  public void print(double a) {
    System.out.println("Prints child class double number");
  }

  public static void main(String[] args) {
    child c = new child();
    c.print(5);
    c.print(5.5);

  }

}
Prints base class integer number
Prints child class double number

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

88. Μπορούμε να έχουμε εικονικές λειτουργίες στην Java;

Ναι, από προεπιλογή είναι οι λειτουργίες είναι εικονικές στην Ιάβα.

89. Τι είναι ένας συντελεστής επιστροφής;

Όταν παρακάμπτουμε μια μέθοδο στην υποκατηγορία δηλώνοντας τον τύπο επιστροφής ως τύπο υποκατηγορίας, τον αποκαλούμε συντεταγμένο τύπο επιστροφής. Η Java υποστηρίζει τύπο επιστροφής συνδιακύμανσης μόνο από JDK 5.0 και άνω.

class Base {
  Base display() {
    return this;
  }
}
public class Derived extends Base{

  Derived display() {
    return this;
  }
  
  public void show() {
    System.out.println("Covariant return type");
  }
  public static void main(String[] args) {

    new Derived().display().show();

  }

}
Covariant return type

90. Ποια είναι η έξοδος του παρακάτω κώδικα;

class Base {
  public void display() {
    System.out.println("Base method");
  }
}
public class Derived extends Base {

  public void display() {
    System.out.println("Derived method");
  }
  
  public static void main(String[] args) {

    Base b = new Derived();
    b.display();

  }

}
Derived method

Η έξοδος εκτυπώνει τη μέθοδο της παραγόμενης κλάσης αφού δημιουργούμε ένα αντικείμενο της παραγόμενης κλάσης.

91. Ποια είναι η τελική λέξη-κλειδί στην Java;

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

public class Circle {
  final double PI= 3.14;
  
  public void area(int r) {
    PI= 2.14;
    double area = PI*r*r;
    System.out.println("Area of circle: " + area);
  }
  public static void main(String[] args) {
    Circle c = new Circle();
    c.area(4);
  }
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The final field Circle.PI cannot be assigned

92. Ποια είναι η τελική μέθοδος;

Όταν χρησιμοποιούμε την τελική λέξη-κλειδί java πριν από τη μέθοδο, την ονομάζουμε τελική μέθοδο. Σε αυτήν την περίπτωση, δεν μπορούμε να παρακάμψουμε την τελική μέθοδο. Μπορούμε να καλέσουμε την τελική μέθοδο απευθείας από μια δευτερεύουσα τάξη, αλλά δεν μπορούμε να την παρακάμψουμε, καθώς θα οδηγήσει σε σφάλμα συλλογής.

class Vehicle {
  final void speed() {
    System.out.println("Default speed");
  }
}
public class Car extends Vehicle{
  void speed() {
    System.out.println("Car speed");
  }
  public static void main(String[] args) {
  }
}
Error: LinkageError occurred while loading main class Car
  java.lang.VerifyError: class Car overrides final method Vehicle.speed()V

93. Τι είναι το τελικό μάθημα;

Όταν χρησιμοποιούμε την τελική λέξη-κλειδί κατά τη δημιουργία μιας τάξης σε java, την ονομάζουμε τελική τάξη. Δεν μπορούμε να επεκτείνουμε μια τελική τάξη και δεν υποστηρίζουμε την κληρονομιά. Οι περισσότερες βιβλιοθήκες του java core έχουν μια τελική τάξη όπως το String class για παράδειγμα.

final class Vehicle {
  public void speed() {
    System.out.println("Default speed");
  }
}
public class Car extends Vehicle{
  public static void main(String[] args) {
    
  }
}
The type Car cannot subclass the final class Vehicle

94. Τι είναι η τελική κενή μεταβλητή;

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

95. Μπορούμε να προετοιμάσουμε μια τελική κενή μεταβλητή;

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

public class Circle {
  final double PI;
  
       //Initialize final variable in the constructor
  Circle() {
    PI= 3.14;
  }
  
  public void area(int r) {
    double area = PI*r*r;
    System.out.println("Area of circle: " + area);
  }
  public static void main(String[] args) {
    Circle c = new Circle();
    c.area(4);
  }
}
Area of circle: 50.24

96. Μπορείτε να δηλώσετε την κύρια μέθοδο Java ως τελική;

Ναι, μπορούμε να δηλώσουμε την κύρια μέθοδο ως τελική, καθώς δεν χρειάζεται να παρακάμψουμε την κύρια μέθοδο στην Java.

97. Ποια είναι η έξοδος του παρακάτω κώδικα Java;

public class Test {

  public static void main(String[] args) {
    final String value;
    value = "Hello";
    System.out.println(value);

  }

}
Hello

Εκτυπώνει την έξοδο ως "Γεια" αφού την προετοιμάζουμε μόνο μία φορά.

98. Ποια είναι η έξοδος του παρακάτω κώδικα;

class Sample {
  public final void display() {
    System.out.println("Sample display method");
  }
}
public class Test extends Sample{
  
  public final void display() {
    System.out.println("Test display method");
  }

  public static void main(String[] args) {
    Sample s = new Sample();
    s.display();

  }

}
Error: LinkageError occurred while loading main class Test
  java.lang.VerifyError: class Test overrides final method Sample.display()V

Ρίχνει ένα σφάλμα συλλογής αφού δεν μπορούμε να παρακάμψουμε μια τελική μέθοδο στην Java.

99. Μπορούμε να δηλώσουμε έναν κατασκευαστή ή διεπαφή ως τελικό;

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

100. Ποια είναι η διαφορά μεταξύ μιας τελικής μεθόδου και μιας αφηρημένης μεθόδου;

Η κύρια διαφορά είναι ότι η τελική μέθοδος δεν μπορεί να παρακαμφθεί, ενώ η αφηρημένη μέθοδος πρέπει να παρακαμφθεί στην υποκατηγορία που εφαρμόζει την αφηρημένη τάξη.

101. Ποια είναι η διαφορά μεταξύ πολυμορφισμού χρόνου εκτέλεσης και χρόνου εκτέλεσης;

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

102. Τι είναι ο πολυμορφισμός χρόνου εκτέλεσης;

Όταν ο πολυμορφισμός υποχωρεί κατά τη διάρκεια του χρόνου εκτέλεσης, το ονομάζουμε δυναμικός or runtime πολυμορφισμός Σε αυτόν τον τύπο πολυμορφισμού σε java, χρησιμοποιεί τη μεταβλητή αναφοράς του superclass για να καλέσει τη μέθοδο overridden. Αυτό σημαίνει, με βάση το αντικείμενο που αναφέρεται από τη μεταβλητή αναφοράς, καλεί τη μέθοδο παράκαμψης αυτής της αντίστοιχης κλάσης. Μπορούμε να χρησιμοποιήσουμε το παράκαμψη μεθόδου ιδέα για την εφαρμογή του δυναμικού πολυμορφισμού.

103. Είναι δυνατόν να επιτευχθεί πολυμορφισμός χρόνου εκτέλεσης με μέλη δεδομένων;

Όχι, δεν μπορούμε να επιτύχουμε πολυμορφισμό χρόνου εκτέλεσης παρακάμπτοντας τα μέλη δεδομένων. Μόνο οι μέθοδοι μπορούν να παρακαμφθούν και όχι οι μεταβλητές.

class Bank {
  public double interestRate = 7.5;
}
class SBI extends Bank {
  public double interestRate = 6.4;
}
public class BankDemo {
  public static void main(String[] args) {
    Bank b = new SBI();
    System.out.println(b.interestRate);
    SBI s = new SBI();
    System.out.println(s.interestRate);
  }
}
7.5
6.4

Όταν έχουμε το ίδιο όνομα μεταβλητής στο superclass και την υποκατηγορία, με βάση τις μεταβλητές αναφοράς, καλεί την αντίστοιχη μεταβλητή. Σε αυτό το παράδειγμα, το b είναι μια παρουσία του superclass, επομένως πρώτα εκτυπώνει τη μεταβλητή τιμή του superclass. Στη συνέχεια, το s είναι μια παρουσία μιας υποκατηγορίας που εκτυπώνει την τιμή της μεταβλητής υποκατηγορίας.

104. Ποια είναι η διαφορά μεταξύ στατικής και δυναμικής σύνδεσης;

Στατική δέσμευσηΔυναμική δέσμευση
Ονομάζεται επίσης δέσμευση νωρίς ή δέσμευση χρόνου μεταγλώττισηςΟνομάζεται επίσης καθυστέρηση δέσμευσης ή δέσμευση χρόνου εκτέλεσης
Η μέθοδος υπερφόρτωσης είναι στατική δέσμευσηΗ παράκαμψη μεθόδου είναι δυναμική δέσμευση
Χρησιμοποιεί τύπο κλάσης για την επίλυση της δέσμευσηςΧρησιμοποιεί τον τύπο αντικειμένου για την επίλυση της δέσμευσης
Ταχύτερη εκτέλεσηΑργή εκτέλεση

105. Ποιο είναι το αποτέλεσμα του ακόλουθου προγράμματος;

class Vehicle {
  public void speed() {
    System.out.println("Default speed");
  }
}
class Bike extends Vehicle {
  public void speed() {
    System.out.println("Bike speed");
  }
}
class Car extends Vehicle {
  public void speed() {
    System.out.println("Car speed");
  }
}
public class VehicleType {
  public static void main(String[] args) {
    //Create an instance of Vehicle
    Vehicle v = new Vehicle();
    v.speed();
    
    //Create an instance of Bike
    Vehicle b = new Bike();
    b.speed();
    
    //Create an instance of Car
    Vehicle c = new Car();
    c.speed();
  }
}
Default speed
Bike speed
Car speed

Όταν δημιουργούμε μια παρουσία της δευτερεύουσας κλάσης, τότε καλεί τη μέθοδο παράκαμψης της υποκατηγορίας κατά τη διάρκεια του χρόνου εκτέλεσης.

106. Τι είναι ο χειριστής Java instanceOf;

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

public class SpecialOperator {

  public static void main(String[] args) {
    String value = "";
    Boolean b;
    b = (value instanceof String);
    System.out.println(b);
  }

}
true

107. Τι είναι η αφαίρεση;

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

108. Ποια είναι η διαφορά μεταξύ αφαίρεσης και ενθυλάκωσης;

Η κύρια διαφορά είναι αφαίρεση κρύβει τις λεπτομέρειες εφαρμογής ενώ ενθυλάκωση συνδέει τα δεδομένα και τις μεθόδους μαζί

109. Τι είναι μια αφηρημένη τάξη;

Όταν δηλώνουμε μια τάξη με ένα αφηρημένο λέξη-κλειδί, το ονομάζουμε αφηρημένη τάξη. αφηρημένο είναι μια λέξη-κλειδί τροποποιητή χωρίς πρόσβαση που μπορούμε να χρησιμοποιήσουμε μαζί με μια τάξη και μια μέθοδο. Μια αφηρημένη τάξη είναι μια ειδική τάξη που είναι ένα superclass που περιέχει μη εφαρμοσμένες μεθόδους. Ως εκ τούτου, η υποκατηγορία που κληρονομεί τη μητρική αφηρημένη τάξη πρέπει να εφαρμόζει όλες τις αφηρημένες μεθόδους.

110. Μπορεί να υπάρξει μια αφηρημένη μέθοδος χωρίς μια αφηρημένη τάξη;

Όχι, εάν υπάρχει μια αφηρημένη μέθοδος, τότε πρέπει να δηλώσουμε αυτήν την τάξη ως μια αφηρημένη τάξη.

111. Ποια είναι η έξοδος του παρακάτω κώδικα;

abstract class Area {
  abstract void square(int x);
}
public class Test {

  int area;
  
  public static void main(String[] args) {
    new Area() {
      void square(int x) {
        int area = x * x;
        System.out.println("Area is: " + area);
      }
    }.square(5);

  }

}
Area is: 25

Ο παραπάνω κωδικός εκτυπώνει την έξοδο ως 25. Η κλάση δοκιμής εφαρμόζει το τετράγωνο αφηρημένης μεθόδου.

112. Μπορούμε να δηλώσουμε μια μέθοδο τόσο αφηρημένη όσο και τελική;

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

113. Μπορούμε να δημιουργήσουμε μια αφηρημένη τάξη;

Όχι, δεν μπορούμε να δημιουργήσουμε μια αφηρημένη τάξη που σημαίνει ότι δεν μπορούμε να δημιουργήσουμε μια παρουσία ή αντικείμενο για μια αφηρημένη τάξη.

114. Τι είναι μια διεπαφή;

Η διεπαφή Java είναι μια λέξη-κλειδί που μας επιτρέπει να επιτύχουμε πλήρη αφαίρεση. Μια διεπαφή μας λέει τι κάνει παρά πώς λειτουργεί. Αυτό σημαίνει, μια διεπαφή περιέχει μόνο δήλωση λειτουργίας και δεν περιέχει εφαρμογή λειτουργίας. Η κλάση που εφαρμόζει τη διεπαφή περιέχει τον ορισμό της συνάρτησης. Δεν μπορούμε να δημιουργήσουμε μια παρουσία ή να έχουμε μεταβλητές παρουσίας σε μια διεπαφή. Όλες οι μεταβλητές σε μια διεπαφή είναι δημόσιες, στατικές και τελικές από προεπιλογή και πρέπει να αρχικοποιηθούν κατά τη δήλωση. Όλες οι μέθοδοι είναι δημόσιες και αφηρημένες από προεπιλογή.

115. Μπορούμε να δηλώσουμε μια μέθοδο διασύνδεσης ως στατική;

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

116. Μπορούμε να δηλώσουμε μια διεπαφή ως τελική;

Όχι, δεν μπορούμε να δηλώσουμε μια διεπαφή ως τελική αφού πρέπει να εφαρμοστεί από άλλη τάξη. Η τελική λέξη-κλειδί δεν το υποστηρίζει.

117. Τι είναι η διεπαφή δείκτη;

Όταν ορίζουμε μια κενή διεπαφή, την ονομάζουμε διεπαφή ετικέτας ή δείκτη. Αυτός ο τύπος διεπαφής java δεν έχει ιδιότητες ή μεθόδους. Λίγες υπάρχουσες διεπαφές ετικετών στο java είναι EventListener, Serializable, Remote (java.rmi.Remote). Η κύρια χρήση της διεπαφής ετικετών είναι ότι όταν η τάξη εφαρμόζει μια τέτοια διεπαφή, μπορεί να χρησιμοποιήσει τη συνδρομή αυτής της διεπαφής. Αυτό σημαίνει ότι η JVM (Java Virtual Machine) εκτελεί μια ειδική λειτουργία για την υποστήριξη αυτής της διεπαφής. Για παράδειγμα, η διαδικασία σειριοποίησης ή αποεστερίωσης.

package java.uti;
public interface EventListener 
{ }

118. Ποιες είναι οι διαφορές μεταξύ μιας αφηρημένης κλάσης και μιας διεπαφής;

Περίληψη τάξηπεριβάλλον λειτουργίας
Η αφηρημένη τάξη μπορεί να έχει τόσο αφηρημένες όσο και μη αφηρημένες μεθόδουςΗ διεπαφή μπορεί να έχει μόνο αφηρημένες μεθόδους. Από το Java 8, υποστηρίζει προεπιλεγμένες μεθόδους
Δεν υποστηρίζει πολλαπλή κληρονομιάΥποστηρίζει πολλαπλή κληρονομιά
Χρησιμοποιεί αφηρημένη λέξη-κλειδίΧρησιμοποιεί τη λέξη-κλειδί διεπαφής
Η χρήση επεκτείνει τη λέξη-κλειδί για να κληρονομήσει την αφηρημένη τάξηΧρησιμοποιεί την εφαρμογή λέξεων-κλειδιών για την εφαρμογή της διεπαφής
Μπορεί να επεκτείνει μια άλλη κλάση Java και επίσης να εφαρμόσει διεπαφήΜπορεί να επεκτείνει μόνο μια άλλη διεπαφή
Τα μέλη μπορούν να έχουν τροποποιητές πρόσβασης όπως ιδιωτικό, προστατευμένο κ.λπ.Τα μέλη μπορούν να έχουν μόνο δημόσιο
Μπορεί να έχει στατικές, μη στατικές, τελικές ή μη τελικές μεταβλητές.Μπορεί να έχει μόνο στατικές και τελικές μεταβλητές

119. Μπορούμε να δηλώσουμε τις μεταβλητές σε μια διεπαφή ως ιδιωτικές ή προστατευμένες;

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

120. Πότε μπορεί να μεταφερθεί μια αναφορά αντικειμένου σε μια αναφορά διεπαφής;

Όταν ένα αντικείμενο εφαρμόζει τη διεπαφή αναφοράς, μπορούμε να μεταδώσουμε μια αναφορά αντικειμένου σε αναφορά διεπαφής.

121. Πώς να δημιουργήσετε μια τάξη μόνο για ανάγνωση στην Java;

Μπορούμε να δημιουργήσουμε μια κλάση μόνο για ανάγνωση στην Java κάνοντας όλες τις μεταβλητές ως ιδιωτικές. Η τάξη θα περιέχει μόνο μεθόδους λήψης που χρησιμοποιούνται για την ανάγνωση των τιμών των ιδιωτικών μεταβλητών. Δεδομένου ότι δεν υπάρχουν μέθοδοι ρύθμισης, δεν μπορούμε να τροποποιήσουμε τις τιμές.

de class Account {
  private int accountnumber;
  
  public int getAccountNumber() {
    return accountnumber;
  }
}

122. Πώς να δημιουργήσετε μια τάξη μόνο για εγγραφή στην Java;

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

class Account {
  private int accountnumber;
  
  public void setAccountNumber(int accno) {
    this.accountnumber = accno;
  }

}

123. Ποια είναι τα πλεονεκτήματα του Encapsulation στην Java;

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

124. Τι είναι ένα πακέτο στην Java;

Πακέτα σε Java ομαδοποιεί πολλές κατηγορίες, διασυνδέσεις ή πακέτα, κ.λπ. μαζί σε ένα μόνο μέρος. Μπορούμε να θεωρήσουμε ένα πακέτο παρόμοιο με ένα φάκελο. Ένας φάκελος μπορεί να περιέχει πολλά αρχεία. Ομοίως, στην Java, ένα πακέτο περιέχει μια ομάδα τάξεων. Ο κύριος σκοπός είναι η αποφυγή διενέξεων ονόματος τάξης Υπάρχουν δύο τύποι πακέτων στην Java: ενσωματωμένο και καθορισμένο από τον χρήστη.

125. Ποια είναι τα πλεονεκτήματα της χρήσης ενός πακέτου στην Java;

  • Αποφεύγει την ονομασία διενέξεων τάξεων. Αυτό σημαίνει ότι μπορούμε να χρησιμοποιήσουμε τα ίδια ονόματα τάξεων σε 2 διαφορετικά πακέτα.
  • Παρέχει δυνατότητα επαναχρησιμοποίησης με πρόσβαση σε μια κλάση από 1 πακέτο σε άλλο.
  • Εύκολη συντήρηση αφού τα μαθήματα θα οργανωθούν
  • Παρέχει προστασία πρόσβασης για προστατευμένες και προεπιλεγμένες τάξεις. Παρακαλώ αναφερθείτε σε τροποποιητές πρόσβασης Για περισσότερες πληροφορίες.
  • Βοηθά στον εγκλεισμό ή στην απόκρυψη δεδομένων.

126. Πώς να δημιουργήσετε ένα πακέτο στην Java;

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

  1. Δημιουργήστε ένα νέο έργο Java - Π.χ .: "PackageDemo".
  2. Κάντε δεξί κλικ στο έργο -> Νέο -> Πακέτο
  3. Εισαγάγετε το όνομα του πακέτου. Π.χ .: com.tutorial.packagedemo
  4. Κάντε κλικ στο Τέλος

Εάν χρησιμοποιούμε το σημειωματάριο, ακολουθήστε τα παρακάτω βήματα:

  1. Ορίστε ένα πακέτο όνομα πακέτου. Δημιουργήστε μια τάξη όνομα τάξης και αποθηκεύστε το ως class_name.java
  2. Μεταγλώττιση του κώδικα χρησιμοποιώντας τη γραμμή εντολών: javac -d. class_name.java
  3. Εκτελέστε τον κώδικα χρησιμοποιώντας τη γραμμή εντολών: java package_name.class_name

127. Πώς μπορούμε να έχουμε πρόσβαση σε μια τάξη σε ένα πακέτο από άλλη τάξη;

  • Χρησιμοποιώντας το πλήρως αναγνωρισμένο όνομα - Χρησιμοποιήστε ένα πλήρως αναγνωρισμένο όνομα ή εισαγάγετε το πακέτο που περιέχει την τάξη.
  • Χρησιμοποιώντας τη σχετική διαδρομή - Καθορίστε τη διαδρομή που σχετίζεται με την κλάση στο πακέτο.

128. Είναι υποχρεωτική η εισαγωγή πακέτου java.lang;

Όχι, δεν είναι υποχρεωτικό να εισαγάγετε πακέτο java.lang καθώς εισάγεται από την JVM από προεπιλογή.

129. Μπορούμε να εισαγάγουμε το ίδιο πακέτο / κλάση δύο φορές και πώς το φορτώνει η JVM;

Ναι, μπορούμε να εισαγάγουμε το ίδιο πακέτο / τάξη πολλές φορές. Ωστόσο, το JVM θα το φορτώσει μόνο μία φορά εσωτερικά ανεξάρτητα από το πόσες φορές το εισαγάγουμε.

130. Τι είναι μια στατική εισαγωγή;

Υποστηρίζει Java 5 και άνω στατική εισαγωγή.  Αυτό σημαίνει κατά τη χρήση της στατικής εισαγωγής, δεν χρειάζεται να καθορίσουμε το όνομα της κλάσης κατά την πρόσβαση στα πεδία ή τις μεθόδους της.

import static java.lang.System.*;
public class StaticImportDemo {
  public static void main(String[] args) {
    out.println("Exmaple of static import");
    
  }
}

131. Τι είναι ο χειρισμός εξαιρέσεων στην Java;

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

132. Ποιοι είναι οι διαφορετικοί τύποι εξαιρέσεων που μπορούν να προκύψουν στην Java;

Υπάρχουν δύο τύποι εξαιρέσεων που μπορούν να προκύψουν στην Java:

  • Ελεγμένες εξαιρέσεις: Μπορούμε επίσης να τις ονομάσουμε ως σύνταξη εξαιρέσεις που σημαίνει ότι ο μεταγλωττιστής τις χειρίζεται κατά τη σύνταξη του κώδικα. Με άλλα λόγια, ελέγχει την εξαίρεση κατά τη σύνταξη και προειδοποιεί τον προγραμματιστή ότι υπάρχουν πιθανότητες να συμβεί μια εξαίρεση. Σε αυτήν την περίπτωση, ο προγραμματιστής πρέπει να το χειριστεί στον κώδικα.
  • Μη ελεγμένες εξαιρέσεις: Μπορούμε επίσης να τις καλέσουμε εξαιρέσεις χρόνου εκτέλεσης από τότε συμβαίνει κατά την εκτέλεση του προγράμματος. Είναι πολύ σημαντικό για τον προγραμματιστή να τα χειριστεί για έξοδο με ασφάλεια από την εκτέλεση κώδικα όταν αντιμετωπίζει μια απροσδόκητη κατάσταση. Παράδειγμα: ArrayIndexOutOfBoundException, NullPointerException κ.λπ.

133. Ποια είναι η ιεραρχία των τάξεων εξαίρεσης Java;

Η βασική κλάση των εξαιρέσεων Java είναι η κλάση java.lang.Throwable που περιέχει δύο υποκατηγορίες: Σφάλμα και εξαίρεση.

Εξαίρεση παράδοσης στην Java

134. Ποια είναι η διαφορά μεταξύ ελεγμένων και μη ελεγμένων εξαιρέσεων;

Η κύρια διαφορά είναι ότι οι ελεγμένες εξαιρέσεις αντιμετωπίζονται κατά τη διάρκεια της μεταγλώττισης, ενώ οι μη ελεγμένες εξαιρέσεις αντιμετωπίζονται κατά τη διάρκεια του χρόνου εκτέλεσης.

135. Ποια είναι η βασική κατηγορία για εξαίρεση και σφάλμα;

Η βασική κλάση Exception and Error είναι η κατηγορία Throwable που ανήκει στο πακέτο java.lang.

136. Είναι απαραίτητο κάθε δοκιμαστικό μπλοκ να ακολουθείται από ένα μπλοκ catch;

Όχι, δεν είναι απαραίτητο. ΕΝΑ δοκιμάστε μπλοκ πρέπει να ακολουθείται είτε από ένα catch μπλοκ ή τελικά μπλοκ. Η μέθοδος θα πρέπει να δηλώνει τον τύπο εξαιρέσεων που μπορούν να προκύψουν χρησιμοποιώντας το ρίχνει τη λέξη-κλειδί.

public class Test {

  public static void main(String[] args) {
    try {
      int a = 5;
      System.out.println(a/0);
    }
    finally {
      System.out.println("Finally block");
    }	

  }

}
Finally block
Exception in thread "main" java.lang.ArithmeticException: / by zero
  at Test.main(Test.java:6)

137. Ποια είναι η έξοδος του παρακάτω κώδικα;

public class UncheckedException {
  
  int a = 10;
  int b = 0;
  public void divide() {
    try {
      int result = a/b;
      System.out.println("Result: " + result);
    }
    catch(Exception e) {
      System.out.println(e);
    }
    catch(ArithmeticException e) {
      System.out.println("Division by 0 is not allowed");
    }
    finally {
      System.out.println("Divide method executed");	
    }
    
  }

  public static void main(String[] args) {
    UncheckedException uce = new UncheckedException();
    uce.divide();

  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  Unreachable catch block for ArithmeticException. It is already handled by the catch block for Exception

Ο παραπάνω κώδικας ρίχνει το σφάλμα συλλογής, δεδομένου ότι αρχικά πιάσαμε την εξαίρεση χρησιμοποιώντας την κατηγορία Exception. Σε αυτήν την περίπτωση, δεν θα φτάσει ποτέ στο μπλοκ συλλογής ArithmeticException, δεδομένου ότι το Exception είναι η γονική τάξη για όλους τους τύπους εξαιρέσεων. Πρέπει να χρησιμοποιούμε το Exception class catch block πάντα ως το τελευταίο μπλοκ.

138. Τι είναι τελικά το μπλοκ;

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

139. Μπορούμε να χρησιμοποιήσουμε τελικά μπλοκ χωρίς μπλοκ catch;

Ναι, μπορούμε να χρησιμοποιήσουμε finally μπλοκ χωρίς μπλοκ, αλλά πρέπει να ακολουθήσει το try μπλοκ αντ 'αυτού.

140. Σε ποια κατάσταση το μπλοκ δεν θα εκτελεστεί ποτέ;

Υπάρχουν 2 καταστάσεις στις οποίες το μπλοκ επιτέλους δεν θα εκτελεστεί ποτέ:

  • Όταν πραγματοποιείται έξοδος συστήματος χρησιμοποιώντας το System.exit()
  • Όταν παρουσιαστεί ανεπανόρθωτο σφάλμα που κάνει τη διαδικασία να ακυρωθεί.

141. Ποια είναι η διαφορά μεταξύ λέξης-κλειδιού ρίψης και ρίψης στην Java;

Java ρίξτεΗ Java ρίχνει
Χρησιμοποιείται μέσα στη μέθοδοΧρησιμοποιείται στη δήλωση μεθόδου
Χρησιμοποιείται για να ρίξει μια νέα εξαίρεση μέσα στη μέθοδοΧρησιμοποιείται για να δηλώσει μια εξαίρεση που μπορεί να προκύψει μέσα στη μέθοδο
Μπορούμε να ρίξουμε μόνο μία εξαίρεση κάθε φοράΜπορούμε να χειριστούμε πολλές εξαιρέσεις ταυτόχρονα στη δήλωση μεθόδου
Μπορεί να χρησιμοποιηθεί μόνο με ανεξέλεγκτη εξαίρεση.Μπορεί να χρησιμοποιηθεί τόσο για ελεγμένες όσο και για μη ελεγμένες εξαιρέσεις
Δεν απαιτείται δοκιμαστικό catch για την αντιμετώπιση της εξαίρεσηςΕίναι η ευθύνη της καλούμενης μεθόδου να χειριστεί την εξαίρεση χρησιμοποιώντας το try-catch

142. Ποια είναι η έξοδος του παρακάτω κώδικα;

public class Test {

  public static void main(String[] args) {
    try {
      throw 10;
    }
    catch(Exception e) {
      System.out.println(e);
    }
    finally {
      System.out.println("Finally block");
    }	

  }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  No exception of type int can be thrown; an exception type must be a subclass of Throwable

  at Test.main(Test.java:5)

Θα ρίξει ένα σφάλμα συλλογής αφού δεν μπορούμε να ρίξουμε μια ακέραια τιμή. Η εξαίρεση που ρίχνεται πρέπει να είναι μια υποκατηγορία του Throwable.

143. Ποια είναι η έξοδος του παρακάτω κώδικα;

import java.util.LinkedList;

class OwnException extends Exception {
  String message;
  OwnException(String s) {
    message = s;
  }
  
  public String toString() {
    return ("Exception: " + message);
  }
}
public class CustomException {

  public static void main(String[] args) {
    try {
      throw new OwnException("My own custom exception");
    }
    catch(Exception e) {
      System.out.println(e);
    }

  }

}
Exception: My own

εξατομικευμένη εξαίρεση

Εκτυπώνει το μήνυμα εξαίρεσης που περνάμε χρησιμοποιώντας τη λέξη-κλειδί ρίψης. Εδώ δημιουργούμε μια προσαρμοσμένη εξαίρεση και ρίχνουμε την εξαίρεση στο μπλοκ δοκιμής.

144. Μπορούμε να επαναπροσδιορίσουμε μια εξαίρεση;

Ναι, μπορούμε να επαναπροσδιορίσουμε μια εξαίρεση.

145. Μπορεί μια δευτερεύουσα μέθοδος να δηλώσει μια εξαίρεση ακόμα και αν η μητρική τάξη δεν κάνει εξαίρεση;

Ναι, η παράκαμψη μέθοδος στην υποκατηγορία μπορεί να ρίξει μια εξαίρεση υπό την προϋπόθεση ότι είναι μια μη ελεγμένη εξαίρεση. Σε αυτήν την περίπτωση, δεν επιτρέπει τη ρίψη ελεγχόμενης έκθεσης.

146. Τι είναι η διάδοση εξαιρέσεων;

Η διάδοση εξαιρέσεων είναι η διαδικασία όπου ο χειρισμός εξαιρέσεων μετακινείται από την κορυφή προς το κάτω μέρος της στοίβας μέχρι να βρει τον κατάλληλο χειριστή για να πιάσει.

public class PropagationDemo {

  void display() {
    int a = 10/0;
  }
  void test() {
    display();
  }
  void show() {
    try {
      test();
    }
    catch(Exception e) {
      System.out.println("Exception handled in show method");
    }
  }
  public static void main(String[] args) {
    PropagationDemo p = new PropagationDemo();
    p.show();

  }

}
Exception handled in show method

Στο παραπάνω παράδειγμα, εμφανίζεται μια εξαίρεση στη μέθοδο εμφάνισης (). Δεδομένου ότι δεν αντιμετωπίζεται με αυτήν τη μέθοδο, μεταδίδεται στη μέθοδο δοκιμής () από την οποία κλήθηκε. Δεν αντιμετωπίζεται επίσης εδώ, ελέγχει περαιτέρω την επόμενη μέθοδο από την οποία κλήθηκε το τεστ. Τέλος, χειρίζεται τη μέθοδο εκπομπής.

147. Ποια είναι η έξοδος του παρακάτω κώδικα;

public class Test {

  void m() {
    try {
      System.out.println("Inside m method");
      n();
    }
    catch(Exception e) {
      System.out.println("Exception caught in m method");
    }
  }
  void n() throws Exception{
    try {
      System.out.println("Inside n method");
      p();
    }
    catch(Exception e) {
      throw new Exception();
    }
    
  }
  void p() throws Exception {
    try {
      System.out.println("Inside p method");
      throw new Exception();
    }
    finally {
      System.out.println("Inside finally block");
    }
    
  }
  public static void main(String[] args) {
    Test t = new Test();
    t.m();
  }

}
Inside m method
Inside n method
Inside p method
Inside finally block
Exception caught in m method

Από την κύρια μέθοδο, καλεί το Μ() μέθοδος που εκτυπώνει μια γραμμή και στη συνέχεια καλεί το ν () μέθοδος. Μέσα σε αυτήν τη μέθοδο, εκτυπώνει μια άλλη γραμμή και στη συνέχεια καλεί το Π() μέθοδος. Εκτυπώνει μια γραμμή και στη συνέχεια ρίχνει μια εξαίρεση. Από finally Το μπλοκ εκτελείται πάντα, το εκτελεί πρώτα και μεταφέρει την εξαίρεση στο ν () μέθοδος. Αυτό διαδίδει και πάλι την εξαίρεση στο Μ() μέθοδος που χειρίζεται την εξαίρεση.

148. Ποια είναι η έξοδος του παρακάτω κώδικα;

public class Demo {

  int x;
  Demo(int x) {
    this.x = x;
  }
  
  public int sum() {
    x = x  + 5;
    try {
      x = x + 5;
      
      try {
        x = x * 5;
        throw new Exception();
      }
      catch(Exception e) { 
        x = x - 5;
      }
    }
    catch(Exception e) {
      x = x - 5;
    }
    
    return x;
  }
  public static void main(String[] args) {
    Demo d = new Demo(5);
    int result = d.sum();
    System.out.println("Value of x: " + result);

  }

}
Value of x: 70

Ο κατασκευαστής αρχικοποιεί αρχικά την τιμή x σε 5 κατά τη δημιουργία παρουσίας. Στη συνέχεια καλεί τη μέθοδο αθροίσματος όπου προσθέτει 5. Τώρα x = 10. Μέσα στο πρώτο μπλοκ δοκιμής, προσθέτει ένα άλλο 5 που σημαίνει x = 15. Στο εσωτερικό ένθετης δοκιμής, πολλαπλασιάζεται επί 5 και ως εκ τούτου x = 75. Τώρα, ρίχνει μια νέα εξαίρεση, η οποία πιάνεται από το εσωτερικό μπλοκ σύλληψης όπου αφαιρεί το 5. Ως εκ τούτου, το τελικό αποτέλεσμα είναι 70. Το εξωτερικό μπλοκ σύλληψης δεν θα εκτελεστεί ποτέ, καθώς δεν υπάρχει καμία εξαίρεση.

149. Τι είναι μια πισίνα String;

Το String stable pool είναι μια ειδική μνήμη για την αποθήκευση των αντικειμένων String. Όταν δημιουργούμε μια κυριολεκτική συμβολοσειρά, το JVM ελέγχει πρώτα στο "string stable pool" εάν υπάρχει η συμβολοσειρά. Εάν δεν υπάρχει, το JVM δημιουργεί μια νέα παρουσία συμβολοσειράς, διαφορετικά θα επιστραφεί μόνο μια αναφορά στην ομαδοποιημένη παρουσία. Για παράδειγμα, στην παρακάτω περίπτωση, και τα δύο αντικείμενα συμβολοσειράς έχουν την ίδια τιμή. Ως εκ τούτου, δημιουργείται μόνο 1 αντικείμενο (δηλ. S1) και το s2 θα έχει την αναφορά στο s1. Αυτό σημαίνει, ανεξάρτητα από πόσες μεταβλητές συμβολοσειράς δημιουργούμε με την ίδια τιμή, μόνο 1 παρουσία θα δημιουργηθεί στο σύνολο σταθερών συμβολοσειρών.

String s1 = "Java language"; 
String s2 = "Java language";

Χορδές στην Ιάβα

150. Τι είναι μια αμετάβλητη συμβολοσειρά στην Java;

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

public class StringConcat {

  public static void main(String[] args) {
    String s1 = "Hello,";
    String s2 = s1.concat("How are you?");
    System.out.println(s1);
    System.out.println(s2);
  }

}
Hello,
Hello,How are you?

Παρόλο που συνδυάζουμε μια νέα συμβολοσειρά σε αντικείμενο s1, η τιμή του αντικειμένου s1 παραμένει αμετάβλητη. Ωστόσο, μπορούμε να αποθηκεύσουμε την συνδυασμένη τιμή σε ένα νέο αντικείμενο συμβολοσειράς.

151. Γιατί τα αντικείμενα String είναι αμετάβλητα στην Java;

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

152. Ποιοι είναι οι διαφορετικοί τρόποι δημιουργίας ενός αντικειμένου συμβολοσειράς;

Μπορούμε να δημιουργήσουμε ένα αντικείμενο συμβολοσειράς με τους παρακάτω 2 τρόπους:

  • Χρησιμοποιώντας συμβολοσειρά κυριολεκτικά: Αυτός είναι ο πιο άμεσος τρόπος δημιουργίας μιας συμβολοσειράς στην Java. Μπορούμε να δημιουργήσουμε μια συμβολοσειρά περικλείοντας την τιμή σε διπλά εισαγωγικά. Εδώ η μεταβλητή «τιμή» του τύπου String κρατά τη συμβολοσειρά που ονομάζεται «γλώσσα Java».
    String value = "Java language";

    Όταν δημιουργούμε μια συμβολοσειρά συμβολοσειράς, το JVM ελέγχει πρώτα στο "string stable pool". Εάν υπάρχει, τότε επιστρέφει μόνο την αναφορά στο σύνολο παρουσιών αλλιώς δημιουργεί μια νέα παρουσία.

  • Χρήση της νέας λέξης-κλειδιού: Όταν θέλουμε να έχουμε 2 διαφορετικά αντικείμενα με την ίδια τιμή συμβολοσειράς, τότε δημιουργούμε μια συμβολοσειρά χρησιμοποιώντας το νέος λέξη-κλειδί όπως περιγράφεται παρακάτω. Σε αυτήν την περίπτωση, το JVM δημιουργεί 2 διαφορετικά αντικείμενα συμβολοσειράς στη σωστή μνήμη.
    String s1 = new String("Java");
    String s2 = new String("Java");

153. Πόσα αντικείμενα θα δημιουργηθούν στον παρακάτω κώδικα;

String a = "Java";
String b = "Java";
String c = "Java";

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

154. Γιατί η Java χρησιμοποιεί την έννοια των String literals;

Η Java χρησιμοποιεί γραμματοσειρές String για τη διαχείριση της μνήμης αποτελεσματικά, καθώς δεν δημιουργεί νέες παρουσίες για την ίδια τιμή.

155. Πόσα αντικείμενα θα δημιουργηθούν στον παρακάτω κώδικα;

String s = new String("Java");

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

156. Ποια είναι η έξοδος του παρακάτω κώδικα;

public class Test {

  public static void main(String[] args) {
    String s1 = "Java language";
    String s2 = new String("Java language");
    if(s1 == s2)
      System.out.println("s1 == s2");
    if(s1.equals(s2))
      System.out.println("s1.equal(s2)");

  }

}
s1.equal(s2)

Παρόλο που και τα δύο αντικείμενα συμβολοσειράς έχουν το ίδιο περιεχόμενο, οι αναφορές τους είναι διαφορετικές αφού δημιουργούνται με διαφορετικούς τρόπους. Ως εκ τούτου == επιστρέφει false αφού ελέγχει για αναφορές και η μέθοδος ισούται με () επιστρέφει true αφού ελέγχει για το περιεχόμενο.

157. Ποια είναι η έξοδος του παρακάτω κώδικα;

public class Test {

  public static void main(String[] args) {
    String s1 = "Java language";
    String s2 = new String("Java language");
    s2 = s2.intern();
    System.out.println(s1==s2);
    
  }

}
true

Η μέθοδος intern επιστρέφει μια κανονική αναπαράσταση της συμβολοσειράς που σημαίνει ότι επιστρέφει μια αναφορά στην ισοδύναμη συμβολοσειρά από την ομάδα. Ως εκ τούτου, τόσο το s1 όσο και το s2 θα έχουν την ίδια αναφορά.

158. Ποιες είναι οι διαφορές μεταξύ String και StringBuffer;

κορδόνιStringBuffer
Είναι αμετάβλητοΕίναι μεταβλητή
Η διαδικασία συνένωσης είναι πιο αργήΗ διαδικασία συνένωσης είναι ταχύτερη
Αντικαθιστά την ισοδύναμη μέθοδο της κλάσης αντικειμένων σε σύγκρισηΔεν παρακάμπτει τη μέθοδο ίσων
Καταναλώνει περισσότερη μνήμηΚαταναλώνει λιγότερη μνήμη

159. Ποιες είναι οι διαφορές μεταξύ StringBuffer και StringBuilder;

StringBufferStringBuilder
Είναι ασφαλές για νήματαΔεν είναι ασφαλές για νήματα
Είναι συγχρονισμένοΔεν είναι συγχρονισμένο
Η απόδοση είναι πιο αργήΗ απόδοση είναι ταχύτερη
Είναι διαθέσιμο από το JDK 1.0Είναι διαθέσιμο από το JDK 1.5

160. Πώς να δημιουργήσετε μια αμετάβλητη τάξη στην Java;

Μπορούμε να δημιουργήσουμε μια αμετάβλητη τάξη στην Java κάνοντας όλα τα πεδία ως final μαζί με την τάξη ως final. Αυτό συμβαίνει επειδή δεν μπορούμε να αλλάξουμε τις τιμές του final μελών.

public final class Sample {

  final int accountNumber;
  
  public Sample(int accno) {
    this.accountNumber = accno;
  }

  public int getAccountNumber() {
    return accountNumber;
  }
}

161. Ποια είναι η χρήση της μεθόδου toString () στην Java;

Στην Java, η μέθοδος toString () επιστρέφει μια παράσταση συμβολοσειράς του αντικειμένου. Ο μεταγλωττιστής καλεί εσωτερικά τη μέθοδο toString () όποτε εκτυπώνουμε ένα αντικείμενο. Αυτό διευκολύνει τη σύνταξη κώδικα.

162. Γιατί το charArray () προτιμάται από το String για αποθήκευση κωδικού πρόσβασης;

Μια συμβολοσειρά αποθηκεύεται στη μνήμη έως ότου συλλεχθεί σκουπίδια. Ως εκ τούτου, εάν αποθηκεύσουμε κωδικούς πρόσβασης στο String, παραμένει στη μνήμη για μεγαλύτερο χρονικό διάστημα και μπορεί να οδηγήσει σε απειλή ασφαλείας, επειδή μπορούμε να εξαγάγουμε την απόρριψη μνήμης. Από την άλλη πλευρά, εάν ένας κωδικός πρόσβασης είναι αποθηκευμένος στο charArray, μπορούμε να τον θέσουμε αμέσως σε κενό μόλις χρησιμοποιηθεί που αποτρέπει τις απειλές ασφαλείας.

163. Γράψτε ένα πρόγραμμα Java για να μετρήσετε τον αριθμό των λέξεων σε μια συμβολοσειρά.

public class CountWords {

  public static void main(String[] args) {
    String s = "Welcome to Java programming";
    String[] arr = s.split(" ");
    System.out.println("Number of words: " + arr.length);

  }

}
Number of words: 4

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

164. Καταγράψτε μερικές τάξεις που υπάρχουν στο πακέτο java.util.regex

Οι ακόλουθες τάξεις ή διεπαφές υπάρχουν στο πακέτο java.util.regex

  • Διεπαφή MatchResult
  • Κατηγορία αντιστοίχισης
  • Κατηγορία προτύπων
  • Κατηγορία PatternSyntaxException

165. Πώς διαφέρουν οι μεταχαρακτήρες από τους συνηθισμένους χαρακτήρες;

Οι μεταχαρακτήρες είναι ειδικοί χαρακτήρες ως προς το α κοινή έκφραση. Λίγοι μεταχαρακτήρες είναι $ ^ *, {[). Για να τους αντιμετωπίσουμε ως κανονικούς χαρακτήρες, πρέπει να χρησιμοποιήσουμε μια ανάστροφη κάθετο πριν από αυτούς τους χαρακτήρες αλλιώς θα θεωρηθούν ως ειδικοί χαρακτήρες.

166. Γράψτε μια κανονική έκφραση για να επικυρώσετε έναν κωδικό πρόσβασης με όρους: Ο κωδικός πρόσβασης πρέπει να ξεκινά με το αλφάβητο, ακολουθούμενο από αλφαριθμητικό του οποίου το μήκος πρέπει να είναι μεταξύ 8 και 15.

Η κανονική έκφραση είναι ^ [a-zA-Z] [a-zA-Z0-9] {8-15} όπου ^ δηλώνει μια κανονική έκφραση, ακολουθούμενη από αλφάβητο και μετά αλφαριθμητικό. Το {8-15} υποδηλώνει ότι το μήκος πρέπει να είναι μεταξύ 8 και 15.

167. Ποια είναι η έξοδος του παρακάτω κώδικα;

import java.util.regex.Pattern;

public class RegEx {

  public static void main(String[] args) {
    System.out.println(Pattern.matches(".a..", "Java"));
    System.out.println(Pattern.matches("..a.", "Java"));
    System.out.println(Pattern.matches("a...", "Java"));
    System.out.println(Pattern.matches("...a", "Java"));

  }

}
true
false
false
true

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

168. Ποια είναι τα πλεονεκτήματα των εσωτερικών τάξεων Java;

  • Είναι χρήσιμο εάν μια τάξη χρειάζεται πρόσβαση σε μία μόνο κλάση που μπορεί να εφαρμοστεί χρησιμοποιώντας εσωτερικές τάξεις ή ένθετες τάξεις
  • Η εσωτερική τάξη μπορεί να έχει πρόσβαση σε όλα τα πεδία και τα μέλη της εξωτερικής τάξης συμπεριλαμβανομένων των ιδιωτικών πεδίων.
  • Προωθεί τη βελτιστοποίηση και τη συντήρηση κώδικα.

169. Τι είναι η ένθετη τάξη;

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

public class classA {
  //code
  public class classB {
    //code
  }
}

170. Ποια είναι τα μειονεκτήματα των ένθετων τάξεων;

  • Αυξάνει τον συνολικό αριθμό μαθημάτων.
  • Αυξάνει το φορτίο στο JVM αφού πρέπει να εκτελεί συγκεκριμένες λειτουργίες που σχετίζονται με κλάσεις.

171. Ποιοι είναι οι τύποι εσωτερικών τάξεων που χρησιμοποιούνται στην Java;

  • Ένθετες εσωτερικές τάξεις
  • Μέθοδος τοπικών εσωτερικών τάξεων
  • Ανώνυμες εσωτερικές τάξεις
  • Στατικές ένθετες τάξεις

172. Ποια είναι η διαφορά μεταξύ της ένθετης τάξης και της εσωτερικής τάξης;

Η κύρια διαφορά είναι οι εσωτερικές τάξεις είναι μη στατικές ένθετες τάξεις που σημαίνει ότι είναι μέρος των ένθετων τάξεων.

173. Μπορούμε να έχουμε πρόσβαση στην μη τελική τοπική μεταβλητή μέσα στην τοπική εσωτερική τάξη;

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

174. Πόσα αρχεία τάξης δημιουργούνται κατά τη σύνταξη του αρχείου εξωτερικής κλάσης στον παρακάτω κώδικα;

public class classA {
  int a;
  class classB {
    int b;
  }
  class classC {
    int c;
  }
  
  public static void main(String[] args) {
    classA ca = new classA();
  }
}

Θα δημιουργηθούν 3 αρχεία τάξης - classA.class, classA $ classB.class και classA $ classC.class

175. Τι είναι μια ανώνυμη εσωτερική τάξη;

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

class Test {
  public void print() {
    System.out.println("Test print method");
  }
}

class AnonymousDemo {
  
  public void showDemo() {
    //Anonymous class
    Test t = new Test() {
      public void print() {
        System.out.println("Anonymous Demo print method");
      }
    };
    t.print();
  }
}
public class AnonymousClass {
  
  public static void main(String[] args) {
    AnonymousDemo a = new AnonymousDemo();
    a.showDemo();

  }

}
Anonymous Demo print method

Μέσα στην τάξη AnonymousDemo δημιουργούμε μια ανώνυμη τάξη επεκτείνοντας την τάξη δοκιμής και παρακάμπτοντας τη μέθοδο εκτύπωσης. Ως εκ τούτου, ενώ καλεί τη μέθοδο showDemo (), καλεί τη μέθοδο ανώνυμης εκτύπωσης ().

176. Τι είναι η ένθετη διεπαφή;

Μια διεπαφή σε μια άλλη διεπαφή ή μια τάξη είναι μια ένθετη διεπαφή. Ένα καλύτερο παράδειγμα είναι το Είσοδος διεπαφή. Αυτό ορίζεται μέσα στο Χάρτης διεπαφή. Γι 'αυτό το έχουμε πρόσβαση χρησιμοποιώντας Χάρτης. Είσοδος και δεν μπορεί να έχει άμεση πρόσβαση στη διεπαφή εισόδου. Η κύρια χρήση της ένθετης διεπαφής είναι ότι επιτρέπει την εφαρμογή μόνο μιας συγκεκριμένης διεπαφής εντός μιας ομαδοποιημένης διεπαφής. Μπορούμε πάντα να έχουμε πρόσβαση στην εσωτερική διεπαφή μόνο χρησιμοποιώντας την εξωτερική διεπαφή. Από προεπιλογή, οι ένθετες διεπαφές είναι στατικές και δημόσιες. Ωστόσο, μπορούμε να αλλάξουμε τον τύπο πρόσβασης της εσωτερικής διεπαφής.

177. Μπορεί μια τάξη να έχει μια διεπαφή;

Ναι, μπορούμε να ορίσουμε μια διεπαφή μέσα σε μια τάξη. Αυτό ονομάζεται επίσης ένθετη διεπαφή.

178. Μπορεί μια διεπαφή να έχει τάξη;

Ναι, μια διεπαφή μπορεί να έχει μια κλάση που είναι στατική από προεπιλογή.

179. Τι είναι η συλλογή απορριμμάτων;

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

180. Τι είναι το gc ();

Η μέθοδος gc () είναι μέρος της κλάσης System and Runtime που χρησιμοποιείται για την επίκληση του συλλέκτη απορριμμάτων για τη διαδικασία καθαρισμού. Με την επίκληση αυτής της μεθόδου, ελευθερώνει τη μνήμη των αχρησιμοποίητων αντικειμένων.

public class GarbageDemo {

  public void finalize() {
    System.out.println("Garbage collected");
  }
  public static void main(String[] args) {
    GarbageDemo g1 = new GarbageDemo();
    GarbageDemo g2 = new GarbageDemo();
    
    g1 = null;
    g2 = null;
    System.gc();

  }

}

Καλεί τη μέθοδο οριστικοποίησης όταν καλείται η μέθοδος gc () και ελευθερώνει το χώρο των αντικειμένων g1 και g2. Ως εκ τούτου, καλεί τη μέθοδο οριστικοποίησης δύο φορές.

181. Πώς ελέγχεται η συλλογή απορριμμάτων;

Η διαδικασία συλλογής απορριμμάτων ελέγχεται αυτόματα από την Java Virtual Machine (JVM) όταν υπάρχει λιγότερη μνήμη ή εξαντλείται η μνήμη. Μπορούμε επίσης να τον ελέγξουμε εξωτερικά καλώντας τη μέθοδο System.gc () για να καθαρίσουμε τα αχρησιμοποίητα αντικείμενα και έτσι να ελευθερώσουμε τη μνήμη.

182. Πώς μπορούμε να αναφέρουμε ένα αντικείμενο στην Java;

Υπάρχουν 3 τρόποι για ένα αντικείμενο χωρίς αναφορές στην Java:

  • Ακύρωση του αντικειμένου ή εκχώρηση μηδενικής τιμής στο αντικείμενο.
    Student s = new Student();
    s = null;
  • Εκχώρηση αναφοράς σε άλλο αντικείμενο.
    Student s1 = new Student();
    Student s2 = new Student();
    s1 = s2;
  • Ανώνυμο αντικείμενο.
    new Student();

183. Ποια είναι η χρήση της μεθόδου finalize ();

Η μέθοδος οριστικοποίησης () είναι μέρος της διαδικασίας συλλογής απορριμμάτων που καλείται μόλις συλλεχθούν τα σκουπίδια. Ο συλλέκτης απορριμμάτων διαγράφει τα αντικείμενα που δημιουργούνται χρησιμοποιώντας τη νέα λέξη-κλειδί. Για άλλους, μπορούμε να χρησιμοποιήσουμε τη μέθοδο οριστικοποίησης για τον καθαρισμό. Η μέθοδος οριστικοποίησης υπάρχει στην κλάση Αντικειμένου και ως εκ τούτου μπορεί να παρακαμφθεί από οποιαδήποτε κλάση, δεδομένου ότι η κλάση Αντικειμένου είναι η superclass για όλες τις τάξεις.

184. Μπορούμε να αναφέρουμε ξανά ένα αντικείμενο χωρίς αναφορά;

Ναι, μπορούμε να αναφέρουμε ξανά ένα αντικείμενο χωρίς αναφορά.

185. Ποιο είναι το όνομα του νήματος συλλογής απορριμμάτων;

Το νήμα συλλογής απορριμμάτων χρησιμοποιεί νήμα Daemon.

186. Ποια είναι η διαφορά μεταξύ τελικού, τελικά και οριστικοποίησης;

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

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

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

187. Ποια είναι η χρήση του Runtime class;

Η κλάση χρόνου εκτέλεσης είναι μια υποκατηγορία της κλάσης αντικειμένων που παρέχει πληροφορίες σχετικά με το τρέχον περιβάλλον λειτουργίας. Μπορούμε να χρησιμοποιήσουμε το getRuntime () μέθοδος για να λάβετε μια αναφορά στο τρέχον αντικείμενο χρόνου εκτέλεσης. Έχει διάφορες μεθόδους όπως gc (), έξοδος (), διακοπή (), κ.λπ.

188. Πώς να καλέσετε μια εξωτερική διαδικασία στην Java;

import java.io.IOException;

public class Sample {

  public static void main(String[] args) throws IOException {
    Runtime.getRuntime().exec("notepad");

  }

}

189. Ποια είναι η ιεραρχία των τάξεων InputStream και OutputStream;

Ιεραρχία StreamClass

190. Τι είναι το IOStream;

Το Java IOStream είναι μια διαδικασία για την εκτέλεση εργασιών ανάγνωσης και εγγραφής. Η ροή είναι μια ακολουθία δεδομένων με τη μορφή byte. Ένα InputStream χρησιμοποιείται για την ανάγνωση δεδομένων και ένα OutputStream χρησιμοποιείται για την εγγραφή δεδομένων. Υπάρχουν 3 διαφορετικοί τύποι ροών στην Java:

  • Ροή εισόδου: System.in - Χρησιμοποιείται για την ανάγνωση δεδομένων από τη ροή εισόδου.
  • Ροή εξόδου: System.out - Χρησιμοποιείται για την εγγραφή δεδομένων στη ροή εξόδου.
  • Ροή σφαλμάτων: System.err - Εκτυπώνει μηνύματα σφάλματος.

191. Ποιες είναι οι διαφορές μεταξύ των τάξεων Reader / Writer και των κλάσεων InputStream / OutputStream;

Κατηγορία αναγνωστών / συγγραφέων:

  • Είναι προσανατολισμένη στον χαρακτήρα και ονομάζεται τάξη CharacterStream
  • Εκτελεί λειτουργία εισόδου / εξόδου για το σύστημα Unicode 16-bit.
  • Τα πιο συχνά χρησιμοποιούμενα μαθήματα είναι το FileReader και το FileWriter.

Κατηγορία InputStream / OutputStream:

  • Είναι προσανατολισμένο σε byte και ονομάζεται τάξη ByteStream.
  • Εκτελεί λειτουργία εισόδου / εξόδου για 8-bit byte.
  • Οι πιο συχνά χρησιμοποιούμενες τάξεις είναι οι FileInputStream και FileOutputStream.

192. Ποιες είναι οι υπερ-περισσότερες κατηγορίες για όλες τις ροές;

Οι τάξεις ροής μπορούν να χωριστούν σε δύο τύπους: ByteStream CharacterStream.

Οι τάξεις ByteStream περιέχουν τάξεις InputStream και OutputStream. Το superclass για αυτές τις ροές είναι java.io.InputStream και java.io.OutputStream.

Το CharacterStream περιέχει τάξεις Reader και Writer. Το superclass είναι java.io.Reader και java.io.Writer.

193. Τι είναι το FileInputStream και το FileOutputStream;

Η κλάση FileInputStream χρησιμοποιείται για την ανάγνωση δεδομένων από το αρχείο εισαγωγής. Διαβάζει δεδομένα με τη μορφή byte. Μπορεί επίσης να χρησιμοποιηθεί για την ανάγνωση χαρακτήρων, αλλά το FileReader είναι μια καλύτερη επιλογή για δεδομένα με χαρακτήρα.

Η κλάση FileOutputStream χρησιμοποιείται για την εγγραφή δεδομένων στο αρχείο.

194. Ποια είναι η χρήση των κατηγοριών BufferedInputStream και BufferedOutputStream;

Τα μαθήματα BufferedInputStream και BufferedOutputStream χρησιμοποιούνται για την ανάγνωση και εγγραφή δεδομένων χρησιμοποιώντας μηχανισμό buffer. Γράφει δεδομένα σε ένα buffer αντί να τα γράφει απευθείας σε μια ροή. Ως εκ τούτου, κάνει τη λειτουργία ανάγνωσης και γραφής πιο γρήγορη.

195. Πώς να ορίσετε δικαιώματα σε ένα αρχείο στην Java;

Μπορούμε να αλλάξουμε τα δικαιώματα σε ένα αρχείο στην Java χρησιμοποιώντας την κατηγορία FilePermission. Αυτή η τάξη περιέχει δικαιώματα που σχετίζονται με έναν κατάλογο ή ένα αρχείο. Πρέπει να ορίσουμε τα δικαιώματα που σχετίζονται με τη διαδρομή αρχείου.

196. Τι είναι το FilterStreams;

Οι κλάσεις FilterStream παρέχουν επιπλέον λειτουργίες στις τάξεις ροής. Λειτουργεί σαν μια διεπαφή όπου διαβάζει τα δεδομένα, τα φιλτράρει και μετά διαβιβάζει τα φιλτραρισμένα δεδομένα στον καλούντα.

197. Τι είναι το φίλτρο εισόδου / εξόδου;

Το φίλτρο I / O εκτελεί λειτουργία φιλτραρίσματος στις ροές εισόδου / εξόδου, όπως χειρισμός δεδομένων ή τροποποίηση. Διαβάζει τα δεδομένα, τα φιλτράρει και μετά περνά τα φιλτραρισμένα δεδομένα. Υπάρχουν διαφορετικές ροές φίλτρων IO όπως το FilterInputStream και το FilterOutputStream.

198. Ποιοι είναι οι διαφορετικοί τρόποι ανάγνωσης εισόδου από την κονσόλα στην Java;

Υπάρχουν 3 διαφορετικοί τρόποι ανάγνωσης εισόδου από την κονσόλα στην Java:

    • BufferedInputStream: Αυτό διαβάζει την είσοδο από το System.in και την τυλίγει στο InputStreamReader και στη συνέχεια τη διαβιβάζει στο BufferedReader.
      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      
      public class BufferedReaderDemo {
      
        public static void main(String[] args) throws IOException {
          System.out.println("Enter a word: ");
          BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));   
              String value = reader.readLine();   
              System.out.println("Word is: " + value);     
      
        }
      
      }
      
      Enter a word: 
      Java
      Word is: Java
      

 

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

 

    • Αυτή η τάξη είναι μέρος του πακέτου java.util. Χρησιμοποιώντας διάφορες ενσωματωμένες μεθόδους, μπορεί να διαβάσει διαφορετικούς τύπους εισόδου.

 

import java.util.Scanner;
public class ScannerDemo1 {
  public static void main(String[] args) {
    System.out.println("Enter your name:");
    Scanner sc = new Scanner(System.in);
    String s = sc.nextLine();
    System.out.println("Your name is " + s);
    sc.close();
  }
}
Enter your name:
Ravi Kumar
Your name is Ravi Kumar
  • Μάθημα κονσόλας: Χρησιμοποιείται για τη λήψη της εισόδου από την κονσόλα.

199. Τι είναι η σειριοποίηση;

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

200. Πώς μπορείτε να κάνετε μια σειρά σειριοποιήσιμη;

Μπορούμε να κάνουμε μια σειρά σειριοποιήσιμων με την εφαρμογή της διεπαφής Serializable.

201. Πώς μπορείτε να αποφύγετε τη σειριοποίηση στην θυγατρική τάξη εάν η βασική κλάση εφαρμόζει τη σειριακή δυνατότητα διασύνδεσης;

Δεν είναι δυνατή η αποφυγή σειριοποίησης απευθείας σε μια θυγατρική τάξη εάν η βασική τάξη εφαρμόζει τη σειριακή δυνατότητα διασύνδεσης. Αλλά μπορούμε να εκτελέσουμε εφαρμόζοντας τις μεθόδους writeObject και readObject στην υποκατηγορία και ρίχνοντας το NotSerializableException.

202. Μπορεί να μεταφερθεί ένα σειριακό αντικείμενο μέσω δικτύου;

Ναι, είναι δυνατή η μεταφορά ενός σειριακού αντικειμένου μέσω δικτύου, καθώς είναι αποθηκευμένο στη μνήμη με τη μορφή byte. Είναι επίσης δυνατό να γράψετε σε μια βάση δεδομένων ή σε έναν δίσκο.

203. Τι είναι η αποεστεροποίηση;

Η αποερετοποίηση είναι η διαδικασία αποκατάστασης της κατάστασης αντικειμένου από τη μορφή byte ή την σειριακή κατάσταση.

204. Τι είναι μια παροδική λέξη-κλειδί;

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

205. Τι είναι εξωγενές;

Externalizable είναι μια διεπαφή που χρησιμοποιείται για την εγγραφή μιας κατάστασης αντικειμένου σε μια ροή byte σε συμπιεσμένη μορφή.

206. Ποια είναι η διαφορά μεταξύ διεπαφής Serializable και Externalizable;

SerializableΕξωτερικά
Είναι μια διεπαφή δείκτη που σημαίνει ότι δεν περιέχει μεθόδους.Δεν είναι μια διεπαφή δείκτη και περιέχει μεθόδους όπως writeExternal () και readExternal ()
Δεν καλεί κανέναν κατασκευαστή τάξης κατά τη σειριοποίησηΚαλεί τον δημόσιο προεπιλεγμένο κατασκευαστή
Η απόδοση είναι αργήΗ απόδοση είναι γρήγορη και καλύτερη
Η τάξη που εφαρμόζει τη διεπαφή δίνει την ευθύνη στον JVM για σειριοποίηση ενός αντικειμένου.Παρέχει την ευθύνη στον προγραμματιστή να γράψει τη δική του λογική.

207. Τι είναι ο προγραμματισμός υποδοχής στην Java;

Υποδοχή προγραμματισμού της επικοινωνίας μεταξύ 2 διαφορετικών κόμβων (υποδοχή) μέσω δικτύου. Με άλλα λόγια, δημιουργεί επικοινωνία μεταξύ εφαρμογών που εκτελούνται σε διαφορετικά JRE. σαν πελάτης και διακομιστής. Μπορεί να είναι προσανατολισμένη στη σύνδεση ή χωρίς σύνδεση. Για σύνδεση με προσανατολισμό, χρησιμοποιούμε τις κλάσεις Socket και SocketServer και για σύνδεση χωρίς σύνδεση, χρησιμοποιούμε κλάσεις DatagramSocket και DatagramPacket. Ο πελάτης πρέπει να γνωρίζει τη διεύθυνση IP του διακομιστή και τον αριθμό θύρας για να δημιουργήσει μια σύνδεση.

208. Τι είναι η πρίζα;

Η υποδοχή είναι ένα τελικό σημείο που διευκολύνει την επικοινωνία μεταξύ 2 εφαρμογών χρησιμοποιώντας TCP. Χρησιμοποιούμε την τάξη Socket για να δημιουργήσουμε μια πρίζα. Μια πρίζα χρησιμοποιεί τον αριθμό θύρας και τη διεύθυνση IP για να δημιουργήσει την επικοινωνία.

209. Ποια είναι τα βήματα για τη σύνδεση δύο υπολογιστών μέσω TCP;

  • Δημιουργήστε ένα αντικείμενο ServerSocket στο διακομιστή που δηλώνει τον αριθμό θύρας με τον οποίο πρέπει να γίνει η σύνδεση.
  • Επικαλέστε τη μέθοδο αποδοχής () στο διακομιστή που περιμένει έως ότου ο πελάτης επιχειρήσει να συνδεθεί με το διακομιστή στη συγκεκριμένη θύρα.
  • Εν τω μεταξύ, δημιουργήστε μια υποδοχή στην κλάση πελάτη χρησιμοποιώντας την τάξη Socket. Ο κατασκευαστής κλάσης Socket παίρνει τον αριθμό θύρας διακομιστή και το όνομα διακομιστή ως παραμέτρους.
  • Ο κατασκευαστής κλάσης Socket προσπαθεί να συνδεθεί στον διακομιστή με το καθορισμένο όνομα. Εάν είναι επιτυχής, ο πελάτης θα έχει ένα αντικείμενο υποδοχής για σύνδεση με τον διακομιστή.
  • Η μέθοδος accept () του διακομιστή επιστρέφει τώρα μια αναφορά στη νέα υποδοχή που δημιούργησε ο πελάτης.

210. Γράψτε ένα πρόγραμμα Java για να δημιουργήσετε μια σύνδεση μεταξύ πελάτη και διακομιστή.

Πλευρά του διακομιστή:

import java.io.DataInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {

  public static void main(String[] args) {
    try {
      ServerSocket ss = new ServerSocket(5555);
      Socket s = ss.accept();
      DataInputStream di = new DataInputStream(s.getInputStream()); 
      String str = (String)di.readUTF();
      System.out.println("Message: " + str);
      ss.close();
    }
    catch(Exception e) {
      System.out.println(e);
    }

  }

}

Πλευρά πελάτη:

import java.io.DataOutputStream;
import java.net.Socket;

public class ClientDemo {

  public static void main(String[] args) {
    try {
      Socket s = new Socket("localhost",5555);
      DataOutputStream dos = new DataOutputStream(s.getOutputStream());
      dos.writeUTF("Socket connection program");
      dos.flush();
      s.close();
    }
    catch(Exception e) {
      System.out.println(e);
    }

  }

}
Message: Socket connection program

211. Πώς να μετατρέψετε την αριθμητική διεύθυνση IP σε όνομα κεντρικού υπολογιστή;

Μπορούμε να χρησιμοποιήσουμε την κλάση InetAddress για να πάρουμε το όνομα του κεντρικού υπολογιστή χρησιμοποιώντας μεθόδους getByName ("ipaddress"). GetHostName ().

import java.io.*;
import java.net.*;
public class ConvertNumericToHost {

  public static void main(String[] args) {
    try {
      InetAddress ia = InetAddress.getByName("192.18.97.39");
      System.out.println("Host Name: " + ia.getHostName());
    }
    catch(Exception e) {
      System.out.println(e);
    }

  }

}
Host Name: oc-192-18-97-39.compute.oraclecloud.com

212. Τι είναι ο προβληματισμός στην Java;

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

213. Ποια είναι η χρήση της κλάσης java.lang.Class;

  • Παρέχει πολλές μεθόδους χρησιμότητας όπως getClass (), forName () κ.λπ.
  • Επιτρέπει τη δημιουργία μιας παρουσίας μιας κλάσης χωρίς τη χρήση του νέου χειριστή.
  • Παρέχει μεθόδους για να αλλάξετε τη συμπεριφορά χρόνου εκτέλεσης μιας τάξης
  • Παρέχει επίσης μεθόδους για τη λήψη των μεταδεδομένων μιας τάξης κατά τη διάρκεια του χρόνου εκτέλεσης.

214. Ποιοι είναι οι διαφορετικοί τρόποι εμφάνισης της τάξης της τάξης;

Υπάρχουν 3 διαφορετικοί τρόποι για να δημιουργήσετε ένα αντικείμενο για το Τάξη τάξη:

  • Class.forName ("class_name"): forName είναι η εργοστασιακή μέθοδος για τη δημιουργία μιας παρουσίας από το Τάξη Η τάξη δεν έχει κατασκευαστή. Πρέπει να καθορίσουμε το πλήρως αναγνωρισμένο όνομα κλάσης στην παράμετρο για την οποία πρέπει να δημιουργήσουμε μια παρουσία.
  • MyClass.class: Χρησιμοποιείται κυρίως για πρωτόγονα τύπους δεδομένων όταν ξέρουμε το όνομα της τάξης του. Εάν καθορίσουμε το .class μετά από ένα όνομα κλάσης, αντιπροσωπεύει ένα αντικείμενο για αυτήν την κλάση.
  • obj.getClass (): Είναι παρόν στην κλάση αντικειμένων και επιστρέφει την κλάση χρόνου εκτέλεσης του καθορισμένου αντικειμένου.

215. Ποια είναι η έξοδος του παρακάτω κώδικα;

class TestDemo {
  TestDemo() {
    System.out.println("Test class constructor");
  }
  
  public void print() {
    System.out.println("Print method in Test class");
  }
}
public class ReflectionDemo {

  public static void main(String[] args) throws InstantiationException, IllegalAccessException {
    try {
      Class a = Class.forName("TestDemo");
      TestDemo t = (TestDemo)a.newInstance();
      t.print();
      
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    

  }

}
Test class constructor
Print method in Test class

216. Ποια είναι η χρήση του javap;

Η εντολή javap παρέχει λεπτομέρειες σχετικά με τους κατασκευαστές, τις μεθόδους, τα πεδία της κλάσης στο αρχείο κλάσης.

217. Μπορείτε να αποκτήσετε πρόσβαση στην ιδιωτική μέθοδο εκτός του μαθήματος;

Ναι, είναι δυνατό να αλλάξετε τη συμπεριφορά χρόνου εκτέλεσης του μαθήματος με την προϋπόθεση ότι η τάξη δεν είναι ασφαλής.

218. Τι είναι οι τάξεις περιτυλίγματος;

Οι τάξεις Wrapper στην Java χρησιμοποιούνται για την πρόσβαση σε πρωτόγονους τύπους δεδομένων ως Objects. Αυτό χρησιμοποιείται κυρίως κατά τη χρήση μαζί με Συλλογές όπως ArrayList ή LinkedList όπου πρέπει να καθορίσουμε την τάξη περιτυλίγματος και όχι πρωτόγονη Τύπος δεδομένων. Υπάρχουν 8 τάξεις περιτυλίγματος για 8 πρωτόγονες τύπους δεδομένων στο πακέτο java.lang.

Πρωτόγονος τύπος δεδομένωνΚατηγορία περιτυλίγματος
booleanBoolean
byteΨηφιόλεξη
δεξαμενήChar
διπλασιαστείΔιπλό
φλοτέρφλοτέρ
intΑκέραιος αριθμός
μακρύςΜακρύς
μικρόςΜικρός

219. Τι εννοείτε με την αυτόματη αποστολή και αποσυμπίεση και πού το χρησιμοποιούμε;

Το Autoboxing είναι η διαδικασία με την οποία μετατρέπουμε πρωτόγονα Τύπος δεδομένων σε αντικείμενα. Π.χ .: int to Integer Unboxing είναι η διαδικασία με την οποία μετατρέπουμε το αντικείμενο σε πρωτόγονο τύπο δεδομένων. Π.χ .: Ακέραιος σε int.

Και οι δύο διαδικασίες συμβαίνουν αυτόματα στην Java, ωστόσο μπορούμε να κάνουμε εξωτερικά και στις παρακάτω περιπτώσεις:

  • Κατά τη χρήση συλλογών όπως ArrayList ή LinkedList.
  • Δημιουργία μιας παρουσίας παραμετροποιημένων τάξεων όπως το ThreadLocal
  • Όταν εκχωρούμε έναν πρωτόγονο τύπο σε έναν τύπο αντικειμένου.

220. Ποια είναι η έξοδος του παρακάτω κώδικα;

public class WrapperDemo {

  public static void main(String[] args) {
    Double d = new Double(45.45);
    Double f = new Double(55.55);
    if(d == f) {
      System.out.println("Both Double objects are equal");
    }
    else
      System.out.println("Both Double objects are not equal");
    

  }

}
Both Double objects are not equal

Η έξοδος εκτύπωσης "Και τα δύο διπλά αντικείμενα δεν είναι ίδια" αφού έχει 2 διαφορετικές αναφορές χρησιμοποιώντας τη νέα λέξη-κλειδί.

221. Τι είναι η κλωνοποίηση αντικειμένων;

Η κλωνοποίηση αντικειμένων είναι η διαδικασία δημιουργίας ενός ρηχού αντιγράφου του αντικειμένου. Μπορούμε να χρησιμοποιήσουμε τη μέθοδο clone () της κλάσης Object για να κλωνοποιήσουμε ένα αντικείμενο. Η κλάση πρέπει να εφαρμόσει το Cloneable interface όπου το αντικείμενο πρέπει να κλωνοποιηθεί αλλιώς θα ρίξει το CloneNotSupportedException.

222. Ποια είναι τα πλεονεκτήματα και τα μειονεκτήματα της κλωνοποίησης αντικειμένων;

Φόντα:

  • Και τα δύο αντικείμενα (το αρχικό αντικείμενο και το κλωνοποιημένο αντικείμενο) μπορούν να τροποποιηθούν ανεξάρτητα.
  • Η μέθοδος clone () είναι ο γρηγορότερος τρόπος αντιγραφής ενός πίνακα
  • Απαιτεί μόνο τη δημιουργία μιας αφηρημένης κλάσης με τη μέθοδο κλώνου () και ως εκ τούτου δεν απαιτεί επαναλαμβανόμενο κώδικα.

μειονεκτήματα:

  • Υποστηρίζει μόνο ρηχή αντιγραφή.
  • Δεν έχει κατασκευαστή.
  • Πρέπει να συμπεριλάβουμε πολλές συνταγές στον κώδικά μας για να εφαρμόσουμε τη μέθοδο κλώνου όπως την εφαρμογή της διεπαφής Cloneable, να ορίσουμε τη μέθοδο κλώνου και να χειριστούμε την εξαίρεση.
  • Δεδομένου ότι η διεπαφή Cloneable δεν έχει μεθόδους, πρέπει να καθοδηγήσουμε την JVM ότι πρέπει να εκτελέσουμε μια λειτουργία κλώνου.

223. Τι είναι η εγγενής μέθοδος;

Μια εγγενής μέθοδος είναι μια μέθοδος στην Java όπου μπορούμε να γράψουμε εφαρμογές σε άλλες γλώσσες εκτός από την Java.

224. Ποια είναι η χρήση της λέξης-κλειδιού ketat;

Η λέξη-κλειδί tightfp στην Java παρέχει το ίδιο αποτέλεσμα για την αριθμητική λειτουργία κινητής υποδιαστολής σε οποιαδήποτε πλατφόρμα. Αυτό σημαίνει ότι δίνει αποτελέσματα με την ίδια τιμή ακριβείας σε οποιαδήποτε πλατφόρμα.

225. Ποια είναι η χρήση της κλάσης συστήματος;

Μπορούμε να χρησιμοποιήσουμε την κλάση συστήματος για πρόσβαση στους πόρους του συστήματος όπως η τυπική είσοδος και έξοδος. Δεν μπορούμε να δημιουργήσουμε μια παρουσία για την κλάση συστήματος. Παρέχει υποστήριξη όπως τυπική είσοδος, τυπική έξοδος και τυπικό σφάλμα.

226. Ποιος είναι ο όρος που χρησιμοποιείται για ρηχά αντίγραφα στην Java;

Κλωνοποίηση αντικειμένων

227. Τι είναι μια τάξη singleton;

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

  • Δηλώστε τον κατασκευαστή ως ιδιωτικό.
  • Χρησιμοποιήστε τη στατική μέθοδο getInstance ().

228. Γράψτε ένα πρόγραμμα για να εκτυπώσετε όλες τις τιμές που παρέχονται στη γραμμή εντολών.

public class TestClass {

  public static void main(String[] args) {
    for(int i=0;i<args.length;i++)
      System.out.println(args[i]);

  }

}

 

C:\Users\Downloads>javac TestClass.java

C:\Users\Downloads>java TestClass welcome to java programming
welcome
to
java
programming

229. Ποια κοντέινερ χρησιμοποιούν τη διάταξη περιγράμματος ως την προεπιλεγμένη διάταξη;

Οι τάξεις παραθύρων, πλαισίων και διαλόγου.

230. Ποια κοντέινερ χρησιμοποιούν το FlowLayout ως την προεπιλεγμένη διάταξη;

Οι τάξεις Panel και Applet.

231. Τι είναι αξεπέραστα συστατικά;

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

232. Ποια είναι η διαφορά μεταξύ μιας γραμμής κύλισης και ενός πλαισίου κύλισης;

Η Γραμμή κύλισης είναι ένα στοιχείο, ενώ το ScrollPane είναι ένα κοντέινερ που χειρίζεται συμβάντα και εκτελεί εργασίες κύλισης.

233. Τι είναι ένα ελαφρύ συστατικό;

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

234. Τι είναι ένα βαρέων βαρών συστατικό;

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

235. Τι είναι ένα applet;

Οι μικροεφαρμογές είναι μικρά προγράμματα που υπάρχουν στο πρόγραμμα περιήγησης και εκτελούνται αυτόματα. Παρέχει διαδραστικές δυνατότητες σε εφαρμογές ιστού και εκτελείται από την πλευρά του πελάτη όταν γίνεται πάντα χρήση της εφαρμογής ιστού. Μπορεί να εκτελεστεί σε πολλές πλατφόρμες που υποστηρίζουν προγράμματα περιήγησης και εκτελεί πολύ πιο γρήγορα. Η μικροεφαρμογή δεν έχει ή ορίζει μια κύρια () μέθοδο. Όταν δημιουργείται μια μικροεφαρμογή, εκτελεί τις μεθόδους init (), start () και paint () και όταν καταστραφεί, εκτελεί τις μεθόδους stop () και καταστροφή ().

236. Μπορούμε να γράψουμε μια κλάση Java που μπορεί να χρησιμοποιηθεί τόσο ως applet όσο και ως εφαρμογή;

Ναι, μπορούμε να χρησιμοποιήσουμε μια κλάση Java τόσο ως applet όσο και ως εφαρμογή, ορίζοντας την κύρια μέθοδο ().

237. Τι είναι το Locale;

Το Locale αντιπροσωπεύει γεωγραφικές πληροφορίες όπου μπορούμε να λάβουμε λεπτομέρειες όπως όνομα χώρας, γλώσσα κ.λπ. Η τάξη Locale υπάρχει στο πακέτο java.util. Μπορούμε να δημιουργήσουμε ένα αντικείμενο Locale χρησιμοποιώντας τη μέθοδο getDefault (). Έχει διάφορες μεθόδους όπως getLanguage (), getCountry (), κλπ

import java.util.Locale;

public class LocaleDemo {

  public static void main(String[] args) {
    Locale l = Locale.getDefault();
    System.out.println(l.getCountry());
    System.out.println(l.getDisplayLanguage());
    System.out.println(l.getDisplayName());
    System.out.println(l.getLanguage());

  }

}
IN
English
English (India)
en

238. Πώς να φορτώσετε μια συγκεκριμένη τοποθεσία;

Μπορούμε να χρησιμοποιήσουμε τη μέθοδο ResourceBundle.getBundle () για να φορτώσουμε μια συγκεκριμένη τοποθεσία.

239. Τι είναι το Java Bean;

Το Java Bean είναι ένα επαναχρησιμοποιήσιμο στοιχείο λογισμικού που ενσωματώνει πολλά αντικείμενα σε ένα μόνο αντικείμενο. Είναι μια τάξη που έχει έναν κατασκευαστή χωρίς επιχειρήματα μαζί με τις μεθόδους getter και setter. Η κλάση Java bean πρέπει επίσης να εφαρμόσει το java.io.Serializable.

240. Ποια είναι η χρήση ενός Java Bean;

Η κύρια χρήση του Java bean είναι να παρέχει επαναχρησιμοποίηση και εύκολη συντήρηση κώδικα. Ενσωματώνει πολλά αντικείμενα σε ένα μόνο αντικείμενο που ονομάζεται φασόλι.

241. Τι είναι η μόνιμη ιδιότητα φασολιών;

Η μόνιμη ιδιότητα Java bean εμφανίζεται όταν τα πεδία, οι ιδιότητες και οι πληροφορίες κατάστασης αποθηκεύονται και ανακτώνται από τον χώρο αποθήκευσης.

242. Τι είναι το RMI;

Το RMI σημαίνει Remote Method Invocation είναι ένα API που χρησιμοποιείται για τη δημιουργία κατανεμημένων εφαρμογών στην Java. Υποστηρίζει την επικοινωνία μεταξύ δύο εφαρμογών χρησιμοποιώντας αντικείμενα και σκελετούς. Το RMI είναι ένας μηχανισμός που επιτρέπει σε ένα αντικείμενο να επικαλεστεί ένα άλλο αντικείμενο που βρίσκεται σε διαφορετικό JVM. Μπορούμε να χρησιμοποιήσουμε το java.rmi πακέτο για την εφαρμογή RMI.

243. Ποια είναι η χρήση του στέλεχος και του σκελετού;

Ένα στέλεχος είναι μια κλάση που υπάρχει στην πλευρά του πελάτη και αντιπροσωπεύει το απομακρυσμένο αντικείμενο. Λειτουργεί ως πύλη για τον πελάτη.

Ένας σκελετός είναι το αντίστοιχο του στέλεχος και βρίσκεται στην πλευρά του διακομιστή.

244. Ποια είναι τα βήματα για τη σύνταξη ενός προγράμματος RMI;

Ακολουθούν τα βήματα για τη σύνταξη ενός προγράμματος RMI:

  • Δημιουργήστε μια απομακρυσμένη διεπαφή
  • Εφαρμόστε την απομακρυσμένη διεπαφή
  • Συγκεντρώστε την κλάση υλοποίησης και δημιουργήστε ένα στέλεχος και σκελετό χρησιμοποιώντας το εργαλείο rmic
  • Ξεκινήστε την υπηρεσία μητρώου
  • Δημιουργήστε και ξεκινήστε την απομακρυσμένη εφαρμογή
  • Δημιουργήστε και ξεκινήστε την εφαρμογή πελάτη.

245. Ποια είναι η χρήση της σήραγγας HTTP στο RMI;

Η σήραγγα HTTP σε RMI χειρίζεται τις συνδέσεις HTTP χρησιμοποιώντας τους διακομιστές μεσολάβησης και δεν απαιτεί καμία ρύθμιση για να λειτουργήσει εντός του περιβάλλοντος τείχους προστασίας.

246. Τι είναι το JRMP;

Το JRMP σημαίνει Java Remote Method Protocol που χρησιμοποιείται για αναφορά σε απομακρυσμένα αντικείμενα. Πρόκειται για ένα πρωτόκολλο που βασίζεται σε Java και σε ροή και τρέχει κάτω από το RMI. Απαιτεί τόσο ο πελάτης όσο και ο διακομιστής να χρησιμοποιούν τα απομακρυσμένα αντικείμενα.

247. Μπορούν οι εφαρμογές RMI και CORBA να αλληλεπιδρούν μεταξύ τους;

Ναι, οι εφαρμογές που βασίζονται σε RMI και CORBA μπορούν να αλληλεπιδρούν μεταξύ τους.

248. Γράψτε ένα πρόγραμμα Java για να εκτελέσετε ένα είδος φυσαλίδων.

public class BubbleSort {

  public static void main(String[] args) {
    int[] numbers = {25,12,89,45,65,35};
    int temp;
    for(int i=0;i<numbers.length;i++) {
      for(int j=0;j<numbers.length;j++) {
        if(numbers[i] < numbers[j]) {
          temp = numbers[i];
          numbers[i] = numbers[j];
          numbers[j] = temp;
        }
      }
    }

    System.out.println("Sorted list:");
    for(int i=0;i<numbers.length;i++)
      System.out.println(numbers[i]);
  }

}
Sorted list:
12
25
35
45
65
89

249. Γράψτε ένα πρόγραμμα Java για εκτέλεση δυαδικής αναζήτησης.

import java.util.Scanner;

public class BinarySearch {

  public static void main(String[] args) {
    int count, num[], searchValue,first,last,middle;
    Scanner sc = new Scanner(System.in);
    
    //Get the number of elements to create a tree
    System.out.println("Enter the number of elements: ");
    count = sc.nextInt();
    
    //Create an array
    num = new int[count];
    
    //Store the elements in an array
    System.out.println("Enter the elements: ");
    for(int i=0; i<count; i++)
      num[i] = sc.nextInt();
    
    System.out.println("Enter the search element: ");
    searchValue = sc.nextInt();
    
    first = 0;
    last = count - 1;
    middle = (first+last)/2;
    
    while(first<=last) {
      if(num[middle]< searchValue) {
        first = middle + 1;
      }
      else if(num[middle] == searchValue) {
        System.out.println("The search element is present in the location: " + (middle + 1));
        break;
      }
      else {
        last = middle - 1;
      }
      middle = (first+last)/2;
    }
    if(first>last)
      System.out.println("The search element " + searchValue + " is not found in the tree.");

  }
  
  

}
Enter the number of elements: 
5
Enter the elements: 
10
20
30
40
50
Enter the search element: 
30
The search element is present in the location: 3

250. Γράψτε ένα πρόγραμμα Java για να εκτελέσετε το είδος επιλογής.

public class SelectionSort {

  public static void main(String[] args) {
    int[] numbers = {30,50,10,40,20};
    int min;
    for(int i=0;i<numbers.length;i++) {
      min = i;
      for(int j=i+1; j< numbers.length; j++) {
        if(numbers[j] < numbers[min])
          min = j;
      }
      
      int temp = numbers[min];
      numbers[min] = numbers[i];
      numbers[i] = temp;
    }
    
    System.out.println("Selection sort:");
    for(int i =0;i<numbers.length;i++) {
      System.out.println(numbers[i]);
    }

  }

}
Selection sort:
10
20
30
40
50

251. Γράψτε ένα πρόγραμμα Java για εκτέλεση γραμμικής αναζήτησης.

import java.util.Scanner;
public class LinearSearch {

  public static void main(String[] args) {
    int[] numbers = {10,40,30,20,50};
    int index=0;
    Boolean bFlag = false;
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the search element: " );
    int val = sc.nextInt();
    
    for(int i=0;i<numbers.length;i++) {
      if(numbers[i] == val) {
        bFlag = true;
        index = i+1;
        break;
      }
      else
        bFlag = false;
    }
    if(bFlag)
      System.out.println("The search element " + val + " is found at position " + index);
    else
      System.out.println("The search element " + val + " is not found");

  }

}
Enter the search element: 
30
The search element 30 is found at position 3

252. Γράψτε ένα πρόγραμμα Java για εκτέλεση της συγχώνευσης.

public class MergeSort {

  public void merge(int[] arr, int first, int middle, int last) {
    int l = middle - first + 1;
    int r = last - middle;
    
    int LA[] = new int[l]; //Create left array
    int RA[] = new int[r]; //Create right array
    
    //Copy data to both arrays
    for(int i=0;i<l;++i)
      LA[i] = arr[first+i];
    
    for(int j=0;j<r;++j)
      RA[j] = arr[middle+1+j];
    
    int i=0,j=0;
    int k = first;
    
    while(i<l && j<r) {
      if(LA[i] <= RA[j]) {
        arr[k] = LA[i];
        i++;
      }
      else {
        arr[k] = RA[j];
        j++;
      }
      k++;
    }
    
    while(i<l) {
      arr[k] = LA[i];
      i++;
      k++;
    }
    
    while(j<r) {
      arr[k] = RA[j];
      j++;
      k++;
    }
    
  }
  
  public void sort(int[] arr, int first, int last) {
    if(first<last) {
      int middle = (first+last)/2;
      //Sort the first half array
      sort(arr,first,middle);
      
      //Sort the second half array
      sort(arr,middle+1,last);
      
      //Merge both the arrays
      merge(arr,first,middle,last);
    }
  }
  public static void main(String[] args) {
    int[] numbers = {10,50,40,60,30,20};
    MergeSort m = new MergeSort();
    m.sort(numbers, 0, numbers.length-1);

    System.out.println("Merge sort: ");
    for(int n=0;n<numbers.length;n++)
      System.out.println(numbers[n]);
  }

}
Merge sort: 
10
20
30
40
50
60

253. Γράψτε ένα πρόγραμμα Java για να εκτελέσετε μια γρήγορη ταξινόμηση.

public class QuickSort {
  
  //Partioning the array
  public int partition(int[] arr, int low, int high) {
    //Pivot value
    int pivot = arr[high];
    
    //index of small element
    int i = low-1;
    
    for(int j=low;j<high;j++) {
      if(arr[j]<=pivot) {
        i++;
        
        //swap the elements
        int t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
      }
    }
    
    //Swap the next element and last element
    int t = arr[i+1];
    arr[i+1] = arr[high];
    arr[high] = t;
    
    return i+1;
  }
  
  //Quick sort functionality
  public void quicksort(int[] arr, int low, int high) {
    if(low<high) {
      int p = partition(arr,low,high);
      
      //Recursively sort the elements
      quicksort(arr,low,p-1);
      quicksort(arr,p+1,high);
    }
  }

  public static void main(String[] args) {
    int[] num = {80,30,50,10,60,20};
    
    QuickSort q = new QuickSort();
    q.quicksort(num, 0, num.length-1);
    
    //Print the sorted elements
    for(int i=0;i<num.length;i++)
      System.out.println(num[i]);
  }

}
10
20
30
50
60
80

254. Γράψτε ένα πρόγραμμα Java για να δημιουργήσετε μια διπλά συνδεδεμένη λίστα που περιέχει κόμβους n.

public class DoublyLinkedList {
  
  //Create a node class
  class Node {
    int value;
    Node prev;
    Node next;
    
    Node(int value) {
      this.value = value;
    }
  }
  
  //Initialize head and tail as null
  Node head,tail = null;
  
  //Add a node to doubly linked list
  void addNode(int value) {
    
    //Create a new node;
    Node n = new Node(value);
    
    //If list is empty, head and tail points to new node n
    if(head == null) {
      head = tail = n;
      
      //The prev and next value will be null
      head.prev = null;
      tail.next = null;
    }
    
    //Add the new node n to the end of the list
    else {
      tail.next = n;
      n.prev = tail;
      tail = n;
      tail.next = null;
    }
  }
  
  void print() {
    Node current = head;
    if(head == null) {
      System.out.println("Doubly linked list is empty");
      return;
    }
    System.out.println("Elements in

Διπλά συνδεδεμένος

 list:");
    while(current!= null) {
      System.out.println(current.value);
      current = current.next;
    }
  }

  public static void main(String[] args) {
    DoublyLinkedList d = new DoublyLinkedList();
    d.addNode(40);
    d.addNode(20);
    d.addNode(30);
    d.addNode(10);
    d.addNode(50);
    
    d.print();
    
  }

}
Elements in Doubly linked list:
40
20
30
10
50

255. Γράψτε ένα πρόγραμμα Java για να βρείτε τον κόμβο μέγιστης και ελάχιστης τιμής από μια κυκλική συνδεδεμένη λίστα.

public class CircularLinkedList {
  
  public class Node {
    int value;
    Node next;
    
    public Node(int value) {
      this.value = value;
    }
  }
  
  //Initialize head and tail node as null
  public Node head = null;
  public Node tail = null;
  
  //Add new node at the end of the list	
  void add(int value) {
    Node n = new Node(value);
    
    //Check if list is empty, then assign head and tail as new node
    if(head == null) {
      head = n;
      tail = n;
      n.next = head; //Next node value will point back to head since it is circular linked list
    }
    
    //Assign new node to the tail
    else {
      tail.next = n;
      tail = n;
      tail.next = head;
    }
  }
  
  //Find minimum node value
  public void minNodeValue() {
    Node current = head;
    
    //Assign min as current node value
    int min = head.value;
    
    if(head == null) {
      System.out.println("List is empty");
    }
    
    else {
      do {
        if(min > current.value) {
          min = current.value; //Reassign min value if current value is lesser than min
        }
        current = current.next;
      }while(current != head);
      
      System.out.println("Minimum node value is: " + min);
    }
  }
  
  //Find maximum node value
  public void maxNodeValue() {
    Node current = head;
    
    //Assign max as current node value
    int max = head.value;
    
    if(head == null) {
      System.out.println("List is empty");
    }
    else {
      do {
        if(max < current.value) {
          max = current.value; //Reassign max value if current value is greater than max
        }
        current = current.next;
      }while(current != head);
      
      System.out.println("Maximum node value is: " + max);
    }
  }

  public static void main(String[] args) {
    CircularLinkedList c = new CircularLinkedList();
    c.add(20);
    c.add(30);
    c.add(10);
    c.add(50);
    c.add(40);
    
    //Find min node value
    c.minNodeValue();
    
    //Find max node value
    c.maxNodeValue();
  }

}
Minimum node value is: 10
Maximum node value is: 50

256. Γράψτε ένα πρόγραμμα Java για να βρείτε τη διαφορά μεταξύ του αθροίσματος των μονών και των ζυγών επιπέδων κόμβων ενός δυαδικού δέντρου.

import java.util.LinkedList;
import java.util.Queue;

public class BinaryTreeDifference {

  public static class Node{
    int value;
    Node left;
    Node right;
    
    public Node(int value) {
      this.value = value;
      this.left = null;
      this.right = null;
    }
  }
  
  //Root of binary tree
  public Node root;
  
  public BinaryTreeDifference() {
    root = null;
  }
  
  public int diff() {
    int oLevel = 0, eLevel = 0, diffOddEven = 0;
    
    //To track number of nodes in each level
    int nodesInLevel = 0;
    
    //Tracks the current level
    int curLevel = 0;
    
    //Queue to track nodes level in a tree
    Queue<Node> queue = new LinkedList<Node>();
    
    //Check if root is null
    if(root == null) {
      System.out.println("Tree is empty");
      return 0;
    }
    
    else {
      //Add root node to queue to represent first level
      queue.add(root);
      curLevel++;
      
      while(queue.size() != 0) {
        //Holds number of elements in the queue
        nodesInLevel = queue.size();
        
        while(nodesInLevel > 0) {
          Node current = queue.remove();
          
          //Check if level is even
          if(curLevel%2 == 0)
            eLevel += current.value;
          else
            oLevel += current.value;
          
          //Add left child to queue
          if(current.left != null)
            queue.add(current.left);
          
          if(current.right != null)
            queue.add(current.right);
          nodesInLevel--;
        }
        curLevel++;
      }
      
      //Calculate the difference
      diffOddEven = Math.abs(oLevel - eLevel);
    }
    
    return diffOddEven;
    
  }
  public static void main(String[] args) {
    BinaryTreeDifference bt = new BinaryTreeDifference();
    
    bt.root = new Node(10);
    bt.root.left = new Node(20);
    bt.root.right = new Node(30);
    bt.root.left.left = new Node(40);
    bt.root.left.right = new Node(50);
    bt.root.right.left = new Node(60);
    
    System.out.println("Difference between odd and even level: " + bt.diff());
  }

}
Difference between odd and even level: 110

257. Τι είναι το multithreading;

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

258. Τι είναι το νήμα στο multithreading;

Ένα νήμα είναι ένα μεμονωμένο υποπρόγραμμα ή διαδικασία που εκτελείται ανεξάρτητα κατά τη διαδικασία πολλαπλών νημάτων. Μοιράζεται τους ίδιους πόρους αλλά εξακολουθεί να εκτελείται ξεχωριστά. Είναι ελαφρύ και έχει πολλές καταστάσεις, όπως ΝΕΟ, ΜΠΛΟΚ, ΡΕΝΑΝΙΜΟ, ΠΕΡΙΜΕΝΕΙ, ΠΕΡΙΟΡΙΣΜΕΝΟ, TIMED_WAITING. Ένα νήμα μπορεί να είναι μόνο σε μία κατάσταση κάθε φορά.

259. Ποια είναι η διαφορά μεταξύ ενός νήματος και μιας διαδικασίας;

ΔιαδικασίαΝήμα
Το κύριο πρόγραμμα εκτέλεσης ονομάζεται διαδικασίαΈνα νήμα είναι ένα υποσύνολο ή μέρος μιας διαδικασίας
Έχει διαφορετικές διευθύνσεις και καταλαμβάνει διαφορετική μνήμηΜοιράζεται τους ίδιους πόρους και τη μνήμη
Η εναλλαγή περιβάλλοντος είναι πιο αργήΗ εναλλαγή περιβάλλοντος είναι ταχύτερη
Η επικοινωνία μεταξύ διεργασιών είναι πιο αργή και ακριβήΗ επικοινωνία μεταξύ νημάτων είναι ταχύτερη και λιγότερο ακριβή
Η αλλαγή στη γονική διαδικασία δεν επηρεάζει τη διαδικασία του παιδιούΗ αλλαγή στο γονικό νήμα μπορεί να επηρεάσει το θυγατρικό νήμα

260. Τι είναι η επικοινωνία μεταξύ των νημάτων;

Η επικοινωνία μεταξύ νημάτων είναι η διαδικασία κατά την οποία συγχρονισμένα νήματα επικοινωνούν μεταξύ τους ταυτόχρονα. Αυτό συμβαίνει όταν ένα νήμα βρίσκεται σε παύση σε κρίσιμη κατάσταση και ένα άλλο νήμα εισέρχεται στην ίδια κρίσιμη κατάσταση για να συνεχίσει τη διαδικασία εκτέλεσης. Μπορούμε να το επιτύχουμε χρησιμοποιώντας τις μεθόδους wait (), notify () και notifyAll ().

261. Ποια είναι η χρήση της μεθόδου αναμονής () στην Java;

Η μέθοδος wait () είναι μέρος της κλάσης Object που χρησιμοποιείται στη διαδικασία επικοινωνίας μεταξύ νημάτων. Όταν εκτελείται η μέθοδος αναμονής, περιμένει έως ότου ένα άλλο νήμα επικαλεστεί τη μέθοδο notify () ή notifyAll () ή έως ότου παρέλθει ένας καθορισμένος χρόνος.

262. Γιατί πρέπει να καλέσουμε τη μέθοδο αναμονής () από ένα συγχρονισμένο μπλοκ;

Χρησιμοποιούμε τη μέθοδο wait () σε ένα συγχρονισμένο μπλοκ για επικοινωνία μεταξύ νημάτων αλλιώς θα ρίξει την εξαίρεση java.lang.IllegalMonitorStateException. Αυτή η μέθοδος αναμονής () χρησιμοποιείται σε συγχρονισμένο μπλοκ μαζί με τις μεθόδους notify () ή notifyAll () για τη διασφάλιση της σωστής επικοινωνίας.

263. Ποια είναι τα πλεονεκτήματα του multithreading;

  • Ελαχιστοποιημένη χρήση πόρων συστήματος
  • Βελτιωμένη ανταπόκριση διακομιστή
  • Καλύτερη επικοινωνία
  • Βελτιωμένη απόδοση
  • Μειωμένο κόστος συντήρησης
  • Απλοποιημένη δομή προγράμματος

264. Ποιες είναι οι διάφορες καταστάσεις σε έναν κύκλο ζωής ενός νήματος;

Ένα νήμα μπορεί να βρίσκεται σε οποιαδήποτε από τις παρακάτω καταστάσεις. Κάθε φορά, μπορεί να είναι μόνο σε μία κατάσταση.

  • ΝΈΟΣ: Δημιουργείται ένα νήμα σε αυτήν την κατάσταση χρησιμοποιώντας τον νέο τελεστή. Ένα νήμα ξεκινά μόνο όταν καλεί τη μέθοδο έναρξης ().
  • ΛΕΙΤΟΥΡΓΙΑ: Το νήμα είναι έτοιμο να τρέξει αφού καλέσει τη μέθοδο εκκίνησης. Αρχίζει να τρέχει μόλις επιλεγεί από τον προγραμματιστή.
  • RUNNING: Το νήμα είναι σε κατάσταση λειτουργίας όταν το παραλάβει ο προγραμματιστής.
  • ΠΕΡΙΜΕΝΕΙ / ΑΠΟΚΛΕΙΣΜΕΝΟ: Το νήμα δεν εκτελείται και περιμένει να ολοκληρωθεί ένα άλλο νήμα.
  • ΤΕΡΜΑΤΙΣΜΟΣ: Το νήμα τερματίζεται μετά την έξοδο από τη μέθοδο εκτέλεσης ().

265. Ποια είναι η διαφορά μεταξύ του προληπτικού προγραμματισμού και του χρονοδιαγράμματος;

Προληπτικός προγραμματισμός: Μια εργασία υψηλής προτεραιότητας εκτελείται έως ότου μεταβεί στην κατάσταση αναμονής / νεκρού ή μια άλλη εργασία υψηλής προτεραιότητας έρχεται για εκτέλεση

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

266. Τι είναι η αλλαγή περιβάλλοντος;

Η εναλλαγή περιβάλλοντος σημαίνει ότι ο χρόνος της CPU μοιράζεται σε όλες τις διαδικασίες και εναλλάσσεται μεταξύ των διεργασιών με χρονικό περιορισμό. Αυτό σημαίνει ότι σώζει την κατάσταση της διαδικασίας και μπορεί να συνεχίσει από όπου σταμάτησε και να συνεχίσει την εκτέλεση.

267. Ποια είναι η διαφορά μεταξύ της κλάσης Thread και της διεπαφής Runnable για τη δημιουργία ενός νήματος;

Μπορούμε να δημιουργήσουμε ένα νήμα με 2 διαφορετικούς τρόπους:

  • Επέκταση κλάσης νήματος - Εάν επεκτείνει μια κλάση νήματος, τότε δεν μπορεί να επεκτείνει οποιαδήποτε άλλη κλάση, καθώς η Java δεν υποστηρίζει πολλαπλή κληρονομιά. Κάθε νήμα έχει ένα μοναδικό αντικείμενο. Υποστηρίζει διάφορες ενσωματωμένες μεθόδους όπως getPriority (), isAlive () κ.λπ.
  • Εφαρμογή κλάσης νήματος χρησιμοποιώντας διεπαφή Runnable - Εάν εφαρμόσουμε τη διεπαφή Runnable, μπορούμε επίσης να επεκτείνουμε άλλες κλάσεις. Πολλά νήματα μοιράζονται το ίδιο αντικείμενο. Υποστηρίζει μόνο μία μέθοδο που είναι η μέθοδος run ().

268. Τι είναι μια μέθοδος join ();

Η μέθοδος συμμετοχής είναι μέρος της κλάσης νήματος που περιμένει την ολοκλήρωση της τρέχουσας εκτέλεσης νήματος πριν εκτελεστεί ένα άλλο νήμα. Για παράδειγμα, εάν t είναι ένα αντικείμενο νήματος του τρέχοντος νήματος, τότε εγγραφείτε θα διασφαλίσει ότι t τερματίζεται πριν πάρει την επόμενη οδηγία.

269. Περιγράψτε τη λειτουργία και τη χρήση της μεθόδου ύπνου ().

Η μέθοδος sleep () χρησιμοποιείται για να κάνει το νήμα να περιμένει ένα συγκεκριμένο χρονικό διάστημα. Με άλλα λόγια, σταματά την εκτέλεση του νήματος για συγκεκριμένο χρόνο.

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

270. Ποια είναι η διαφορά μεταξύ αναμονής () και ύπνου ();

Περίμενε(): Αυτή η μέθοδος είναι μέρος της κλάσης Object και μπορεί να αποδεσμεύσει το κλείδωμα.

ύπνος(): Αυτή η μέθοδος είναι μέρος της κλάσης νήματος και δεν μπορεί να απελευθερώσει το κλείδωμα.

271. Μπορούμε να ξεκινήσουμε ένα νήμα δύο φορές;

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

272. Μπορούμε να καλέσουμε τη μέθοδο run () αντί της μεθόδου start ();

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

273. Τι είναι τα νήματα δαίμονα;

Τα νήματα Daemon είναι νήματα χαμηλής προτεραιότητας που υποστηρίζουν υπηρεσίες φόντου στα νήματα των χρηστών. Τα νήματα Daemon τερματίζονται αυτόματα από την JVM όταν όλα τα άλλα νήματα χρήστη είναι νεκρά. Μπορούμε να ελέγξουμε εάν ένα νήμα είναι νήμα δαίμονα ή όχι και επίσης να ορίσουμε ένα νήμα ως νήμα δαίμονα.

274. Μπορούμε να κάνουμε ένα νήμα χρήστη ως νήμα δαίμονα εάν έχει ήδη ξεκινήσει;

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

275. Τι είναι ο γάντζος τερματισμού;

Ένα άγκιστρο τερματισμού είναι ένα νήμα που καλείται σιωπηρά πριν το JVM τερματιστεί κανονικά ή απότομα. Ως εκ τούτου, μπορεί να χρησιμοποιηθεί για τον καθαρισμό ή την απελευθέρωση των πόρων. Είναι πιο αποτελεσματική από τη μέθοδο finalizer (). Μπορούμε να προσθέσουμε ένα γάντζο τερματισμού χρησιμοποιώντας τον παρακάτω κωδικό:

public void addShutDownHook(Thread hook) { }
Runtime r = Runtime.getRuntime();
r.addShutdDownHook(new MyThread());

276. Πότε πρέπει να διακόψουμε ένα νήμα;

Χρησιμοποιούμε τη μέθοδο διακοπής () για να διακόψουμε ένα νήμα είτε από την κατάσταση αναστολής είτε από την κατάσταση αναμονής. Αυτή η μέθοδος ρίχνει το InterruptException.

277. Τι είναι ο συγχρονισμός;

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

  • Συγχρονισμένη μέθοδος
  • Συγχρονισμένο μπλοκ
  • Στατικός συγχρονισμός

278. Ποια είναι η χρήση ενός συγχρονισμένου μπλοκ;

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

synchronized(object_identifier) {
   //shared resources
}

279. Μπορούν τα αντικείμενα Java να κλειδωθούν για αποκλειστική χρήση από ένα δεδομένο νήμα;

Ναι, μπορούμε να κλειδώσουμε ένα αντικείμενο Java για αποκλειστική χρήση από ένα δεδομένο νήμα καθορίζοντάς το σε ένα συγχρονισμένο μπλοκ. Με αυτόν τον τρόπο, μόνο ένα νήμα μπορεί να έχει πρόσβαση στο αντικείμενο σε μια συγκεκριμένη στιγμή.

280. Τι είναι ο στατικός συγχρονισμός;

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

281. Ποια είναι η διαφορά μεταξύ της μεθόδου notify () και notifyAll ();

Η μέθοδος notify () ξεμπλοκάρει ένα νήμα αναμονής ενώ η μέθοδος notifyAll () ξεμπλοκάρει όλα τα νήματα που βρίσκονται σε κατάσταση αναμονής.

282. Τι εννοείς με το αδιέξοδο;

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

283. Πώς να εντοπίσετε ένα αδιέξοδο και πώς μπορεί να αποφευχθεί;

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

Αποφυγή αδιεξόδου

Μπορούμε να αποφύγουμε μια αδιέξοδο με τους παρακάτω τρόπους:

  • Αποφύγετε τις ένθετες κλειδαριές
  • Αποφύγετε τις περιττές κλειδαριές
  • Χρησιμοποιώντας νήμα ένωση

284. Τι είναι ένας προγραμματιστής νημάτων στην Java;

Ένας προγραμματιστής νημάτων είναι μέρος του JVM που αποφασίζει ποιο νήμα πρέπει να εκτελεστεί. Με άλλα λόγια, είναι ευθύνη του προγραμματιστή νήματος να παραλάβει το νήμα για εκτέλεση. Ένας προγραμματιστής νήματος χρησιμοποίησε δύο μηχανισμούς για να επιλέξει το νήμα: Προληπτικός προγραμματισμός, Χρόνος κοπής.

285. Έχει κάθε νήμα τη στοίβα του σε πολυνηματικό προγραμματισμό;

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

286. Πώς επιτυγχάνεται η ασφάλεια ενός νήματος;

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

  • Συγχρονισμός
  • ευμετάβλητη λέξη-κλειδί
  • Χρήση μηχανισμού με κλειδαριά
  • Μαθήματα ατομικού περιτυλίγματος.

287. Ποια είναι η κατάσταση του αγώνα;

Μια κατάσταση αγώνα εμφανίζεται όταν πολλά νήματα προσπαθούν να αποκτήσουν πρόσβαση στον ίδιο κοινόχρηστο πόρο ταυτόχρονα. Αυτό μπορεί να αποφευχθεί χρησιμοποιώντας την έννοια συγχρονισμού.

288. Τι είναι μια ευμετάβλητη λέξη-κλειδί;

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

289. Τι είναι ένα νήμα πισίνα;

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

290. Ποια είναι τα κύρια στοιχεία του Concurrency API;

Το java.util.concurrent περιέχει πολλά στοιχεία που υποστηρίζουν την ανάπτυξη του API Concurrency όπως αναφέρεται παρακάτω:

  • Εκτελεστής διαθήκης
  • Εξυπηρέτηση
  • Προγραμματισμένη υπηρεσία Exxor
  • Μελλοντικός
  • CountDownLatch
  • Κυκλικός φραγμός
  • Σηματοφόρος
  • Εργοστάσιο νήματος
  • BlockingQueue
  • Καθυστέρηση
  • Κλειδαριές
  • Phaser

291. Τι είναι το Executor in Concurrency API στην Java;

Η διεπαφή Executor του java.util.concurrency περιέχει τη μέθοδο execute () για την εκτέλεση ορισμένων εργασιών ή δεδομένης εντολής. Εάν ο εκτελεστής δεν μπορεί να αποδεχτεί την εργασία για εκτέλεση, θα ρίξει το RejectedExecutionException.

Σύνταξη:

public void execute(Runnable command)

292. Τι είναι το BlockingQueue;

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

293. Πώς να εφαρμόσετε το πρόβλημα παραγωγού-καταναλωτή χρησιμοποιώντας το BlockingQueue;

Το σχέδιο παραγωγού-καταναλωτή είναι τα πιο συνηθισμένα πρότυπα ολοκλήρωσης στον ασύγχρονο προγραμματισμό. Μπορούμε να το εφαρμόσουμε χρησιμοποιώντας το BlockingQueue όπως φαίνεται στο παρακάτω παράδειγμα:

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.Level;
import java.util.logging.Logger;

class Producer implements Runnable {
  
  private final BlockingQueue b;
  
  public Producer(BlockingQueue b) {
    this.b = b;
  }

  @Override
  public void run() {
    for(int i=0;i<5;i++) {
      try {
        System.out.println("Produced: " + i);
        b.put(i);
      }
      catch(InterruptedException e) {
        Logger.getLogger(Producer.class.getName()).log(Level.SEVERE,null,e);
      }
    }
    
  }
  
}

class Consumer implements Runnable {

  private final BlockingQueue b;
  
  public Consumer(BlockingQueue b) {
    this.b = b;
  }
  @Override
  public void run() {
    while(true) {
      try {
        System.out.println("Consumed: " + b.take());
      }
      catch(InterruptedException e) {
        Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null,e);
      }
    }
    
  }
  
}

public class BlockingQueueDemo {

  public static void main(String[] args) {
    BlockingQueue b = new LinkedBlockingQueue();
    
    Thread p = new Thread(new Producer(b));
    Thread c = new Thread(new Consumer(b));
    
    p.start();
    c.start();

  }

}
Produced: 0
Produced: 1
Produced: 2
Produced: 3
Produced: 4
Consumed: 0
Consumed: 1
Consumed: 2
Consumed: 3
Consumed: 4

 

294. Ποια είναι η διαφορά μεταξύ της διασύνδεσης Java Callable και της διεπαφής Runnable;

Τόσο οι Java Callable όσο και οι διεπαφές Runnable χρησιμοποιούνται από τάξεις που θέλουν να εκτελέσουν πολλά νήματα. Ωστόσο, υπάρχουν μερικές διαφορές όπως παρακάτω:

Τηλεφωνική διεπαφήΔιεπαφή με δυνατότητα εκτέλεσης
Η διεπαφή μπορεί να επιστρέψει ένα αποτέλεσμαΗ διεπαφή δεν μπορεί να επιστρέψει αποτέλεσμα
Μπορεί να ρίξει μια ελεγμένη εξαίρεσηΔεν μπορεί να ρίξει μια επιλεγμένη εξαίρεση
Το Callable interface υποστηρίζει μόνο μετά την Java 5Η διεπαφή Runnable μπορεί να χρησιμοποιηθεί και πριν από το Java 5

295. Τι είναι η ατομική δράση στο Concurrency στην Java;

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

Παράδειγμα ατομικών λειτουργιών: Όλες οι λειτουργίες ανάγνωσης και εγγραφής για μια αρχική μεταβλητή (εκτός από τη μακρά και τη διπλή) και την πτητική μεταβλητή (συμπεριλαμβανομένης της μακράς και της διπλής).

Όλες οι ατομικές μέθοδοι υπάρχουν στο πακέτο java.util.concurrent.

296. Τι είναι μια διεπαφή κλειδώματος στο Concurrency στην Java;

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

Η κύρια διαφορά είναι ότι ένα συγχρονισμένο μπλοκ είναι μέσα σε μια μέθοδο ενώ τα API διασύνδεσης κλειδώματος όπως το κλείδωμα () και το ξεκλείδωμα () μπορούν να είναι ξεχωριστές μέθοδοι. Η διασύνδεση κλειδώματος έχει μια επιλογή χρονικού ορίου ενώ το συγχρονισμένο μπλοκ δεν έχει.

297. Τι είναι η διεπαφή ExecutorService

Το ExecutorService είναι μια υποσύνδεση του Executor και υποστηρίζει ασύγχρονη επεξεργασία. Διαθέτει δυνατότητες διαχείρισης ολόκληρου του κύκλου ζωής.

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ConcurrencyDemo {

  public static void main(String[] args) {
    ExecutorService e = Executors.newFixedThreadPool(10);
    e.execute(new Runnable() {
       public void run() {
         System.out.println("Executor Service");
       }
    });
    e.shutdown();
  }

}
Executor Service

298. Ποια είναι η διαφορά μεταξύ του συγχρονισμένου και του ασύγχρονου προγραμματισμού στην έννοια του νήματος;

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

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

299. Τι είναι Callable και Future στην Java;

Το Java Callable interface κυκλοφόρησε από το Java 5 και αποτελεί μέρος του πακέτου java.util.concurrent. Έχει μια μέθοδο εκτέλεσης () για την υποστήριξη της εκτέλεσης και μπορεί να επιστρέψει ένα αποτέλεσμα και να ρίξει μια εξαίρεση επίσης.

Η διεπαφή Java Future επιστρέφει το αποτέλεσμα της ταυτόχρονης διαδικασίας. Η διεπαφή Callable επιστρέφει το αντικείμενο του java.util.concurrent.Future. Η μελλοντική διεπαφή Java υποστηρίζει την εφαρμογή για διάφορες μεθόδους όπως ακύρωση (), λήψη (), isCancelled (), isDone ().

300. Ποια είναι η διαφορά μεταξύ της διεπαφής SchedchedExecutorService και ExecutorService;

Οι διεπαφές SchedchedExecutorService και ExecutorService αποτελούν μέρος του πακέτου java.util.concurrent. Η κύρια διαφορά είναι ότι το SchedchedExecutorService μπορεί να εκτελεί εργασίες περιοδικά και έχει πρόσθετες μεθόδους για την εκτέλεση των εργασιών με δυνατότητα εκτέλεσης και κλήσης.

301. Ποια είναι η τάξη FutureTask στην Java;

Η κλάση FutureTask παρέχει τη βασική εφαρμογή της διεπαφής Future. Έχει μεθόδους για να ξεκινήσει και να ακυρώσει τον υπολογισμό. Μπορούμε να ανακτήσουμε τα αποτελέσματα μόνο εάν ο υπολογισμός είναι πλήρης, αλλιώς το παίρνω Η μέθοδος θα μπλοκάρει εάν ο υπολογισμός δεν είναι πλήρης. Δεν είναι δυνατή η επανεκκίνηση ή η ακύρωση του υπολογισμού μόλις ολοκληρωθεί.

302. Τι είναι το πλαίσιο συλλογής στην Java;

Ένα πλαίσιο συλλογής περιέχει μια λίστα κλάσεων και διεπαφών για αποθήκευση και χειρισμό δεδομένων. Αυτό το πλαίσιο περιέχει κλάσεις όπως ArrayList, Vector, Stack, HashSet κ.λπ. και διεπαφές όπως List, Queue κ.λπ.

303. Ποια είναι η διαφορά μεταξύ πίνακα και συλλογής;

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

304. Ποιες είναι οι διάφορες διεπαφές που χρησιμοποιούνται σε ένα πλαίσιο συλλογής;

Το πλαίσιο Συλλογής περιέχει διάφορες διεπαφές όπως αναφέρονται παρακάτω:

  • Διεπαφή συλλογής: Αυτή είναι η κύρια διεπαφή και κάθε άλλη διεπαφή πρέπει να εφαρμόσει τη διεπαφή συλλογής. java.util.Collection
  • Διεπαφή λίστας: Η λίστα είναι μια παραγγελθείσα συλλογή από στοιχεία που μπορούν να αποθηκεύσουν διπλότυπα τιμές και επεκτείνει τη διασύνδεση COllection. Μπορούμε να έχουμε πρόσβαση σε τυχαία στοιχεία από μια λίστα. java.util.List
  • Ορισμός διεπαφής: Το σύνολο είναι μια διεπαφή που δεν μπορεί να αποθηκεύσει διπλές τιμές και μπορεί να περιλαμβάνει μόνο κληρονομικές μεθόδους της διεπαφής συλλογής. java.util.Set
  • Διεπαφή ουράς: Η διεπαφή ουράς αποθηκεύει δεδομένα με τη μορφή First-In-First-Out (FIFO). java.util.Queue
  • Διεπαφή Dequeue: Είναι μια ουρά διπλού άκρου και εφαρμόζει τη διεπαφή ουράς. Υποστηρίζει τόσο τη λειτουργία FIFO (First-In-First-Out) της ουράς όσο και τη λειτουργία LIFO (Last-In-First-Out) στοίβας. Λόγω αυτού, μπορούμε να εισάγουμε και να αφαιρέσουμε στοιχεία και από τα δύο άκρα. java.util.Dequeue
  • Διεπαφή χάρτη: Μια διεπαφή χάρτη αποθηκεύει στοιχεία με τη μορφή ζευγών κλειδιών-τιμών. Μπορεί να αποθηκεύσει μόνο μοναδικά κλειδιά αλλά μπορεί περιέχει διπλότυπο αξίες. Δεν υλοποιεί τη διεπαφή συλλογής. java.util.Map

305. Ποια είναι η διαφορά μεταξύ ArrayList και Vector;

Λίστα Arrayδιάνυσμα
Το ArrayList δεν είναι συγχρονισμένοΤο διάνυσμα είναι συγχρονισμένο
Δεν είναι μια κληρονομιά τάξηΕίναι μια κληρονομιά τάξη
Μπορεί να αυξήσει το μέγεθός του κατά 50% του μεγέθους του πίνακαΜπορεί να αυξήσει το μέγεθός του διπλασιάζοντας
Δεν είναι ασφαλές για νήματαΕίναι ασφαλές για νήματα
Χρησιμοποιεί μόνο Iterator για διέλευσηΧρησιμοποιεί την απαρίθμηση και τον επαναληπτικό για διασταύρωση
Η απόδοση του ArrayList είναι ταχύτερηΗ απόδοση του διανύσματος είναι συγκριτικά πιο αργή

306. Ποια είναι η διαφορά μεταξύ ArrayList και LinkedList;

Λίστα ArrayΣυνδεδεμένη λίστα
Χρησιμοποιεί δυναμική συστοιχία για την αποθήκευση στοιχείωνΧρησιμοποιεί το Double LinkedList για την αποθήκευση στοιχείων
Η απόδοση είναι πιο αργήΗ απόδοση είναι ταχύτερη
Μπορεί να χρησιμοποιηθεί για την εφαρμογή μόνο ΛίσταΜπορεί να χρησιμοποιηθεί για την εφαρμογή List and Queue
Παρέχει τυχαία πρόσβασηΔεν παρέχει τυχαία πρόσβαση
Καταλαμβάνει λιγότερη μνήμη αφού αποθηκεύει μόνο αντικείμενοΚαταλαμβάνει περισσότερη μνήμη αφού αποθηκεύει τόσο το αντικείμενο όσο και την αναφορά του αντικειμένου
get (int index) δίνει απόδοση του O (1)get (int index) δίνει απόδοση του O (n)
Η απόδοση λειτουργίας αφαίρεσης στη χειρότερη περίπτωση είναι O (n) και η καλύτερη περίπτωση είναι O (1)Η λειτουργία αφαίρεσης δίνει απόδοση του O (1)
Η μέθοδος προσθήκης δίνει απόδοση του O (n) στη χειρότερη περίπτωσηΗ μέθοδος προσθήκης δίνει απόδοση του O (1)

307. Ποια είναι η διαφορά μεταξύ Iterator και ListIterator;

ΕπαναληπτήςΛίστα επαναληπτών
Είναι μια καθολική επανάληψηΔεν είναι καθολικός επαναληπτικός
Μπορεί να χρησιμοποιηθεί για οποιονδήποτε τύπο συλλογήςΜπορεί να χρησιμοποιηθεί μόνο για τάξεις υλοποίησης λίστας
Υποστηρίζει μόνο τη λειτουργία ανάγνωσης και διαγραφήςΥποστηρίζει λειτουργίες προσθήκης, ενημέρωσης, ανάγνωσης και διαγραφής.
Μπορεί να χρησιμοποιηθεί μόνο για πλοήγηση προς τα εμπρόςΜπορεί να χρησιμοποιηθεί για πλοήγηση προς τα εμπρός και προς τα πίσω
Δεν είναι αμφίδρομος επαναληπτικόςΕίναι μια αμφίδρομη επανάληψη
Χρησιμοποιούμε τη μέθοδο iterator ()Χρησιμοποιούμε τη μέθοδο listiterator ().
Δεν μπορούμε να καθορίσουμε το ευρετήριο για επανάληψηΜπορούμε να καθορίσουμε το ευρετήριο για επανάληψη

310. Ποια είναι η διαφορά μεταξύ Iterator και απαρίθμησης;

ΑπαρίθμησηΕπαναληπτής
Διατίθεται από το JDK 1.0Διατίθεται από το JDK 1.2
Δεν είναι καθολικός επαναληπτικόςΕίναι μια καθολική επανάληψη
Μπορεί να χρησιμοποιηθεί για να επαναλάβει μόνο συλλογές παλαιού τύπου, όπως το Vector, hashtableΜπορεί να χρησιμοποιηθεί για την επανάληψη οποιωνδήποτε Συλλογών
Υποστηρίζει μόνο λειτουργία ανάγνωσηςΥποστηρίζει λειτουργία ανάγνωσης και διαγραφής
Έχει μεγάλα ονόματα μεθόδων
Π.χ .: hasMoreElements ()
Έχει σύντομα ονόματα μεθόδων
Π.χ .: hasNext ()

311. Ποια είναι η διαφορά μεταξύ λίστας και συνόλου;

Λίστασετ
Μπορεί να αποθηκεύσει διπλά στοιχείαΜπορεί να αποθηκεύσει μόνο μοναδικά στοιχεία
Είναι μια παραγγελία συλλογήςΕίναι μια μη ταξινομημένη συλλογή
Έχει μια ενιαία κλάση παλαιού τύπου που είναι VectorΔεν έχει τάξη παλαιού τύπου
Μπορεί να αποθηκεύσει οποιονδήποτε αριθμό μηδενικών τιμώνΜπορεί να αποθηκεύσει μόνο μία μηδενική τιμή

312. Ποια είναι η διαφορά μεταξύ HashSet και TreeSet;

TreeSetHashSet
Διατηρεί αύξουσα σειράΔεν διατηρεί καμία παραγγελία
Ο υπολογισμός είναι πιο αργόςΟ υπολογισμός είναι πιο γρήγορος
Το κόστος χρόνου είναι log (n)Το κόστος του χρόνου είναι σταθερό

313. Ποια είναι η διαφορά μεταξύ του συνόλου και του χάρτη;

σετΧάρτης
Ορισμός τιμών μόνο για καταστήματαΟ χάρτης αποθηκεύει κλειδί και τιμές
Το σετ μπορεί να περιέχει μοναδικές τιμέςΟ χάρτης μπορεί να περιέχει μοναδικά κλειδιά και διπλές τιμές
Μπορεί να διατηρήσει μία τιμή nullΜπορεί να κρατήσει ένα μόνο κλειδί null και πολλές τιμές null

314. Ποια είναι η διαφορά μεταξύ HashSet και HashMap;

HashSetHashMap
Υλοποιεί τη διεπαφή SetΥλοποιεί τη διασύνδεση χάρτη
Αποθηκεύει μόνο τιμέςΑποθηκεύει δεδομένα με τη μορφή ζεύγους κλειδιού-τιμής
Δεν μπορεί να έχει διπλές τιμέςΜπορεί να περιέχει διπλές τιμές με μοναδικά κλειδιά
Μπορεί να έχει μόνο μία μηδενική τιμήΜπορεί να κρατήσει ένα μόνο πλήκτρο null με πολλές τιμές null

315. Ποια είναι η διαφορά μεταξύ HashMap και TreeMap;

Χάρτης δέντρουHashMap
Διατηρεί αύξουσα σειράΔεν διατηρεί καμία παραγγελία
Δεν μπορεί να περιέχει μηδενικό κλειδίΜπορεί να περιέχει ένα μηδενικό κλειδί
Είναι μια υλοποίηση βασισμένη σε δομή δέντρωνΕίναι μια βασισμένη σε hashtable εφαρμογή
Δεν επιτρέπει μηδενικές τιμέςΕπιτρέπει πολλές μηδενικές τιμές
Η ταξινόμηση είναι πιο αργήΗ ταξινόμηση είναι ταχύτερη
Χρησιμοποιεί δομή δεδομένων κόκκινου-μαύρου δέντρουΧρησιμοποιεί μια κατακερματισμένη δομή δεδομένων

316. Ποια είναι η διαφορά μεταξύ HashMap και HashTable;

HashMapHashtable
Δεν είναι συγχρονισμένοΕίναι συγχρονισμένο
Δεν είναι ασφαλές για νήματα και δεν μπορεί να κοινοποιηθεί μεταξύ νημάτωνΕίναι ασφαλές για νήματα και μπορεί να μοιραστεί μεταξύ των νημάτων
Επιτρέπει ένα μηδενικό κλειδί και πολλές μηδενικές τιμέςΔεν επιτρέπει το μηδενικό κλειδί και την τιμή null
Εισήχθη στο JDK 1.2Είναι μια κληρονομιά τάξη
Χρησιμοποιούμε το Iterator για να διασχίσουμε το HashmapΧρησιμοποιούμε το Iterator ή τον απαρίθμηση για να διασχίσουμε το Hashtable
Κληρονομεί την κλάση AbstractMapΚληρονομική τάξη λεξικού
Ο υπολογισμός είναι γρήγοροςΟ υπολογισμός είναι αργός

317. Ποια είναι η διαφορά μεταξύ Συλλογής και Συλλογών;

  • Η Συλλογή είναι μια διεπαφή ενώ οι Συλλογές είναι μια τάξη
  • Η συλλογή παρέχει δομή δεδομένων για την εφαρμογή List, Set, κ.λπ. ενώ η κλάση Συλλογές παρέχει μεθόδους ταξινόμησης και συγχρονισμού στοιχείων συλλογής.

318. Ποια είναι η διαφορά μεταξύ Συγκρίσιμου και Συγκριτικού;

  • Το συγκρίσιμο έχει μια μεμονωμένη μέθοδο σύγκρισηςΤο () ενώ το Συγκριτικό περιέχει μια μεμονωμένη μέθοδο σύγκρισης ().
  • Το συγκρίσιμο βρίσκεται στο πακέτο java.lang ενώ το Συγκριτικό βρίσκεται στο πακέτο java.util
  • Υπάρχει μόνο μία ακολουθία ταξινόμησης στο συγκρίσιμο, ενώ ο συγκριτής έχει πολλαπλή αλληλουχία επώδυνης.

319. Τι είναι το BlockingQueue;

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

320. Ποιο είναι το πλεονέκτημα του αρχείου Properties;

Το αρχείο ιδιοτήτων χρησιμοποιείται κυρίως όταν θέλουμε να αποθηκεύουμε πληροφορίες που αλλάζουν συχνά. Κάθε φορά που αλλάζουμε τις τιμές στο αρχείο ιδιοτήτων, δεν χρειάζεται να μεταγλωττίσουμε ξανά το αρχείο κλάσης java. Ως εκ τούτου, η συντήρηση είναι εύκολη με τη χρήση του αρχείου Properties και παρέχει ευελιξία ως προς τη διαμόρφωση.

321. Τι είναι η μέθοδος hashCode ();

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

322. Γιατί πρέπει να παρακάμψουμε τη μέθοδο ίσο ();

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

323. Πώς να συγχρονίσετε στοιχεία σε μια λίστα, σετ και χάρτη;

Μπορούμε να χρησιμοποιήσουμε τη συγχρονισμένη μέθοδο που υπάρχει στην κλάση Συλλογές για να συγχρονίσουμε τα στοιχεία όπως παρακάτω:

public static List synchronizedList(List l) {}
public static Set synchronizedSet(Set s) {}
public static SortedSet synchronizedSortedSet(SortedSet st) {}
public static Map synchronizedMap(Map m) {}
public static SortedMap synchronizedSortedMap(SortedMap sm) {}

324. Ποιο είναι το πλεονέκτημα της χρήσης μιας γενικής συλλογής;

  • Δεν χρειάζεται να πληκτρολογούμε κατά τη χρήση μιας γενικής συλλογής.
  • Είναι ασφαλής τύπου και ελέγχεται κατά τη στιγμή της μεταγλώττισης
  • Κάνει τον κώδικα πιο σταθερό ανιχνεύοντας σφάλματα κατά τη διάρκεια της μεταγλώττισης

325. Τι είναι το hash-collision στο Hashtable και πώς μπορούμε να το χειριστούμε στην Java;

Όταν δύο διαφορετικά πλήκτρα παράγουν την ίδια τιμή κατακερματισμού, το ονομάζουμε κατακερματισμός. Σε αυτήν την περίπτωση, αποθηκεύει ως δύο ξεχωριστές καταχωρίσεις στον ίδιο κάδο. Υπάρχουν 2 τρόποι αποφυγής σύγκρουσης:

  • Ξεχωριστή αλυσίδα
  • Ανοιχτή διεύθυνση

326. Τι είναι μια κατηγορία Λεξικών;

Μια κλάση λεξικού αποθηκεύει δεδομένα με τη μορφή ζευγών κλειδιών-τιμών. Μπορούμε να ανακτήσουμε την τιμή με βάση το αντίστοιχο κλειδί. Είναι παρόμοιο με τη λέξη Αγγλικό Λεξικό όπου μπορούμε να πάρουμε το νόημα μιας λέξης αναζητώντας με τη λέξη-κλειδί.

327. Ποιο είναι το προεπιλεγμένο μέγεθος του συντελεστή φόρτωσης στη συλλογή με βάση το κατακερματισμό;

Το προεπιλεγμένο μέγεθος του συντελεστή φόρτωσης είναι 0.75.

328. Τι είναι γρήγορη αποτυχία;

Το Fail-fast εμφανίζεται σε έναν Iterator όταν προσπαθούμε να τροποποιήσουμε τη δομή κατά την επανάληψη. Ρίχνει το ConcurrentModificationException. Δεν απαιτεί καμία επιπλέον χώρο εις μνήμην.

329. Ποια είναι η διαφορά μεταξύ Array και ArrayList;

  • Ένα Array είναι σταθερού μεγέθους και δεν μπορούμε να το αλλάξουμε ενώ μπορούμε να αλλάξουμε δυναμικά το μέγεθος του ArrayList.
  • Οι πίνακες μπορούν να αποθηκεύουν πρωτόγονα δεδομένα και αντικείμενα, ενώ το ArrayList μπορεί να αποθηκεύει μόνο αντικείμενα.

330. Ποια είναι η διαφορά μεταξύ του μήκους ενός πίνακα και του μεγέθους ενός ArrayList;

Για να ανακτήσουμε το μήκος ενός πίνακα, μπορούμε να χρησιμοποιήσουμε την ιδιότητα length.

int[] a = {4,5,6,7}
System.out.println(a.length);

Αλλά το ArrayList δεν έχει ιδιότητα μήκους, αντ 'αυτού, χρησιμοποιούμε τη μέθοδο size () για να λάβουμε τον αριθμό των στοιχείων στο ArrayList.

ArrayList<String> al = new ArrayList<String>();
al.add("AAA");
al.add("BBB");
System.out.println(al.size());

331. Πώς να μετατρέψετε μια ArrayList σε Array και αντίστροφα;

Μπορούμε να χρησιμοποιήσουμε τη μέθοδο toArray () του ArrayList για να μετατρέψουμε ένα ArrayList σε Array όπως παρακάτω:

ArrayList<String> al = new ArrayList<String>();
al.toArray(new String[al.size()]);

Για να μετατρέψουμε ένα Array σε ArrayList, χρησιμοποιούμε τη μέθοδο asList του Array όπως παρακάτω:

int[] a = {4,5,6};
Arrays.asList(a);

332. Πώς να κάνετε το Java ArrayList μόνο για ανάγνωση;

Μπορούμε να χρησιμοποιήσουμε τη μέθοδο Collections.unmodifiableCollection () για να κάνουμε το ArrayList ως μόνο για ανάγνωση. Σε αυτήν την περίπτωση, δεν μπορούμε να πραγματοποιήσουμε προσθήκη, διαγραφή ή ρύθμιση λειτουργιών στο ArrayList.

333. Πώς να αφαιρέσετε διπλότυπα από μια λίστα ArrayList;

Μπορούμε να αφαιρέστε τα διπλά από μια ArrayList με δύο τρόπους:

  • Χρήση του HashSet - Δεν διατηρεί τη σειρά εισαγωγής αλλά αφαιρεί τα διπλά
  • Χρήση LinkedHashSet - Διατηρεί τη σειρά και αφαιρεί διπλότυπα

334. Πώς να συγχρονίσετε το ArrayList;

Μπορούμε να συγχρονίσουμε το ArrayList χρησιμοποιώντας είτε τη μέθοδο Collections.synchronizedList () είτε χρησιμοποιώντας το CopyOnWriteArrayList .

335. Πότε να χρησιμοποιήσετε το ArrayList και το LinkedList;

Μπορούμε να χρησιμοποιήσουμε το ArrayList για λειτουργίες αναζήτησης και LinkedList για λειτουργίες ενημέρωσης.

336. Γράψτε ένα πρόγραμμα Java για να αντιστρέψετε τα στοιχεία σε μια ArrayList.

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class ArrayListSort {

  public static void main(String[] args) {
    ArrayList<Integer> i = new ArrayList<Integer>();
    i.add(5);
    i.add(1);
    i.add(10);
    i.add(3);
    i.add(8);
    System.out.println("ArrayList Elements:");
    for(int num : i)
      System.out.println(num);
    
    Iterator it = i.listIterator();
    Collections.reverse(i);
    
    System.out.println("Elements in the reverse order:");
    while(it.hasNext())
      System.out.println(it.next());
  }

}
ArrayList Elements:
5
1
10
3
8
Elements in the reverse order:
8
3
10
1
5

337. Γράψτε ένα πρόγραμμα Java για να ταξινομήσετε τα στοιχεία σε ArrayList με φθίνουσα σειρά.

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;

public class ArrayListReverse {

  public static void main(String[] args) {
    ArrayList<Integer> al = new ArrayList<Integer>();
    al.add(30);
    al.add(10);
    al.add(50);
    al.add(40);
    al.add(20);
    
    System.out.println("Elements in the ArrayList");
    for(int i: al)
      System.out.println(i);
    
    System.out.println("Sort Elements in descending order:");
    Comparator c = Collections.reverseOrder();
    Collections.sort(al, c);
    Iterator it = al.listIterator();
    while(it.hasNext())
      System.out.println(it.next());

  }

}
Elements in the ArrayList
30
10
50
40
20
Sort Elements in descending order:
50
40
30
20
10

338. Τι είναι το JDBC;

Το JDBC είναι Java Database Connectivity που είναι ένα API για τη σύνδεση της εφαρμογής Java και βάσεων δεδομένων. Χρησιμοποίησε προγράμματα οδήγησης JDBC για τη σύνδεση και την εκτέλεση ερωτημάτων σε μια βάση δεδομένων. Μπορούμε επίσης να δούμε και να τροποποιήσουμε εγγραφές σε μια βάση δεδομένων.

339. Τι είναι το πρόγραμμα οδήγησης JDBC;

Το πρόγραμμα οδήγησης JDBC χρησιμοποιεί το JDBC API για τη σύνδεση της εφαρμογής Java σε οποιαδήποτε βάση δεδομένων. Η εφαρμογή προγράμματος οδήγησης JDBC βασίζεται στον τύπο του λειτουργικού συστήματος και της πλατφόρμας υλικού. Ακολουθούν οι διαθέσιμοι τύποι προγραμμάτων οδήγησης JDBC:

  • Πρόγραμμα οδήγησης JDBC-ODBC Bridge: Χρησιμοποιεί το πρόγραμμα οδήγησης ODBC για σύνδεση στη βάση δεδομένων. Μετατρέπει τις κλήσεις μεθόδου JDBC σε κλήσεις μεθόδου ODBC. Αυτό χρησιμοποιείται λιγότερο τώρα και αντικαθίσταται από ένα λεπτό πρόγραμμα οδήγησης.
  • Εγγενές API JDBC: Μετατρέπει τις κλήσεις JDBC σε εγγενείς κλήσεις του API βάσης δεδομένων. Χρησιμοποιεί τις βιβλιοθήκες από την πλευρά του πελάτη της βάσης δεδομένων. Η απόδοσή του είναι καλύτερη από το πρόγραμμα οδήγησης JDBC-ODBC.
  • JDBC-Net καθαρή Java: Πρόκειται για ένα πρόγραμμα οδήγησης πρωτοκόλλου δικτύου που χρησιμοποιεί το ενδιάμεσο λογισμικό για τη μετατροπή των κλήσεων JDBC σε πρωτόκολλο βάσης δεδομένων για προμηθευτή.
  • Λεπτό πρόγραμμα οδήγησης (100% καθαρή Java): Είναι ένα καθαρό πρόγραμμα οδήγησης Java που μετατρέπει απευθείας τις κλήσεις JDBC σε πρωτόκολλα βάσης δεδομένων για προμηθευτές. Αυτός είναι ο πιο συνιστώμενος τύπος προγράμματος οδήγησης λόγω της ταχύτερης απόδοσής του.

340. Ποια είναι τα βήματα για τη σύνδεση σε μια βάση δεδομένων στην Java;

Ακολουθούν τα βήματα για τη σύνδεση σε μια βάση δεδομένων στην Java:

  • Εισαγωγή του πακέτου JDBC: Για να χρησιμοποιήσετε τα προγράμματα οδήγησης JDBC, πρέπει να εισαγάγετε τα συγκεκριμένα πακέτα στον κώδικα μας.
    import java.sql.*;
    
  • Φόρτωση και εγγραφή των προγραμμάτων οδήγησης JDBC: Μπορούμε να χρησιμοποιήσουμε τη μέθοδο forName () για να φορτώσουμε και να καταχωρήσουμε το πρόγραμμα οδήγησης JDBC. Η εγγραφή είναι μόνο ένας επεξεργαστής μιας χρήσης για ολόκληρη την εφαρμογή Java.
    Class.forName("oracle.jdbc.driver.OracleDriver");
  • Σύνδεση στη βάση δεδομένων: Πρέπει να δημιουργήσουμε μια σύνδεση με τη βάση δεδομένων χρησιμοποιώντας τη μέθοδο getConnection (). Δημιουργεί μια παρουσία αντικειμένου της κλάσης java.sql.Connection. Δέχεται τρεις παραμέτρους, τη διεύθυνση URL του διακομιστή βάσης δεδομένων, το όνομα χρήστη και τον κωδικό πρόσβασης για σύνδεση στη βάση δεδομένων (εάν απαιτείται).
    Connection con = DriverManager.getConnection(URL, username, password);
  • Δημιουργία αντικειμένου δήλωσης: Στη συνέχεια, πρέπει να δημιουργήσουμε μια δήλωση που χρησιμοποιείται για την εκτέλεση των ερωτημάτων στη βάση δεδομένων. Για αυτό, μπορούμε να χρησιμοποιήσουμε την πρόσβαση στη μέθοδο createStatement χρησιμοποιώντας το αντικείμενο σύνδεσης.
    Statement s = con.createStatement();
  • Εκτέλεση του ερωτήματος: Χρησιμοποιώντας το αντικείμενο Statement, μπορούμε να εκτελέσουμε τα απαιτούμενα ερωτήματα. Αυτό επιστρέφει πάντα ένα αποτέλεσμα του τύπου ResultSet.
    ResultSet rs = s.executeQuery(query);
  • Επεξεργασία του αποτελέσματος: Μετά την εκτέλεση του ερωτήματος, μπορούμε να επεξεργαστούμε το αποτέλεσμα χρησιμοποιώντας το ενώ βρόχος.
    while(rs.next())
         System.out.println(rs.getInt(1) + " " + rs.getString(2));
  • Κλείσιμο των αντικειμένων: Μόλις ολοκληρωθούν όλες οι λειτουργίες, πρέπει να κλείσουμε τα αντικείμενα ResultsSet, Statement και Connection χρησιμοποιώντας τη μέθοδο close ().
    rs.close();
    s.close();
    con.close();

341. Ποια είναι τα στοιχεία του API JDBC;

Τα στοιχεία JDBC API περιέχουν διαφορετικές διεπαφές και τάξεις όπως παρακάτω:

Διασυνδέσεις

  • Σύνδεση: Το αντικείμενο σύνδεσης δημιουργεί σύνδεση με την απαιτούμενη βάση δεδομένων.
  • Δήλωση: Χρησιμοποιώντας το αντικείμενο σύνδεσης, μπορούμε να δημιουργήσουμε ένα αντικείμενο δήλωσης για την εκτέλεση του ερωτήματος.
  • PreparedStatement: Χρησιμοποιείται για την εκτέλεση παραμετροποιημένα ερωτήματα.
  • ResultSet: Επιστρέφει το αποτέλεσμα του ερωτήματος που εκτελείται.
  • ResultSetMetaData: Περιέχει πληροφορίες του πίνακα, όπως τον αριθμό των στηλών, το όνομα της στήλης, τον τύπο της στήλης κ.λπ.
  • DatabaseMetaData: Παρέχει πληροφορίες σχετικά με τη βάση δεδομένων, όπως όνομα βάσης δεδομένων, όνομα προγράμματος οδήγησης, ο συνολικός αριθμός πινάκων κ.λπ.
  • CallableStatement: Χρήσιμο για την κλήση αποθηκευμένων διαδικασιών και λειτουργιών

μαθήματα

  • DriverManager: Παρακολουθεί όλα τα διαθέσιμα προγράμματα οδήγησης και δημιουργεί σύνδεση με τη βάση δεδομένων. Αυτό είναι το κύριο συστατικό κλάσης του JDBC API.
  • SQLException: Παρέχει πληροφορίες σχετικά με σφάλματα στη βάση δεδομένων.
  • Blob: Είναι ένα δυαδικό μεγάλο αντικείμενο που αντιπροσωπεύει μια συλλογή δυαδικών δεδομένων.
  • Clob: Είναι ένα μεγάλο αντικείμενο χαρακτήρων που αποθηκεύει αρχεία χαρακτήρων.

342. Τι είναι οι δηλώσεις JDBC;

Η δήλωση JDBC χρησιμοποιείται για την εκτέλεση του SQL ερωτήματα και ανακτήστε τα δεδομένα. Διαθέτει μεθόδους όπως execute (), executeUpdate (), executeQuery () κ.λπ. για την εκτέλεση διαφόρων εντολών SQL.

Υπάρχουν 3 τύποι δηλώσεων JDBC:

  • Δήλωση: Εκτελεί ένα στατικό ερώτημα SQL κατά το χρόνο εκτέλεσης και είναι εργοστάσιο του ResultSet.
  • PreparedStatement: Εκτελεί παραμετροποιημένα ερωτήματα κατά το χρόνο εκτέλεσης.
  • CallableStatement: Χρησιμοποιείται για πρόσβαση σε αποθηκευμένες διαδικασίες ή λειτουργίες.

343. Ποιος είναι ο τρόπος επιστροφής της μεθόδου Class.forName ();

Το Class.ForName () επιστρέφει ένα αντικείμενο της κλάσης java.lang.Object τύπου.

344. Ποιες είναι οι διαφορές μεταξύ του Statement και του PreparedStatement;

ΔήλωσηΠροετοιμασμένη δήλωση
Χρησιμοποιείται για την εκτέλεση ερωτημάτων SQLΧρησιμοποιείται για την εκτέλεση παραμετροποιημένων ερωτημάτων
Όταν χρησιμοποιούμε τη δήλωση, το ερώτημα συντάσσεται κάθε φορά που εκτελούμε το πρόγραμμαΌταν χρησιμοποιούμε το PreparedStatement, το ερώτημα συντάσσεται μόνο μία φορά.
Δεν απαιτεί παραμέτρουςΑπαιτείται η μετάδοση παραμέτρων στο ερώτημα

345. Πώς να ορίσετε την τιμή null στο JDBC PreparedStatement;

Μπορούμε να χρησιμοποιήσουμε τη μέθοδο setNull () της διεπαφής PreparedStatement για να ορίσουμε μια τιμή ευρετηρίου σε null όπως παρακάτω.

void setNull(int parameterIndex, int sqlType) throws SQLException

346. Ποια είναι τα οφέλη του PreparedStatement από τη διεπαφή Statement;

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

347. Ποια είναι η διαφορά μεταξύ της εκτέλεσης, της εκτέλεσης και της εκτέλεσης της εκτέλεσης;

εκτελέσειexecuteQueryexecuteUpdate
Μπορεί να χρησιμοποιηθεί για την εκτέλεση οποιωνδήποτε λειτουργιών δήλωσης SQL όπως και η ενημέρωση και η επιλογήΜπορεί να χρησιμοποιηθεί για εκτέλεση μόνο επιλεγμένης λειτουργίαςΜπορεί να χρησιμοποιηθεί για την εκτέλεση μόνο λειτουργιών όπως ενημέρωση, διαγραφή ή εισαγωγή.
Επιστρέφει μια τιμή BooleanΕπιστρέφει ένα ResultSet που περιέχει τα δεδομένα που ανακτώνται εκτελώντας το ερώτημαΕπιστρέφει μια ακέραια τιμή που αντιπροσωπεύει τον αριθμό των εγγραφών που επηρεάζονται από την εκτέλεση του ερωτήματος

348. Ποιοι είναι οι διαφορετικοί τύποι ResultSet;

Υπάρχουν 3 τύποι ResultSet με βάση την κατεύθυνση στην οποία μπορεί να πλοηγηθεί στις εγγραφές:

  • ResultSet.TYPE_Forward_ONLY: Μπορεί να πλοηγηθεί μόνο προς τα εμπρός.
  • ResultSet.TYPE_SCROLL_INSENSITIVE: Μπορεί να πλοηγηθεί τόσο προς τα εμπρός όσο και προς τα πίσω. Δεν είναι ευαίσθητο στις αλλαγές που έγιναν.
  • ResultSet.TYPE_SCROLL_SENSITIVE: Μπορεί να πλοηγηθεί τόσο προς τα εμπρός όσο και προς τα πίσω. Είναι ευαίσθητο στις αλλαγές που έγιναν.

349. Ποιες είναι οι διαφορές μεταξύ ResultSet και RowSet;

ΑποτέλεσμαRowSet
Διατηρεί πάντα τη σύνδεση με τη βάση δεδομένωνΜπορεί να συνδεθεί και να αποσυνδεθεί ανά πάσα στιγμή
Δεν είναι δυνατή η σειριοποίησηΜπορεί να σειριοποιηθεί
Δεν είναι δυνατή η μεταφορά ενός αντικειμένου ResultSet μέσω δικτύουΜπορεί να περάσει το αντικείμενο RowSet μέσω δικτύου
Δεν είναι αντικείμενο JavaBeanΕίναι αντικείμενο JavaBean
Από προεπιλογή, το ResultSet δεν μπορεί να μετακινηθεί και να ενημερωθεί.Από προεπιλογή, το RowSet έχει δυνατότητα κύλισης και δυνατότητα ενημέρωσης.
Το ResultSet επιστρέφεται με τη μέθοδο executeQuery ()Το RowSet επιστρέφεται με τη μέθοδο RowSetProvider.newFactory (). CreateJdbcRowSet ().

350. Πώς να εκτελέσετε αποθηκευμένες διαδικασίες χρησιμοποιώντας το CallableStatement;

Ακολουθούν τα βήματα για την εκτέλεση των αποθηκευμένων διαδικασιών.

  • Δημιουργήστε μια διαδικασία στη βάση δεδομένων
  • Δημιουργία σύνδεσης δικτύου
  • Δημιουργήστε ένα αντικείμενο του CallableStatement
  • Ορίστε τις τιμές και εκτελέστε το ερώτημα

Παράδειγμα:

Ακολουθεί ένα δείγμα διαδικασίας που δημιουργούμε στη βάση δεδομένων.

create or replace procedure "SAMPLE"(id IN NUMBER, name IN VARCHAR2)
is
begin
insert into employee values(id,name);
end

Παρακάτω είναι η δομή του πίνακα

CREATE TABLE EMPLOYEE(ID NUMBER(10), NAME VARCHAR2(100))

Κωδικός Java για την εκτέλεση μιας αποθηκευμένης διαδικασίας χρησιμοποιώντας το CallableStatement.

import java.sql.*;
public class StoredProcedureDemo {

  public static void main(String[] args) throws Exception{
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
    
    CallableStatement cs = c.prepareCall("{call sample(?,?)}");
    cs.setInt(1, 100);
    cs.setString(2, "Ravi");
    
    cs.execute();
    
    System.out.println("Success");

  }

}

351. Ποιος είναι ο ρόλος της κλάσης JDBC DriverManager;

Η κλάση JDBC DriverManager παρακολουθεί όλα τα διαθέσιμα προγράμματα οδήγησης που έχουν εγγραφεί χρησιμοποιώντας τη μέθοδο registerDriver. Λειτουργεί ως διεπαφή μεταξύ του χρήστη και του προγράμματος οδήγησης και βοηθά στη δημιουργία σύνδεσης μεταξύ του προγράμματος οδήγησης και της βάσης δεδομένων.

352. Ποια είναι η λειτουργία της διεπαφής σύνδεσης JDBC;

Η διασύνδεση JDBC Connection βοηθά στη δημιουργία σύνδεσης με τη βάση δεδομένων και διατηρεί την περίοδο λειτουργίας. Χρησιμοποιείται επίσης για τη διαχείριση συναλλαγών. Χρησιμοποιείται μαζί με το Statement, PreparedStatement, CallableStatement και το DatabaseMetaData.

353. Τι είναι η διεπαφή JDBC ResultSet;

Η διεπαφή JDBC ResultSet περιέχει τα δεδομένα που ανακτώνται εκτελώντας το ερώτημα. Κάθε αντικείμενο ResultSet αντιπροσωπεύει τη σειρά σε έναν πίνακα δεδομένων. Έχει διαφορετικούς τύπους χρησιμοποιώντας τους οποίους πλοηγούμαστε προς τα εμπρός και προς τα πίσω σε έναν πίνακα δεδομένων.

354. Τι είναι η διεπαφή JDBC ResultSetMetaData;

Η διεπαφή JDBC ResultSetMetaData περιέχει πληροφορίες που σχετίζονται με τον πίνακα, όπως ο αριθμός στηλών, το όνομα στήλης, ο τύπος στήλης κ.λπ.

355. Τι είναι η διεπαφή JDBC DatabaseMetaData;

Η διεπαφή JDBC DatabaseMetaData περιέχει πληροφορίες που σχετίζονται με τη βάση δεδομένων, όπως όνομα βάσης δεδομένων, όνομα προγράμματος οδήγησης, έκδοση προγράμματος οδήγησης, αριθμός πινάκων κ.λπ. Μπορούμε να χρησιμοποιήσουμε τη μέθοδο getMetaData χρησιμοποιώντας το αντικείμενο σύνδεσης για να δημιουργήσουμε μια παρουσία του DatabaseMetaData.

356. Ποια διεπαφή είναι υπεύθυνη για τη διαχείριση συναλλαγών στο JDBC;

Η διασύνδεση σύνδεσης έχει μεθόδους όπως commit (), rollback () που είναι υπεύθυνες για τη διαχείριση συναλλαγών στο JDBC.

357. Τι είναι η επεξεργασία παρτίδας και πώς να εκτελέσετε επεξεργασία παρτίδας στο JDBC;

Batch Η επεξεργασία είναι η διαδικασία εκτέλεσης πολλαπλών ερωτημάτων ταυτόχρονα σε παρτίδα και ως εκ τούτου οδηγεί σε μετά την απόδοση. Το Statement και το PreparedStatement περιέχουν μεθόδους που υποστηρίζουν τη μαζική επεξεργασία. Ακολουθούν τα βήματα για την εκτέλεση παρτίδας:

  • Φόρτωση της κατηγορίας προγράμματος οδήγησης
  • Δημιουργήστε μια σύνδεση
  • Δημιουργήστε μια δήλωση
  • Προσθέστε ερωτήματα κατά παρτίδες
  • Εκτελέστε την παρτίδα
  • Κλείστε τη σύνδεση
import java.sql.*;
public class BatchProcessing {

  public static void main(String[] args) throws Exception {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
    c.setAutoCommit(false);
    
    Statement s = c.createStatement();
    
    //Add queries to the batch
    s.addBatch("insert into employees value(111,'Akash')");
    s.addBatch("insert into employees value(222,'Bharat')");
    
    //Execute the batch
    s.executeBatch();
    
    c.commit();
    c.close();

  }

}

358. Τι είναι οι τύποι δεδομένων CLOB και BLOB στο JDBC;

Το BLOB σημαίνει Binary Large Object και αποθηκεύει δυαδικά δεδομένα όπως φωνή, εικόνα και μικτά μέσα στη βάση δεδομένων. Μπορεί να χρησιμοποιηθεί σε βάσεις δεδομένων όπως MySQL, Oracle, DB2. Μπορεί να χωρέσει έως και 3 GB δεδομένων στη MySQL και 128 GB στη βάση δεδομένων Oracle.

Το CLOB σημαίνει Character Large Object και αποθηκεύει δεδομένα βάσει χαρακτήρων, όπως αρχεία στη βάση δεδομένων. Θεωρείται ως συμβολοσειρά χαρακτήρων. Μπορεί να χωρέσει έως και 2 GB στη MySQL και 128 GB στη βάση δεδομένων Oracle.

359. Ποιοι είναι οι διαφορετικοί τύποι κλειδαριών στο JDBC;

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

  • Κλειδαριές σειράς και κλειδιών: Χρησιμοποιείται όταν ενημερώνουμε τις σειρές στον πίνακα δεδομένων.
  • Κλειδαριές σελίδας: Χρησιμοποιείται για το κλείδωμα της σελίδας ειδικά όταν κάποια συναλλαγή βρίσκεται ακόμη σε εξέλιξη στη συγκεκριμένη σελίδα. Κλειδώνει ολόκληρη τη σελίδα που χρησιμοποιεί τη σειρά για ενημέρωση, διαγραφή ή εισαγωγή δεδομένων.
  • Κλειδαριές τραπεζιού: Χρησιμοποιείται για το κλείδωμα του πίνακα. Υπάρχουν δύο τύποι κλειδαριών τραπεζιού, όπως κοινόχρηστο και αποκλειστικό. Ένα κοινόχρηστο κλείδωμα μας επιτρέπει να διαβάσουμε τον πίνακα, αλλά αποτρέπει τις ενημερώσεις. Ένα αποκλειστικό κλείδωμα εμποδίζει τόσο την ανάγνωση όσο και τη γραφή.
  • Κλειδαριές βάσης δεδομένων: Κλειδώνει τη βάση δεδομένων και εμποδίζει την ανάγνωση και την ενημέρωση άλλων συναλλαγών όταν η βάση δεδομένων είναι ανοιχτή.

360. Πώς να αποθηκεύσετε και να ανακτήσετε εικόνες από τη βάση δεδομένων;

Δημιουργήστε έναν πίνακα με δύο στήλες ως NAME και PHOTO.

CREATE TABLE "IMAGETABLE"("NAME" VARCHAR2(1000), "PHOTO" BLOB)

Χρησιμοποιώντας το PreparedStatement μπορούμε να αποθηκεύσουμε και να ανακτήσουμε τις εικόνες από τη βάση δεδομένων. Παρακάτω είναι ο κωδικός για την αποθήκευση της εικόνας.

import java.sql.*;
import java.io.*;
public class StoreImage{

  public static void main(String[] args) {
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
      
      PreparedStatement p = c.prepareStatement("insert into imagetable(?,?)");
      p.setString(1, "Ravi");
      
      FileInputStream f = new FileInputStream("C:\\photo.jpg");
      p.setBinaryStream(2, f, f.available());
      
      //Store the image
      int i = p.executeUpdate();
      System.out.println(i + " row is affected");
      
      c.close();
      
    }
    catch(Exception e) {
      e.printStackTrace();
    }
    

  }

}

Παρακάτω είναι ο κωδικός για την ανάκτηση της εικόνας από τη βάση δεδομένων.

import java.sql.*;
import java.io.*;
public class ImageRetrieval {

  public static void main(String[] args) {
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
      
      PreparedStatement p = c.prepareStatement("select * from imagetable");
      ResultSet r = p.executeQuery();
      
      if(r.next()) {
        Blob b = r.getBlob(2); //Retrieve 2nd column data since image is in 2nd column
        byte[] barr = b.getBytes(1, (int)b.length()); //1 denotes 1st image
        
        FileOutputStream f = new FileOutputStream("C:\\newphoto.jpg");
        f.write(barr);
        
        f.close();
      }
      System.out.println("Image retrieved");
      
      c.close();
      
    }
    catch(Exception e) {
      e.printStackTrace();
    }

  }

}

361. Πώς να αποθηκεύσετε αρχεία στη βάση δεδομένων Oracle;

Μπορούμε να χρησιμοποιήσουμε τον τύπο δεδομένων CLOB για να αποθηκεύσουμε αρχεία στη βάση δεδομένων χρησιμοποιώντας το PreparedStatement.

Παρακάτω είναι ο κωδικός για τη δημιουργία πίνακα με 2 στήλες ID και NAME

CREATE TABLE FILETABLE("ID" NUMBER, "NAME" CLOB)

Παρακάτω είναι ο κωδικός για την αποθήκευση του αρχείου στη βάση δεδομένων.

import java.sql.*;
import java.io.*;

public class StoreFile {

  public static void main(String[] args) {
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
      
      PreparedStatement p = c.prepareStatement("insert into filetablevalues(?,?)");
      
      File f = new File("D:\\File1.txt");
      FileReader fr = new FileReader(f);
      
      p.setInt(1, 100);
      p.setCharacterStream(2, fr, (int)f.length());
      
      int i = p.executeUpdate();
      System.out.println(i + " row is affected");
      
      c.close();
      
    }
    catch(Exception e) {
      e.printStackTrace();
    }

  }

}

362. Πώς να ανακτήσετε αρχεία από μια βάση δεδομένων της Oracle;

Μπορούμε να χρησιμοποιήσουμε τη μέθοδο getClob () του PreparedStatement για να ανακτήσουμε αρχεία από τη βάση δεδομένων.

Παρακάτω είναι ο πίνακας που έχουμε δημιουργήσει.

CREATE TABLE FILETABLE("ID" NUMBER, "NAME" CLOB)

Παρακάτω είναι ο κωδικός για την ανάκτηση του αρχείου από τη βάση δεδομένων.

import java.io.*;
import java.sql.*;
public class FileRetrieval {

  public static void main(String[] args) {
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
      
      PreparedStatement p = c.prepareStatement("select * from filetable");
      
      ResultSet r = p.executeQuery();
      r.next(); //Points to the first row
      
      Clob clob = r.getClob(2); //2 denotes the 2nd column that contains the file
      Reader reader = clob.getCharacterStream();
      
      FileWriter f = new FileWriter("D:\\File2.txt");
      int i;
      while((i=reader.read())!= -1) {
        f.write((char)i);
      }
      f.close();
      c.close();
      
      System.out.println("File Retrieved");
    }
    catch(Exception e) {
      e.printStackTrace();
    }

  }

}

363. Ποιες είναι οι διαφορές μεταξύ των αποθηκευμένων διαδικασιών και λειτουργιών;

Αποθηκευμένη διαδικασίαλειτουργίες
Εκτελεί επιχειρηματική λογικήΕκτελεί υπολογισμούς
Είναι προαιρετικό να υπάρχει τύπος επιστροφήςΕίναι υποχρεωτικό να υπάρχει τύπος επιστροφής
Υποστηρίζει παραμέτρους εισόδου και εξόδουΥποστηρίζει μόνο παραμέτρους εισόδου
Μπορεί να επιστρέψει 0 ή πολλές τιμέςΜπορεί να επιστρέψει μόνο 1 τιμή
Οι διαδικασίες δεν μπορούν να κληθούν από τη λειτουργίαΗ λειτουργία μπορεί να κληθεί από μια διαδικασία
Η διαδικασία επιτρέπει SELECT και DML δηλώσεις (INSERT, UPDATE, DELETE)Η λειτουργία επιτρέπει μόνο SELECT δήλωση

364. Πώς να διατηρήσετε την ακεραιότητα της βάσης δεδομένων χρησιμοποιώντας το JDBC;

Μπορούμε να διατηρήσουμε το ακεραιότητα της βάσης δεδομένων διασφαλίζοντας τις ιδιότητες ACID. Το ACID σημαίνει ατομικότητα, συνέπεια, απομόνωση και ανθεκτικότητα. Μπορούμε να διαχειριστούμε τις συναλλαγές χρησιμοποιώντας τις μεθόδους όπως setAutoCommit (), commit (), rollback () που υπάρχει στη διασύνδεση σύνδεσης.

import java.sql.*;
public class IntegrityDemo {

  public static void main(String[] args) throws Exception{
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
    
    c.setAutoCommit(false);
    
    Statement s = c.createStatement();
    s.executeUpdate("insert into employees values(111,'Ravi')");
    s.executeUpdate("insert into employees values(222,'Abhishek')");
    
    c.commit();
    c.close();

  }

}

365. Τι είναι το JDBC RowSet;

Το JDBC RowSet είναι ένα περιτύλιγμα του ResultSet. Μπορεί να κρατά δεδομένα πίνακα όπως το ResultSet και είναι εύκολο στη χρήση. Οι κλάσεις υλοποίησης της διεπαφής RowSet είναι:

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

366. Ποια είναι η διαφορά μεταξύ java.util.Date και java.sql.Date;

Η κύρια διαφορά είναι ότι το java.sql.Date αντιπροσωπεύει μόνο πληροφορίες ημερομηνίας χωρίς ώρα και το java.util.Date αντιπροσωπεύει πληροφορίες ημερομηνίας και ώρας.

367. Τι είναι η μέθοδος JDBC setMaxRows;

Η μέθοδος setMaxRows () περιορίζει τον αριθμό των γραμμών που μπορεί να επιστρέψει η βάση δεδομένων χρησιμοποιώντας το ερώτημα.