zoukankan      html  css  js  c++  java
  • 使用反射修改final属性

    情型1:static final属性,无法修改其值。

    package m5.d7;  
      
    import java.lang.reflect.Field;  
      
    public class FieldTest {  
        public static void main(String[] args) {  
            try {  
                A a = new A();  
      
                Field field = a.getClass().getDeclaredField("a");  
      
                field.setAccessible(true);  
      
                field.set(a, 2);  
      
                System.out.println(field.get(a));  
            } catch (SecurityException e) {  
                e.printStackTrace();  
            } catch (NoSuchFieldException e) {  
                e.printStackTrace();  
            } catch (IllegalArgumentException e) {  
                e.printStackTrace();  
            } catch (IllegalAccessException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
      
    class A {  
        private static final int a = 1;  
    }  
    

    运行

    java.lang.IllegalAccessException: Can not set static final int field m5.d7.A.a to java.lang.Integer  
        at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(Unknown Source)  
        at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(Unknown Source)  
        at sun.reflect.UnsafeQualifiedStaticIntegerFieldAccessorImpl.set(Unknown Source)  
        at java.lang.reflect.Field.set(Unknown Source)  
        at m5.d7.FieldTest.main(FieldTest.java:16)  
    

    情型2:final属性,可以修改其值。

    package m5.d7;  
      
    import java.lang.reflect.Field;  
      
    public class FieldTest {  
        public static void main(String[] args) {  
            try {  
                A a = new A();  
      
                Field field = a.getClass().getDeclaredField("a");  
      
                field.setAccessible(true);  
      
                field.set(a, 2);  
      
                System.out.println(field.get(a));  
            } catch (SecurityException e) {  
                e.printStackTrace();  
            } catch (NoSuchFieldException e) {  
                e.printStackTrace();  
            } catch (IllegalArgumentException e) {  
                e.printStackTrace();  
            } catch (IllegalAccessException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
      
    class A {  
        private final int a = 1;  
    }  
    

    运行

    2  
    

      

      

      

  • 相关阅读:
    Web中的图标(Sprites雪碧图、Icon Font字体图标)
    那些不推荐使用的html标签
    Vim学习
    web前端性能优化建议
    开发基础
    数据库事务
    java集合详解
    java基础总结大纲(一)
    java设计模式之单例模式(饿汉)
    java设计模式之单例模式(内部静态类)
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/6078718.html
Copyright © 2011-2022 走看看