11

原创 2013年12月05日 23:39:56
package com.ailk;

import java.lang.reflect.*;
import java.util.ArrayList;
import java.util.List;
import com.ailk.dynamic.Demo;
public class DemoMain {
    static public void main( String args[] ) throws Exception {
        String progClass ="com.ailk.dynamic.Demo";
        // 创建CompilingClassLoader
        Class c = Class.forName(progClass, true, new CompilingClassLoader());
        //DemoInterface i=(DemoInterface)c.newInstance();

        //cl1和cl2是两个不同的ClassLoader
        ClassLoader cl1=c.getClassLoader();
        ClassLoader cl2=Demo.class.getClassLoader();
        ClassLoader cl3=DemoInterface.class.getClassLoader();

        int ii=0;
        List<DemoInterface> objList=new ArrayList();
        while(true){
            ii++;
            CompilingClassLoader ccl = new CompilingClassLoader();
            // 通过CCL加载主函数类。
            Class clas = ccl.loadClass( progClass,true);
            try{
                Constructor c1=c.getDeclaredConstructor(new Class[]{String.class}); 
                c1.setAccessible(true);   
                DemoInterface a1=(DemoInterface)c1.newInstance(new Object[]{"Demo"});
            }catch(NoSuchMethodException e){
                System.out.println("构造函数不存在");
                e.printStackTrace();
            }

            DemoInterface instance=null;
            try{
                Constructor c0=clas.getDeclaredConstructor();
                c0.setAccessible(true);   
                instance=(DemoInterface)c0.newInstance();  
            }catch(NoSuchMethodException e){
                System.out.println("构造函数不存在");
                e.printStackTrace();
            }

            ccl=null;//这里讲主动释放cc1
            //DemoInterface instance=(DemoInterface)clas.newInstance();
            if (instance!=null)
            {
                objList.add(instance);
                instance.print("demo");
                // 利用反射调用它的函数和传递参数。
                // 产生一个代表主函数的参数类型的类对象。
                Class mainArgType[] = { String.class };
                //在类中找函数。
                Method method = clas.getMethod( "print", mainArgType );
                Object[] argsArray={"Demo"};
                //调用方法。
                method.invoke(instance, argsArray );                

            }
            if (ii>20)
            {
                ii=0;
                objList.clear();
            }
            Thread.sleep(500);
            //强制gc,只有objList清空后 CompilingClassLoader的实例才会释放。
            //因为只有由CompilingClassLoader载入的class的实例全部释放后,CompilingClassLoader才能被释放
            System.gc();

        }
    }
}

SQLyog11绿色中文版,带注册码

  • 2017年11月27日 14:24
  • 10.89MB
  • 下载

11.原型链的一个重要应用:圣杯模式

一些应该掌握的知识点 JS中并没有真正意义上的继承,所谓的继承只是利用了原型和原型链的方法,同时在使用这些方法时会产生一些额外的且不希望产生的影响——创建作用域 普通继承方式的缺陷:传统的继承方式(如...

IOS11.0 SDK xcode8调试IOS11

  • 2017年11月22日 13:12
  • 5.61MB
  • 下载

ios 真机调试包11.0&amp;11;.1

  • 2017年11月22日 11:50
  • 11.76MB
  • 下载

11、新手入手树莓派教程--Qt中使用wiringPi来驱动RGB灯、使用opencv打开摄像头

1、Qt中使用opencv打开摄像头 具体环境的配置可以参考博主之前的博客。 代码其实很简单。 代码如下: VideoCapture cap(-1); while(true) { Mat fr...

基于c++11的100行实现简单线程池

背景刚粗略看完一遍c++ primer第五版,一直在找一些c++小项目练手,实验楼里面有很多项目,但是会员太贵了,学生党就只能google+github自行搜索完成项目了。注:本文纯提供自己的理解,代...

oracle 11g jdbc驱动

  • 2017年11月20日 11:09
  • 4.55MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:11
举报原因:
原因补充:

(最多只允许输入30个字)