This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:local_inner_classes [2015/04/30 13:38] gthanos [Πρόσβαση στα μέλη της εξωτερικής κλάσης] |
java:local_inner_classes [2021/04/12 05:54] gthanos [Τοπικές κλάσεις] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Τοπικές κλάσεις ====== | ====== Τοπικές κλάσεις ====== | ||
| - | Μπορείτε να ορίσετε μία τοπική κλάση μέσα σε οποιοδήποτε μπλοκ κώδικα, | ||
| - | <code java LocalClassExample.java> | + | Μπορείτε να ορίσετε μία κλάση μέσα σε οποιοδήποτε μπλοκ κώδικα, |
| - | public class LocalClassExample | + | |
| + | Ο λόγος που πιθανόν θέλει κάποιος προγραμματιστής να ορίσει μία τοπική κλάση είναι ότι η λειτουργικότητα που υλοποιεί η τοπική κλάση αφορά μόνο τη συγκεκριμένη μέθοδο μέσα στην οποία δηλώνεται. | ||
| + | |||
| + | Δείτε το παρακάτω παράδειγμα κώδικα. | ||
| + | |||
| + | <code java ValidatePhoneNumberUsingLocalClass.java> | ||
| + | |||
| + | public class ValidatePhoneNumberUsingLocalClass | ||
| | | ||
| - | String regularExpression = " | + | |
| | | ||
| - | public void validatePhoneNumber(String | + | public |
| | | ||
| final int numberLength = 10; | final int numberLength = 10; | ||
| Line 14: | Line 20: | ||
| class PhoneNumber { | class PhoneNumber { | ||
| | | ||
| - | String formattedPhoneNumber = null; | + | |
| PhoneNumber(String phoneNumber){ | PhoneNumber(String phoneNumber){ | ||
| regularExpression = " | regularExpression = " | ||
| - | | + | String currentNumber = phoneNumber.replaceAll( |
| - | | + | |
| regularExpression, | regularExpression, | ||
| if (currentNumber.length() == numberLength) | if (currentNumber.length() == numberLength) | ||
| Line 31: | Line 36: | ||
| } | } | ||
| | | ||
| + | public String toString() { | ||
| + | if(formattedPhoneNumber == null) | ||
| + | return " | ||
| + | else | ||
| + | return formattedPhoneNumber; | ||
| + | } | ||
| + | | ||
| + | // public void printOriginalNumbers() { | ||
| + | // System.out.println(" | ||
| + | // " and " + phoneNumber2); | ||
| + | // } | ||
| } | } | ||
| - | | + | |
| - | PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2); | + | System.out.println(number + ": " |
| - | + | ||
| - | if (myNumber1.getNumber() == null) | + | |
| - | System.out.println(" | + | |
| - | | + | |
| - | | + | |
| - | if (myNumber2.getNumber() == null) | + | |
| - | System.out.println("Second number is invalid"); | + | |
| - | else | + | |
| - | System.out.println(" | + | |
| } | } | ||
| public static void main(String... args) { | public static void main(String... args) { | ||
| - | | + | |
| - | lce.validatePhoneNumber(" | + | ValidatePhoneNumberUsingLocalClass.validatePhoneNumber(" |
| } | } | ||
| } | } | ||
| </ | </ | ||
| - | + | ===== Πρόσβαση στα μέλη της εξωτερικής κλάσης | |
| - | ===== Πρόσβαση στα μέλη της εξωτερικής κλάσης ===== | + | |
| Μία τοπική κλάση έχει πρόσβαση στα μέλη της εξωτερικής κλάσης. Στο προηγούμενο παράδειγμα, | Μία τοπική κλάση έχει πρόσβαση στα μέλη της εξωτερικής κλάσης. Στο προηγούμενο παράδειγμα, | ||
| - | In addition, a local class has access to local variables. However, a local class can only access local variables that are declared final. When a local class accesses a local variable or parameter of the enclosing block, it captures that variable or parameter. For example, the PhoneNumber constructor can access the local variable numberLength because it is declared final; numberLength is a captured variable. | + | ===== Πρόσβαση στις τοπικές μεταβλητές της μεθόδου ===== |
| - | Επιπρόσθετα, | + | Μία τοπική κλάση έχει πρόσβαση στις τοπικές μεταβλητές της μεθόδου μέσα στην οποία συνήθως ορίζεται μόνο αν αυτές έχουν οριστεί ως //final//. Δηλώνοντας μία μεταβλητή ως //final// δηλώνουμε ότι η τιμή αυτή δεν πρόκειται και δεν μπορεί να αλλάξει. |
| - | <code java>// | + | < |
| - | θα παρατηρήσετε ότι λαμβένετε το παρακάτω μήνυμα λάθους | + | final int numberLength = 10; |
| - | < | + | |
| - | LocalClassExample.java: | + | |
| - | | + | |
| </ | </ | ||
| + | Αν προσθέσετε τους προσδιοριστές //final// στις παραμέτρους // | ||
| + | |||
| + | <WRAP tip 80% center round> | ||
| + | Στην **Java 8** και μεταγενέστερα εισάγεται η έννοια της // | ||
| + | </ | ||
| + | |Προηγούμενο: | ||