关于反射机制的一些示例
来源:互联网 发布:河北秦淮数据有限公司 编辑:程序博客网 时间:2024/05/17 22:02
通过一个对象获得一个完整的包名和类名
package com.ntqingniao.reflect;public class Client2 { public static void main(String[] args) { Demo demo = new Demo(); // 根据对象获取完整的包名和类名 System.out.println(demo.getClass().getName()); }}class Demo2 {}
实例化Class类对象
package com.ntqingniao.reflect;public class Client3 { public static void main(String[] args) throws ClassNotFoundException { // Class类是所有对象的元数据的类对象 Class<?> demo1 = null; Class<?> demo2 = null; Class<?> demo3 = null; demo1 = Class.forName("com.ntqingniao.reflect.Demo3"); demo2 = new Demo3().getClass(); demo3 = Demo3.class; System.out.println(demo1.getName()); System.out.println(demo2.getName()); System.out.println(demo3.getName()); }}class Demo3 {}
通过Class实例化其他类的对象
package com.ntqingniao.reflect;public class Client4 { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { Class<?> demo = null; // 通过类全名创建Class对象(类型的工厂) demo = Class.forName("com.ntqingniao.reflect.Person"); // 调用工厂的newInstance()方法创建对象 Person per = (Person)demo.newInstance(); per.setName("Tom"); System.out.println(per); }}class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [" + (name != null ? "name=" + name + ", " : "") + "age=" + age + "]"; } }
*如果把Person类中的无参构造函数取消,就会出现错误。
所以在编写使用Class实例化其他类对象的时候,一定要定义一个无参的构造器。*
通过Class调用类中的构造器
// 获取该类的所有构造器对象Constructor<?> cons[] = demo.getConstructors();// 通过构造器对象的newInstance(Object.. params)可变参数方法构建对象Person per1 = (Person)cons[0].newInstance();Person per2 = (Person)cons[1].newInstance("Tom", 20);System.out.println(per1);System.out.println(per2);
返回一个类实现的接口和继承的父类
// 获取类的所有接口和直接父类方法Class<?> inters[] = demo.getInterfaces();Class<?> supers = demo.getSuperclass();
获取类的全部属性
// 获取类的全部属性Field[] fields = demo.getDeclaredFields();for (int i = 0; i < fields.length; i++) { // 获取权限修饰符 int mo = fields[i].getModifiers(); String priv = Modifier.toString(mo); // 数据类型 Class<?> type = fields[i].getType(); // 属性变量名 String name = fields[i].getName(); System.out.println(priv + " " + type.getName() + " " + name );}
调用类的方法
Method method = demo.getMethod("getName");method.invoke(demo.newInstance());Person p = new Person();Method method2 = demo.getMethod("getName", String.class);method2.invoke(p, "Reflect");p.getName("Reflect");
阅读全文
0 0
- 关于反射机制的一些示例
- java的反射机制--示例
- 关于java反射机制的一些基本操作
- 关于反射的简单示例
- 关于Java的反射机制
- 关于Java的反射机制
- 关于反射的一些知识
- 关于反射的一些程序
- 关于反射的一些内容
- 关于反射的一些姿势
- 关于反射的一些日记
- 关于反射的一些理解
- JAVA 反射机制示例
- JAVA反射机制示例
- Java--反射机制示例
- Java 反射机制 示例
- 关于反射机制(反射机制的理解一)
- java 反射机制的一些应用
- 欢迎使用CSDN-markdown编辑器
- 正则
- 扩栈代码
- Servlet
- OutOfMemory模拟(二)
- 关于反射机制的一些示例
- hdu2063[过山车] 二分图匹配 匈牙利算法
- CEF完整嵌入DUI窗体(二) --在程序中初始化Cef
- Andioid_手动 滑动图片
- 购买装备(“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛
- 初识javaDate与字符串
- 利用ffmpeg将pcma和h264合成MP4
- 在Redis中使用Lua
- vb.net 教程 4-5 文件操作 File 2