ஜாவாவில் இந்த திறவுச்சொல் உள்ளது — இறுதி. இது வகுப்புகள், முறைகள், மாறிகள் (முறை அளவுருக்கள் உட்பட) பயன்படுத்தப்படலாம். ஒரு வகுப்பிற்கு, இறுதித் திறவுச்சொல் என்பது வகுப்பில் துணைப்பிரிவுகளைக் கொண்டிருக்க முடியாது, அதாவது பரம்பரை தடைசெய்யப்பட்டுள்ளது... இது மாறாத (மாற்ற முடியாத) பொருட்களை உருவாக்கும் போது பயனுள்ளதாக இருக்கும். எடுத்துக்காட்டாக, சரம் வகுப்பு இறுதியானது என அறிவிக்கப்பட்டது.
public final class String {
}
class SubString extends String { // Compilation error
}
இறுதி மாற்றியமைப்பானது சுருக்க வகுப்புகளுக்குப் பயன்படுத்தப்பட முடியாது என்பதையும் நான் கவனத்தில் கொள்ள வேண்டும், ஏனெனில் இவை பரஸ்பர பிரத்தியேக கருத்துக்கள். ஒரு இறுதி முறைக்கு, மாற்றியமைப்பானது, அந்த முறையை துணைப்பிரிவுகளில் மேலெழுத முடியாது. அசல் செயலாக்கத்தின் மாற்றத்தைத் தடுக்க விரும்பும்போது இது பயனுள்ளதாக இருக்கும்.
public class SuperClass {
public final void printReport() {
System.out.println("Report");
}
}
class SubClass extends SuperClass {
public void printReport() { //Compilation error
System.out.println("MyReport");
}
}
ஒரு பழமையான வகையின் மாறிகளுக்கு, இறுதி முக்கிய வார்த்தையானது, ஒருமுறை ஒதுக்கப்பட்ட மதிப்பை மாற்ற முடியாது. குறிப்பு மாறிகளுக்கு, ஒரு பொருள் ஒதுக்கப்பட்ட பிறகு, அந்த பொருளின் குறிப்பை நீங்கள் மாற்ற முடியாது. இது முக்கியமானது! குறிப்பை மாற்ற முடியாது, ஆனால் பொருளின் நிலையை மாற்றலாம். ஜாவா 8 ஒரு புதிய கருத்தை அறிமுகப்படுத்தியது: திறம்பட இறுதி. இது மாறிகளுக்கு மட்டுமே பொருந்தும் (முறை அளவுருக்கள் உட்பட). இதன் முக்கிய அம்சம் என்னவென்றால், இறுதிச் சொல் தெளிவாக இல்லாத போதிலும், துவக்கத்திற்குப் பிறகு மாறியின் மதிப்பு மாறாது. வேறு வார்த்தைகளில் கூறுவதானால், தொகுத்தல் பிழை இல்லாமல் அத்தகைய மாறிக்கு இறுதி முக்கிய சொல்லைப் பயன்படுத்தலாம். திறம்பட இறுதி மாறிகள் உள்ளூர் வகுப்புகள் (உள்ளூர் உள் வகுப்புகள்), அநாமதேய வகுப்புகள் (அநாமதேய உள் வகுப்புகள்) மற்றும் ஸ்ட்ரீம்கள் (ஸ்ட்ரீம் ஏபிஐ) ஆகியவற்றிற்குள் பயன்படுத்தப்படலாம்.
public void someMethod() {
// In the example below, both a and b are effectively final, since they are assigned values only once:
int a = 1;
int b;
if (a == 2) b = 3;
else b = 4;
// c is NOT effectively final since its value changes
int c = 10;
c++;
Stream.of(1, 2).forEach(s-> System.out.println(s + a)); // OK
Stream.of(1, 2).forEach(s-> System.out.println(s + c)); // Compilation error
}
இப்போது ஒரு சிறிய நேர்காணலைப் பார்ப்போம். எல்லாவற்றிற்கும் மேலாக, கோட்ஜிம் படிப்பை முடிப்பதன் குறிக்கோள் ஜாவா டெவலப்பராக மாறுவது மற்றும் சுவாரஸ்யமான மற்றும் நல்ல ஊதியம் பெறும் வேலையைக் கண்டுபிடிப்பதாகும். எனவே, ஆரம்பிக்கலாம்.
-
இறுதியாக அறிவிக்கப்பட்ட வரிசையைப் பற்றி நாம் என்ன சொல்ல முடியும்?
-
சரம் வகுப்பு மாறாதது என்பதை நாங்கள் அறிவோம்: வகுப்பு இறுதியானது என அறிவிக்கப்பட்டது. ஒரு சரம் மதிப்பு ஒரு char array இல் சேமிக்கப்படுகிறது, அது முக்கிய வார்த்தை இறுதியுடன் குறிக்கப்பட்டுள்ளது.
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
சரம் பொருளின் மதிப்பை (பொருளின் குறிப்பை மாற்றாமல்) மாற்ற முடியுமா? இவை உண்மையான நேர்காணல் கேள்விகள். பல வேட்பாளர்கள் அவர்களுக்கு சரியாக பதிலளிக்கவில்லை என்பதை நடைமுறை காட்டுகிறது. இறுதி முக்கிய சொல் எவ்வாறு பயன்படுத்தப்படுகிறது என்பதைப் புரிந்துகொள்வது, குறிப்பாக குறிப்பு மாறிகளுக்கு, மிகவும் முக்கியமானது. நீங்கள் இதைப் பற்றி சிந்திக்கும்போது, நான் CodeGym குழுவிடம் ஒரு சிறிய கோரிக்கையை வைக்கிறேன். தயவு செய்து டெக்ஸ்ட் எடிட்டருக்கு ஒரு தொகுதியைச் சேர்க்கும் திறனை வழங்கவும், அதன் உள்ளடக்கத்தை நீங்கள் கிளிக் செய்யும் போது காட்டப்படும்/மறைக்கப்படும். பதில்கள்:
-
ஒரு வரிசை என்பது ஒரு பொருள், எனவே இறுதி முக்கிய வார்த்தையின் அர்த்தம் வரிசைக்கு ஒரு குறிப்பு ஒதுக்கப்பட்டவுடன், குறிப்பை மாற்ற முடியாது. நீங்கள் பொருளின் நிலையை மாற்றலாம் என்று கூறினார்.
final int[] array = {1, 2, 3, 4, 5}; array[0] = 9; // OK, because we're changing the contents of the array: {9, 2, 3, 4, 5} array = new int[5]; // Compilation error
-
ஆம் நம்மால் முடியும். முக்கிய விஷயம் என்னவென்றால், பொருள்களுடன் பயன்படுத்தும்போது முட்கள் நிறைந்த இறுதி முக்கிய சொல் என்ன என்பதைப் புரிந்துகொள்வது. மதிப்புகளை மாற்ற பிரதிபலிப்பு API ஐப் பயன்படுத்தலாம்.
import java.lang.reflect.Field;
class B {
public static void main(String[] args) throws Exception {
String value = "Old value";
System.out.println(value);
// Get the String class's value field
Field field = value.getClass().getDeclaredField("value");
// Make it mutable
field.setAccessible(true);
// Set a new value
field.set(value, "CodeGym".toCharArray());
System.out.println(value);
/* Output:
* Old value
* CodeGym
*/
}
}
ஒரு பழமையான வகையின் இறுதி மாறியை இந்த வழியில் மாற்ற முயற்சித்திருந்தால், எதுவும் நடந்திருக்காது என்பதை நினைவில் கொள்க. உங்களை நீங்களே சமாதானப்படுத்திக் கொள்ளுமாறு நான் பரிந்துரைக்கிறேன்: ஒரு ஜாவா வகுப்பை உருவாக்கவும், எடுத்துக்காட்டாக, ஒரு இறுதி எண்ணாக புலம் மற்றும் பிரதிபலிப்பு API ஐப் பயன்படுத்தி அதன் மதிப்பை மாற்ற முயற்சிக்கவும். அனைவருக்கும் நல்வாழ்த்துக்கள்!
GO TO FULL VERSION