Java中的反射机制
来源:互联网 发布:淘宝客收入排行榜 编辑:程序博客网 时间:2024/05/17 05:53
1.反射:就是加载类,并解剖出类的各个组成部分(构造函数:实例化和初始化对象;方法:完成特定的功能;字段:封装数据),解剖出的成员分别使用Constructor、Method、Field对象表示。
//加载1
Class clazz1=Class.forName("/Myday01/src/cn/itcast/reflect/Person");
//加载2
Class clazz2=new Person().getClass();
//加载3
Class clazz3=Person.class;
2.反射构造函数:
反射public构造函数
// 解剖构造函数:public Person(String name)
@Test
public void test2() throws ClassNotFoundException, NoSuchMethodException,
SecurityException, InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
Class clazz = Class.forName("cn.itcast.reflect.Person");
Constructor c = clazz.getConstructor(String.class);
Person p = (Person) c.newInstance("xiaoming");
System.out.println(p.name);
}
反射私有的构造函数
//解剖构造函数:private Person(List list)
@Test
public void test3() throws Exception{
Class clazz= Class.forName("cn.itcast.reflect.Person");
Constructor c=clazz.getDeclaredConstructor(List.class);
c.setAccessible(true);
Person p = (Person) c.newInstance(new ArrayList());
System.out.println(p.name);
}
3.反射方法:
//反射类的方法 public void aa()
@Test
public void test1() throws Exception{
Person p = new Person();//指明是调用那个对象的方法
Class clazz=Class.forName("cn.itcast.reflect.Person");
Method method=clazz.getMethod("aa", null);
method.invoke(p, null);
}
//反射类的方法public static void main(String[] args)
@Test
public void test2() throws Exception{
//Person p = new Person();//静态方法的调用不需要对象
Class clazz=Class.forName("cn.itcast.reflect.Person");
Method method=clazz.getMethod("main", String[].class);
//method.invoke(null, new String[]{"aa","123"});//不行,因为在调用main方法时候,看到数组会对其中的变量进行拆分,和原来的String[]不一致,导致出现“Wrong number of arguments”
//解决方案1:
method.invoke(null, new Object[]{new String[]{"aa","123"}});
//解决方案2:
method.invoke(null, (Object)new String[]{"aa","123"});
}
4.反射字段
//发射字段:public String name = "aaa";
@Test
public void test1() throws Exception{
Person p = new Person();
Class clazz=Class.forName("cn.itcast.reflect.Person");
Field f = clazz.getField("name");
String name= (String)f.get(p);
System.out.println(name);
}
- Java中的反射机制
- JAVA中的反射机制
- Java中的反射机制
- java中的反射机制
- JAVA中的反射机制
- Java中的反射机制
- Java中的反射机制
- java中的反射机制
- java中的反射机制
- Java中的反射机制
- java中的反射机制
- JAVA中的反射机制
- java中的反射机制
- Java中的反射机制
- java中的反射机制
- Java中的反射机制
- Java中的反射机制
- java中的反射机制
- (单片机原理与应用)计算器的设计和实现(综合)
- Qt下绘图
- Balanced Binary Tree
- 最长无重复字符子串
- 交换基础 VLAN TRUNK VTP
- Java中的反射机制
- socket编程的select模型
- LeetCode-Search in Rotated Sorted Array(在反转数组中的关键字)
- 贪吃蛇 HTML5 Canvas代码
- STL algorithm find() demo
- 2.1.3 外部中断
- CCTexture2D(纹理图片)和 CCTextureCache(纹理缓存)
- 关于setTimeout进行参数传递时定时任务失效的解决办法
- Android 第一篇 环境变量配置