Java反射机制
来源:互联网 发布:珐琅铸铁锅保养知乎 编辑:程序博客网 时间:2024/05/29 09:48
一、获取类的属性,构造函数
package com.whzl.reflect;
import java.lang.reflect.*;
public class ReflectHello {
/**
* @param args
*/
public static void main(String[] args) {
StringBuffer sb;
try {
//首先获取Class
Class cls = Class.forName("com.whzl.Hello");
//获取类的属性(Field)
Field fs[] = cls.getFields();
System.out.println("----------Field------------");
for(Field f:fs)
{
sb = new StringBuffer();
//默认取得的修饰符为整数,由几个修饰符叠加。需要用Modifier的toString转化一下
//String FieldM = "Field修饰符:" + Modifier.toString(f.getModifiers());
sb.append(Modifier.toString(f.getModifiers()));
//获取变量类型
//String FieldT = "Field类型:" + f.getType();
sb.append(" " + f.getType().getName());
//获取变量名称
//String FieldN = "Field名称:" + f.getName()
sb.append(" " + f.getName());
//f.get(),返回指定对象上此Field的值,因此需要传入对象。需要传入对象
//String FieldV = "Field值:" + f.get(cls.newInstance());
sb.append(" = " + f.get(cls.newInstance()));
System.out.println(sb.toString());
Object object = cls.newInstance();
System.out.println("修改前:" + f.get(object));
f.set(object, "修改了!嘎嘎!");
System.out.println("修改后:" + f.get(object));
sb = null;
}
System.out.println("---------Constructor--------");
Constructor cs[] = cls.getConstructors();
for(Constructor c: cs)
{
//首先获取修饰符
System.out.print(Modifier.toString(c.getModifiers()));
//构造方法名称
System.out.print(" " + c.getName());
//获取参数类
Class ts [] = c.getParameterTypes();
for(Class t:ts)
{
System.out.print(" " + t.getName());
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、调用构造函数
package com.whzl.reflect;
import java.lang.reflect.Constructor;
import com.whzl.Hello;
public class CallHelloConstructor {
/**
* @param args
*/
public static void main(String[] args) {
try {
//获得类
Class cls = Class.forName("com.whzl.Hello");
//构造函数是根据参数类型去寻找的
Class parmsType [] = new Class[3];
parmsType[0] = String.class;
parmsType[1] = String.class;
parmsType[2] = Integer.TYPE;
Constructor con = cls.getConstructor(parmsType);
//设置参数
Object obj[] = new Object[3];
obj[0] = "风影";
obj[1] = "程序员";
obj[2] = 25;
//实例化
Hello hello = (Hello)con.newInstance(obj);
//调用无参构造方法
cls.getConstructor(null).newInstance(null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
三、调用方法
package com.whzl.reflect;
import java.lang.reflect.Method;
public class CallHelloMethod {
/**
* @param args
*/
public static void main(String[] args) {
try
{
//获得类
Class cls = Class.forName("com.whzl.Hello");
//获取所有的方法
Method [] ms = cls.getMethods();
for(Method m:ms)
{
System.out.print(m.getName());
System.out.print(" " + m.getReturnType().getName());
Class ts [] = m.getParameterTypes();
for(Class t:ts)
{
System.out.print(" " + t.getName());
}
System.out.println();
}
//我们这里调用sayHelloToSb,通过方法名和参数类型获取方法,多参数可以使用数组
Method m = cls.getMethod("sayHelloToSb", String.class);
//设置参数
//实例化对象
System.out.println("------------------------------");
Object obj = cls.newInstance();
System.out.println("------------------------------");
//调用方法,并设置参数的值,多参数可以使用数组
Object result = m.invoke(obj, "Jay Chou");
System.out.println(result);
}
catch(Exception e)
{
}
}
}
- 【反射】JAVA反射机制
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- java的反射机制
- Java的反射机制
- java反射机制详解!
- Java反射机制
- Java的反射机制
- java 反射机制--侯捷
- java反射机制
- java反射机制
- [候捷]Java反射机制
- java 反射机制
- java 反射机制初探
- 关于Java反射机制
- java反射机制
- U盘安装linux系统【RHEL 6.3 server】
- ASP.NET路由系统实现原理:HttpHandler的动态映射
- ubuntu解压命令全览
- C++类模版详解(二)
- 遍地是槽点 苹果iPhone5国行深度体验吐槽
- Java反射机制
- Win32基于事件驱动的消息机制
- Java中的集合collection以及与C++的比较
- 影响Java EE性能的十大问题
- 个性化你的git log
- Andriod JSON请求实现过程
- 我们在囧途之技术骨干篇
- 传参方法:sharedApplication, NSUserDefaults, protocol 和 delegate(实例)
- c++ map用法