几个java反射小例子(以String为例)
获取类的三种方法
1 2 3 4 5 6 7
| //反射机制获取类的三种方式 //通过类名获取 Class<?> class1 = Class.forName("java.lang.String"); //通过类的class属性获取 Class<?> class2 = String.class; //通过类对象获取 Class<?> class3 = new String().getClass();
|
实例化类对象,有参和无参构造函数
1 2 3 4 5 6
| //无参构造函数 Class<?> class4 = Class.forName("java.lang.String"); String instance1 = (String)class4.newInstance(); //有参构造函数(传入一个字符串) Constructor con = class4.getConstructor(String.class); String instance2 = (String)con.newInstance("lalala!");
|
对类属性操作
//获取类属性
Class<?> class5 = Class.forName("java.lang.String");
//获取所有属性
Field[] fs = class5.getFields();
//根据属性名获取指定的属性(可能会抛出java.lang.NoSuchFieldException)
Field field = class5.getDeclaredField("CASE_INSENSITIVE_ORDER");
//获取实例
String instance3 = (String)class5.newInstance();
//反射机制打破封装
field.setAccessible(true);
//赋值
field.set(instance3, null);