कृपया नीचे दिए गए कोड का संदर्भ लें। जब मैं कोड चलाता हूं, तो मैं अंतिम गैर स्थैतिक चर के मान को बदलने में सक्षम हूं। लेकिन अगर मैं अंतिम स्थैतिक चर के मान को बदलने की कोशिश करता हूं तो यह java.lang.IllegalAccessException
फेंकता है।अंतिम चर बदलना, स्थिर और गैर स्थैतिक अंतिम चर के बीच अंतर क्यों
मेरा प्रश्न यह है कि यह गैर स्थैतिक अंतिम परिवर्तनीय या इसके विपरीत के मामले में अपवाद नहीं फेंकता है। अंतर क्यों?
import java.lang.reflect.Field;
import java.util.Random;
public class FinalReflection {
final static int stmark = computeRandom();
final int inmark = computeRandom();
public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
FinalReflection obj = new FinalReflection();
System.out.println(FinalReflection.stmark);
System.out.println(obj.inmark);
Field staticFinalField = FinalReflection.class.getDeclaredField("stmark");
Field instanceFinalField = FinalReflection.class.getDeclaredField("inmark");
staticFinalField.setAccessible(true);
instanceFinalField.setAccessible(true);
instanceFinalField.set(obj, 100);
System.out.println(obj.inmark);
staticFinalField.set(FinalReflection.class, 101);
System.out.println(FinalReflection.stmark);
}
private static int computeRandom() {
return new Random().nextInt(5);
}
}
मैंने कोड पोस्ट किया है जो अपवाद नहीं देता है। लेकिन यह निश्चित रूप से एक हैक है। –