用dw制作做网站需要钱吗,asp做网站计数器,电子购物网站建设,上海网络公司网站目录
java反射机制
获取构造方法
获取属性
获取成员方法
使用反射机制将对象转为JSON形式 java反射机制 在运行状态中#xff0c;任意一个类#xff0c;都可以知道它的任意属性和方法#xff0c;任意一个对象#xff0c;都可以调用它的任意一个方法和属性。
获取反射…目录
java反射机制
获取构造方法
获取属性
获取成员方法
使用反射机制将对象转为JSON形式 java反射机制 在运行状态中任意一个类都可以知道它的任意属性和方法任意一个对象都可以调用它的任意一个方法和属性。
获取反射机制的三种方法 1. 对象获取 //通过对象获取Class对象User user new User();Class c1 user.getClass(); 2.类名获取 //通过类名获取Class对象Class c2 User.class;3. 类路径获取 //通过Class获取Class对象Class c3 Class.forName(com.yyds.javaReflect.model.User);获取构造方法 1.首先获取Class对象 //通过对象获取Class对象User user new User();Class c1 user.getClass(); 2.获取无参构造放方法创建对象 //获取无参构造放方法Constructor constructor1 c1.getConstructor();//创建对象Object user1 constructor1.newInstance(); 3.获取有参构造放方法创建对象
getConstructor参数为参数的Class对象 //获取有参构造放方法Constructor constructor2 c1.getConstructor(int.class,String.class);//创建对象Object user2 constructor2.newInstance(11,张三); 4. 获取私有无参构造方法
setAccessible(true)会取消java语言访问检查允许访问私有的成员 //获取Class对象Class c2 Car.class;// 获取私有无参构造方法Constructor constructor3 c2.getDeclaredConstructor();//setAccessible为true时取消java语言访问检查constructor3.setAccessible(true);//创建对象Object user3 constructor3.newInstance();
获取属性 1. 获取公共属性 Class c2 Car.class;//获取所有公共的属性Field[] fields c2.getFields();for(Field f:fields){//输出属性名称System.out.println(f.getName());}//输出公共属性的数目System.out.println(fields.length); 2.获取私有属性 getDeclaredField()和getDeclaredFields()获取私有属性 //获取指定属性名包含私有Field num c2.getDeclaredField(num);num.setAccessible(true);System.out.println(num.getName());
模拟mybatis反射 //模拟mybatis反射MapString,Object map new HashMap();map.put(num,12);map.put(colour,黑色);map.put(id,1);Object car c2.newInstance();//获取所有属性,包括私有Field[] fields2 c2.getDeclaredFields();System.out.println(fields.length);for(Field f:fields2){f.setAccessible(true);f.set(car,map.get(f.getName()));}System.out.println(car); 输出Car{num12, colour黑色, id1}
获取成员方法
与获取属性方法相似 1.获取公共成员方法 getMethod(String name, Class?... parameterTypes):返回一个 Method 对象返回类或接口的指定公共成员方法getMethods():返回Method 数组返回所有类或接口的指定公共成员方法。 2.获取私有成员方法 getDeclaredMethods()返回Method 数组类或接口的所有指定成员、方法包含私有getDeclaredMethod()方法返回指定所有方法包含私有有参时第一个参数为方法名第二个位方法参数的Class对象。 invoke(对象参数)调用方法
示例 Class c2 Car.class;Method[] methods c2.getDeclaredMethods();for (Method m : methods) {System.out.println(m.getName());}Object car c2.newInstance();Method m1 c2.getDeclaredMethod(setNum, int.class);m1.invoke(car, 12);System.out.println(car);
使用反射机制将对象转为JSON形式
public class ObjectToJson {public static String objectToJson(Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {// 获取所有属性Class c object.getClass();//获取所有属性Field[] fields c.getDeclaredFields();String res {;for (Field f:fields){//取消java语言访问检查允许访问私有的属性f.setAccessible(true);res res f.getName() : c.getDeclaredMethod(getGetMethod(f.getName())).invoke(object),;}res res.substring(0,res.length()-1)};return res;}//已知属性名返回get、set形式方法名public static String getGetMethod(String fname){return getfname.substring(0,1).toUpperCase()fname.substring(1);}public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {Car car new Car(101,red,1);User user new User(1,tom,12);String jcar objectToJson(car);String juser objectToJson(user);System.out.println(jcar);System.out.println(juser);}
}