java反射机制,代码示例
2016-11-21 21:23
309 查看
反射,可以随便访问方法和类,可以访问到不对外公开的方法和类。
new Person方法是静态加载类,编译的时候加载类。
反射是动态加载类。运行的时候加载类
打印结果
new Person方法是静态加载类,编译的时候加载类。
反射是动态加载类。运行的时候加载类
package com; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; class Person{ private int age; private String name; public Person(){ System.out.println("Construct Person"); } public Person(int age){ System.out.println("Construct Person,age="+age); this.age = age; } public Person(String name){ System.out.println("Construct Person,name="+name); this.name = name; } public Person(int age,String name){ System.out.println("Construct Person,age="+age+",name="+name); this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void say(){ System.out.println("我在说:"+age+name); } } public class TestDemo3 { public static void main(String[] args) throws Exception { //情况1 System.out.println("===情况1==="); Class<?> personClass1 = Class.forName("com.Person"); Object obj = personClass1.newInstance();//实例化对象,和new作用一样 Person person1 = (Person) obj;//向下转型 System.out.println(person1); //情况2 System.out.println("===情况2==="); Constructor<?> cons[] = personClass1.getConstructors(); for(Constructor<?> temp : cons){ System.out.println(temp); } //情况3 System.out.println("===情况3==="); Constructor<?> con1 = personClass1.getConstructor(int.class,String.class); Object obj2 = con1.newInstance(3,"[情况]"); Person person2 = (Person)obj2;//向下转型 Method marr[] = personClass1.getMethods(); for(Method temp :marr){ System.out.println(temp.getName()); } //情况4 System.out.println("===情况4==="); Method method = personClass1.getMethod("setAge", int.class); method.invoke(obj, 99);//调用setAge Method getMethod = personClass1.getMethod("getAge"); System.out.println(getMethod.invoke(obj)); //情况5 System.out.println("===情况5==="); Field fieldarr[] = personClass1.getDeclaredFields(); for(Field temp : fieldarr){ System.out.println(temp.getName()); } //情况6 System.out.println("===情况6==="); Field nameField=personClass1.getDeclaredField("name"); nameField.setAccessible(true);//解除private的封装限制 nameField.set(obj,"名称哦哦"); System.out.println(nameField.get(obj));//打印结果:名称哦哦 } }
打印结果
===情况1=== Construct Person com.Person@15db9742 ===情况2=== public com.Person(int,java.lang.String) public com.Person(java.lang.String) public com.Person(int) public com.Person() ===情况3=== Construct Person,age=3,name=[情况] getName setName setAge getAge say wait wait wait equals toString hashCode getClass notify notifyAll ===情况4=== 99 ===情况5=== age name ===情况6=== 名称哦哦 ===
相关文章推荐
- 用C#编写一个进程外的COM组件示例代码讲解
- C++/STL实现判断平面内两条线段的位置关系代码示例
- Jacom 操作Office Word及Excel 代码示例
- 位置信息类API调用的代码示例合集:中国省市区查询、经纬度地址转换、POI检索等
- 《OpenGL ES 2.0 Programming Guide》第12章“Framebuffer Objects”示例代码【C语言版】
- 转载:Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- 事件示例代码
- 单例模式代码示例
- 【送给新手】重复代码解决示例二
- snmp++ snmpget代码示例
- 用JS实现3D球状标签云示例代码
- java包导入示例代码
- php中使用DOM类读取XML文件的示例代码
- 使用DIV弹出框的代码示例,备忘。
- scala 代码示例
- Django Admin实现三级联动的示例代码(省市区)
- (三)ComponentOne之WebChart(折线图)(示例代码下载)
- js 使FORM表单的所有元素不可编辑的示例代码
- python 中if else 语句的作用及示例代码
- channel代码示例