java动态编译
2016-09-15 15:55
169 查看
1.什么叫反射?
:程序运行期间,动态的获取类的基本信息。比如:创建对象,调用类的方法,获得类的基本结构。这样给程序设计提供了很大的灵活性,
。反射功能很强大。
java反射能提供很大
JAVA6.0引入了动态编译机制。
动态编译的应用场景:
可以做一个浏览器端编写java代码,上传服务器编译和运行的在线评测系统,需要进行安全检查。
服务器动态加载某些类文件进行编译
[java] view plain copy
<pre name="code" class="java"> Runtime run = Runtime.getRuntime();
Process process = run.exec("java -cp E:/workspace/images TestJava");
URL[] urls = new URL[] { new URL("file:/" + "E:/workspace/images/") };
URLClassLoader loader = new URLClassLoader(urls);
// 通过反射调用此类
Class clazz = loader.loadClass("TestJava");
Method m = clazz.getMethod("main", String[].class);
// m.invoke(null,new String[]{"aa","bb"});
// 由于可变参数是jdk5.0之后才有,上面代码会编译成m
:程序运行期间,动态的获取类的基本信息。比如:创建对象,调用类的方法,获得类的基本结构。这样给程序设计提供了很大的灵活性,
它可以解决很多死的东西。它可以根据不同的类/对象生成不同的信息。比如hibernate生成sql语句时,因为不知道要客户要执行什么具体的查询。所以就可以根据类信息,反射生成相应的sql语句。很灵活,解决死的东西。我个人总结就是,根据动态需求,生成动态的响应。
。反射功能很强大。
java反射能提供很大
反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中 它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编 译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如 这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能 的更新,而采用反射机制的话,它就可以不用卸载,只需要在运行时才动态的创建和编译,就可以实现该功 能。 它的缺点是对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它 满足我们的要求。这类操作总是慢于只直接执行相同的操作。 ,java反射机制是一个很好用的东西,用它可以解决很多死的东西,因为反射机制的灵活行很大,有了他,我们就不要花太多的时间来写操做数据库的代码了,而是方法更多的时间在项目的逻辑功能上,这个可以很大的减少开发时间,而且代码的可读性好。先在的很多开源框架都是才用的反射机制,它只要配置文件,然后按规则来调用他的方法就可以了。
JAVA6.0引入了动态编译机制。
动态编译的应用场景:
可以做一个浏览器端编写java代码,上传服务器编译和运行的在线评测系统,需要进行安全检查。
服务器动态加载某些类文件进行编译
三、动态运行编译好的类
1.通过Runtime.getRuntime()运行启动新的进程运行
例如:[java] view plain copy
<pre name="code" class="java"> Runtime run = Runtime.getRuntime();
Process process = run.exec("java -cp E:/workspace/images TestJava");
2.通过反射运行编译好的类
try {URL[] urls = new URL[] { new URL("file:/" + "E:/workspace/images/") };
URLClassLoader loader = new URLClassLoader(urls);
// 通过反射调用此类
Class clazz = loader.loadClass("TestJava");
Method m = clazz.getMethod("main", String[].class);
// m.invoke(null,new String[]{"aa","bb"});
// 由于可变参数是jdk5.0之后才有,上面代码会编译成m
相关文章推荐
- 动态编译java程序实例
- 动态编译JAVA程序
- java 动态编译.java文件,然后动态加载运行
- java动态编译运行代码
- 动态编译JAVA程序
- 在java中利用动态编译实现eval
- 基于JAVA动态编译的高性能对象序列化技术
- 利用javax.tools动态编译执行java代码
- 动态编译Java并通过反射执行方法
- 解决动态编译的时候带bom头的java不编译问题
- 动态编译JAVA程序
- JAVA动态编译简介
- 动态编译JAVA程序(com.sun.tool.javac)
- Java动态编译一个简单的例子(我转载的,但是经过修定,可以在Eclipse下运行)
- java生成java文件并动态编译
- 动态编译Java程序
- 动态编译、运行JAVA程序
- java源码动态生成编译,以及方法调用
- 动态编译JAVA程序
- Java的动态编译