java 调用API 编译生成class文件,并加载产生对象
来源:互联网 发布:学校装网络信号屏蔽器 编辑:程序博客网 时间:2024/06/07 02:39
比如我src下面有个Student.java文件,通过下面代码可编译成class文件,通过URLClassLoader 得到 Student对象 try { //类文件路径(默认生成的class文件和java源文件在同一个目录) String classpath=System.getProperty("user.dir")+"/src/Student.java"; //需要编译的java文件的集合(可同时编译多个java文件)File[] files1={new File(classpath)}; //获得系统的java编译器 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); //获得文件管理器 StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);//文件迭代器 Iterable compilationUnits1 =fileManager.getJavaFileObjectsFromFiles( Arrays.asList(files1)); //编译文件 (call方法表示调用编译) compiler.getTask(null, fileManager, null, null, null, compilationUnits1).call(); //关闭文件管理器。 fileManager.close();} catch (IOException e) {e.printStackTrace();} //加载类到内存,并产生实例try { //class类存放的目录 String classdir="file:/"+System.getProperty("user.dir")+"/src"; //类路径集合 URL[] urls={new URL(classdir)}; //加载class类 URLClassLoader load=new URLClassLoader(urls); //加载Student类 Class clazz=load.loadClass("Student"); Sudent stu=(Sudent)clazz.newInstance(); //对象拿到了,后面就随你怎么做了。 } catch (Exception e) {e.printStackTrace(); }