This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
|
java:local_inner_classes [2021/04/12 04:54] |
java:local_inner_classes [2021/04/12 05:54] gthanos [Τοπικές κλάσεις] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Τοπικές κλάσεις ====== | ||
| + | |||
| + | Μπορείτε να ορίσετε μία κλάση μέσα σε οποιοδήποτε μπλοκ κώδικα, | ||
| + | |||
| + | Ο λόγος που πιθανόν θέλει κάποιος προγραμματιστής να ορίσει μία τοπική κλάση είναι ότι η λειτουργικότητα που υλοποιεί η τοπική κλάση αφορά μόνο τη συγκεκριμένη μέθοδο μέσα στην οποία δηλώνεται. | ||
| + | |||
| + | Δείτε το παρακάτω παράδειγμα κώδικα. | ||
| + | |||
| + | <code java ValidatePhoneNumberUsingLocalClass.java> | ||
| + | |||
| + | public class ValidatePhoneNumberUsingLocalClass { | ||
| + | | ||
| + | static String regularExpression = " | ||
| + | | ||
| + | public static void validatePhoneNumber(String number) { | ||
| + | | ||
| + | final int numberLength = 10; | ||
| + | |||
| + | class PhoneNumber { | ||
| + | | ||
| + | private String formattedPhoneNumber = null; | ||
| + | |||
| + | PhoneNumber(String phoneNumber){ | ||
| + | regularExpression = " | ||
| + | String currentNumber = phoneNumber.replaceAll( | ||
| + | regularExpression, | ||
| + | if (currentNumber.length() == numberLength) | ||
| + | formattedPhoneNumber = currentNumber; | ||
| + | else | ||
| + | formattedPhoneNumber = null; | ||
| + | } | ||
| + | |||
| + | public String getNumber() { | ||
| + | return formattedPhoneNumber; | ||
| + | } | ||
| + | | ||
| + | public String toString() { | ||
| + | if(formattedPhoneNumber == null) | ||
| + | return " | ||
| + | else | ||
| + | return formattedPhoneNumber; | ||
| + | } | ||
| + | | ||
| + | // public void printOriginalNumbers() { | ||
| + | // System.out.println(" | ||
| + | // " and " + phoneNumber2); | ||
| + | // } | ||
| + | } | ||
| + | |||
| + | // myNumber1.printOriginalNumbers(); | ||
| + | System.out.println(number + ": " + new PhoneNumber(number)); | ||
| + | } | ||
| + | |||
| + | public static void main(String... args) { | ||
| + | ValidatePhoneNumberUsingLocalClass.validatePhoneNumber(" | ||
| + | ValidatePhoneNumberUsingLocalClass.validatePhoneNumber(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | ===== Πρόσβαση στα μέλη της εξωτερικής κλάσης από την τοπική κλάση ===== | ||
| + | |||
| + | Μία τοπική κλάση έχει πρόσβαση στα μέλη της εξωτερικής κλάσης. Στο προηγούμενο παράδειγμα, | ||
| + | |||
| + | ===== Πρόσβαση στις τοπικές μεταβλητές της μεθόδου ===== | ||
| + | |||
| + | Μία τοπική κλάση έχει πρόσβαση στις τοπικές μεταβλητές της μεθόδου μέσα στην οποία συνήθως ορίζεται μόνο αν αυτές έχουν οριστεί ως //final//. Δηλώνοντας μία μεταβλητή ως //final// δηλώνουμε ότι η τιμή αυτή δεν πρόκειται και δεν μπορεί να αλλάξει. Για παράδειγμα η μεταβλητή numberLength δηλώνεται // | ||
| + | <code java> | ||
| + | final int numberLength = 10; | ||
| + | </ | ||
| + | |||
| + | Αν προσθέσετε τους προσδιοριστές //final// στις παραμέτρους // | ||
| + | |||
| + | <WRAP tip 80% center round> | ||
| + | Στην **Java 8** και μεταγενέστερα εισάγεται η έννοια της // | ||
| + | </ | ||
| + | |||
| + | |Προηγούμενο: | ||