In deze zelfstudie leren we het gebruik van het uiteindelijke trefwoord. laatste trefwoord kan samen met variabelen, methoden en klassen worden gebruikt. We zullen de volgende onderwerpen in detail behandelen.
1) laatste variabele
2) laatste methode
3) laatste les
1) laatste variabele
laatste variabelen zijn niets anders dan constanten. We kunnen de waarde van een laatste variabele niet meer wijzigen nadat deze is geïnitialiseerd. Laten we de onderstaande code bekijken:
klassedemo { final int MAX_VALUE = 99;void myMethod () { MAX_VALUE = 101;} public static void main (String args []) { Demo obj = nieuwe Demo (); obj.myMethod (); } }
Output:
Uitzondering in thread "main" java.>We hebben een compilatiefout in het bovenstaande programma omdat we hebben geprobeerd de waarde van een laatste variabele "MAX_VALUE" te wijzigen.
Opmerking: het wordt als een goede gewoonte beschouwd om constante namen in HOOFDLETTERS (CAPS) te hebben.
Lege laatste variabele
Een laatste variabele die niet is geïnitialiseerd op het moment van declaratie staat bekend als blanco laatste variabele . We moeten de lege laatste variabele in de constructor van de klasse initialiseren, anders geeft dit een compilatiefout (Fout: variabele MAX_VALUE is mogelijk niet geïnitialiseerd).
Dit is hoe een lege laatste variabele in een klasse wordt gebruikt:
klassedemo { // Lege laatste variabelefinal int MAX_VALUE; Demonstratie () { // Het moet worden geïnitialiseerd in constructor MAX_VALUE = 100;}void myMethod () { System.out.println (MAX_VALUE);} public static void main (String args []) { Demo obj = nieuwe Demo (); obj.myMethod (); } }Output:
100Wat is het nut van een lege laatste variabele?
Laten we zeggen dat we een studentenklasse hebben die een veld met de naam Roll No. de studenten (anders zouden alle studenten dezelfde rol niet hebben). In dat geval kunnen we roll geen variabele als blanco final declareren en initialiseren we deze waarde tijdens het maken van objecten als volgt:klas StudentData { // Lege laatste variabelelaatste int ROLL_NO; StudentData (int rnum) { // Het moet worden geïnitialiseerd in constructor ROLL_NO = rnum;}void myMethod () { System.out.println ("Roll no is:" + ROLL_NO);} public static void main (String args []) { StudentData obj = nieuwe StudentData (1234); obj.myMethod (); } }Output:
Rol nr is: 1234Meer over lege laatste variabele op StackOverflow en Wiki .
Niet-geïnitialiseerde statische laatste variabele
Een statische laatste variabele die niet tijdens de declaratie wordt geïnitialiseerd, kan alleen in het statische blok worden geïnitialiseerd. Voorbeeld:
class Voorbeeld { // statische lege laatste variabele statische finale int ROLL_NO;statisch{ROLL_NO = 1230;} public static void main (String args []) { System.out.println (Example.ROLL_NO); } }Output:
12302) laatste methode
Een definitieve methode kan niet worden opgeheven. Wat betekent dat hoewel een subklasse de uiteindelijke methode van de bovenliggende klasse zonder problemen kan aanroepen, maar deze niet kan overschrijven.
Voorbeeld:
klasse XYZ { laatste ongeldige demo () { System.out.println ("XYZ Class Method");} }klasse ABC verlengt XYZ { void demo () { System.out.println ("ABC Class Method");} public static void main (String args []) { ABC obj = nieuw ABC (); obj.demo (); } }Het bovenstaande programma zou een compilatiefout veroorzaken, maar we kunnen de uiteindelijke methode van de bovenliggende klasse zonder problemen gebruiken in de subklasse. Laten we deze code eens bekijken: dit programma zou prima kunnen werken omdat we de definitieve methode niet overschrijven . Dat toont aan dat definitieve methoden zijn geërfd, maar ze komen niet in aanmerking voor opheffing.
klasse XYZ { laatste ongeldige demo () { System.out.println ("XYZ Class Method");} }klasse ABC verlengt XYZ { public static void main (String args []) { ABC obj = nieuw ABC (); obj.demo (); } }Output:
XYZ Class-methode3) laatste les
We kunnen een laatste les niet verlengen. Beschouw het onderstaande voorbeeld:
laatste klas XYZ { }klasse ABC verlengt XYZ { void demo () { System.out.println ("Mijn methode");} public static void main (String args []) { ABC obj = nieuw ABC ();obj.demo ();} }Output:
Het type ABC kan de laatste klasse XYZ niet subklassePunten om te onthouden:
1) Een constructor kan niet als definitief worden verklaard.
2) Lokale laatste variabele moet tijdens de aangifte worden geïnitialiseerd.
3) Alle variabelen die in een interface worden gedeclareerd , zijn standaard definitief.
4) We kunnen de waarde van een laatste variabele niet wijzigen.
5) Een definitieve methode kan niet worden opgeheven.
6) Een laatste les mag niet worden geërfd.
7) Als methodeparameters definitief worden verklaard, kan de waarde van deze parameters niet worden gewijzigd.
8) Het is een goede gewoonte om de laatste variabele in alle CAPS te noemen.
9) finaal, final en finalize zijn drie verschillende termen. eindelijk wordt gebruikt bij het afhandelen van uitzonderingen en finalize is een methode die JVM aanroept tijdens het ophalen van afval .
Is er een verschil in het aangeven van een klasfinale of het markeren van de klas en methoden als finaal. Ik denk dat het maken van de klas de methoden ook goed maakt, maar ik ben niet zeker voor extra informatie die ik heb gemist in je bericht.
Kerel, als je wilt dat slechts een van de methoden van een superklasse niet wordt overschreven door een subklasse, moet je de methode als abstract markeren in plaats van de klasse als definitief te markeren (waardoor deze niet erfelijk is). En als u wilt dat alle methoden in een superklasse niet worden overschreven maar beschikbaar zijn voor subklasse), moet u abstracte trefwoorden gebruiken voor alle abstracte methoden.
ik vind je website leuk omdat elk onderwerp simpelweg wordt weergegeven met een goed en nuttig voorbeeld, daarom zal alles gemakkelijker te begrijpen zijn ... ga alsjeblieft verder.
final int MAX_VALUE = 99;
void myMethod () {
MAX_VALUE = 101;
}
instantievariabelen en lokale variabelen zijn verschillend, MAX_VALUE = 101; moet worden geïnitialiseerd en drukt uitvoer 101 af, omdat er geen relatie is in MAX_VALUE = 99; en MAX_VALUE = 101;