动态创建JAVA类 据提供的ClassName, field name, method name and parameters' name 使用java.lang.reflect包,创建真正的“动态”类和实例。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参照这里 Java反射 比较详细http://hejianjie.javaeye.com/blog/136205 不明白楼主这是散分贴,还是求代码?1.package com.zjx.reflect.third; 2. 3.import java.lang.reflect.Method; 4. 5./** 6. * 用反射机制调用对象的方法 7. * @author Xian-JZ 8. * 9. */ 10.public class InvokeTester { 11. public int add(int param1, int param2) { 12. return param1 + param2; 13. } 14. 15. public String echo(String msg) { 16. return "echo: " + msg; 17. } 18. 19. public static void main(String[] args) throws Exception { 20. Class<?> classType = InvokeTester.class; 21. Object invokeTester = classType.newInstance(); 22. 23. // Object invokeTester = classType.getConstructor(new 24. // Class[]{}).newInstance(new Object[]{}); 25. 26. 27. //获取InvokeTester类的add()方法 28. Method addMethod = classType.getMethod("add", new Class[]{int.class, int.class}); 29. //调用invokeTester对象上的add()方法 30. Object result = addMethod.invoke(invokeTester, new Object[]{new Integer(100), new Integer(200)}); 31. System.out.println((Integer) result); 32. 33. 34. //获取InvokeTester类的echo()方法 35. Method echoMethod = classType.getMethod("echo", new Class[]{String.class}); 36. //调用invokeTester对象的echo()方法 37. result = echoMethod.invoke(invokeTester, new Object[]{"Hello"}); 38. System.out.println((String) result); 39. } 40./** 41. * Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象, 42. * 如果参数为基本类型数据,必须转换为相应的包装类型的对象。 43. * invoke()方法的返回值总是对象,如果实际被调用的方法的返回类型是基本类型数据, 44. * 那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回。 45. */ 46.} 反射不是动态创建类,是使用class文件 我的需求是,类本身不存在文件中,就是没有class文件。在执行代码的时候创建一个类。自己编译、 什么意思。。不明白LZ的意思。Reflect包做不到LZ要的功能吧?你说的那个动态创建JAVA我觉得应该是先根据给出的条件生成内容然后io流生成文件,最后用Runtime来编译。和反射没啥关系吧? 小弟!你的问题不好解决,首先要明白弄懂了你的问题就可以写一门语言了!其次退一万步说可以的话,也得要研究java源码,jvm,编译原理,深入java虚拟机等等东西。 生成.java 然后用tools jar包里的api编译生成.classhttp://mopishv0.blog.163.com/blog/static/54455932201010161162058/然后再用类加载器加载下面是加载jar的 原理相似http://mopishv0.blog.163.com/blog/static/5445593220101016112946307/ 用IO写XXX.java文件,写完后,调用系统的javac命令,这时已经有XXX.class文件出来了,再然后类加载反射,就是上面说的去做 我觉得这个问题没有你说的这么难,只是暂时我还没有找到合适的jar和资料。 ibatis错误求解 hibernate外键查询问题 JFreechart 折线图,如何变成平滑曲线 jsp如何调用JSTL中的变量? TMOCAT连接池问题? 求解惑 恳切请教:在rose中如何表示用例的扩展点阿??? 请那位大哥能帮忙 如何把一段XML发送出去,然后又能接受服务器回的XML ejb中使用ArrayList,结果能add,却不能remove 关于SSH的基础问题.执行HQL语句的选择. 求教高手
http://hejianjie.javaeye.com/blog/136205
1.package com.zjx.reflect.third;
2.
3.import java.lang.reflect.Method;
4.
5./**
6. * 用反射机制调用对象的方法
7. * @author Xian-JZ
8. *
9. */
10.public class InvokeTester {
11. public int add(int param1, int param2) {
12. return param1 + param2;
13. }
14.
15. public String echo(String msg) {
16. return "echo: " + msg;
17. }
18.
19. public static void main(String[] args) throws Exception {
20. Class<?> classType = InvokeTester.class;
21. Object invokeTester = classType.newInstance();
22.
23. // Object invokeTester = classType.getConstructor(new
24. // Class[]{}).newInstance(new Object[]{});
25.
26.
27. //获取InvokeTester类的add()方法
28. Method addMethod = classType.getMethod("add", new Class[]{int.class, int.class});
29. //调用invokeTester对象上的add()方法
30. Object result = addMethod.invoke(invokeTester, new Object[]{new Integer(100), new Integer(200)});
31. System.out.println((Integer) result);
32.
33.
34. //获取InvokeTester类的echo()方法
35. Method echoMethod = classType.getMethod("echo", new Class[]{String.class});
36. //调用invokeTester对象的echo()方法
37. result = echoMethod.invoke(invokeTester, new Object[]{"Hello"});
38. System.out.println((String) result);
39. }
40./**
41. * Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,
42. * 如果参数为基本类型数据,必须转换为相应的包装类型的对象。
43. * invoke()方法的返回值总是对象,如果实际被调用的方法的返回类型是基本类型数据,
44. * 那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回。
45. */
46.}
不明白LZ的意思。
Reflect包做不到LZ要的功能吧?
你说的那个动态创建JAVA
我觉得应该是先根据给出的条件生成内容
然后io流生成文件,最后用Runtime来编译。
和反射没啥关系吧?
http://mopishv0.blog.163.com/blog/static/54455932201010161162058/
然后再用类加载器加载
下面是加载jar的 原理相似
http://mopishv0.blog.163.com/blog/static/5445593220101016112946307/