介绍
这篇文章给大家介绍如何在java中利用类加载器加载指定的类文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
首先定义一个类,比如MyTest,并且将其编译成类文件,然后放到一个指定的文件夹下面,其中文件夹的最后几层就是它的包名,这里我将这个编译好的类放到:/用户/艾伦/桌面/cn/lijie/MyTest。类
package cn.lijie; public class  MyTest { public 才能;void 显示(),{ ,,,System.out.println (“show 考验!“); ,,} }
自定义的类加载器:
public class MyClassLoader extends ClassLoader { @Override才能 protected 才能;Class< ?祝辞,findClass (String 名称),{ ,,,String myPath =,“文件:///用户/艾伦/桌面/?+,name.replace(“管理者”,“/?,+,“.class"; ,,,System.out.println (myPath); ,,,byte [], cLassBytes =,空; ,,,Path Path =,空; ,,,try { ,,,,,path =, Paths.get (new URI (myPath)); ,,,,,cLassBytes =, Files.readAllBytes(路径); ,,,},catch (IOException |, URISyntaxException e), { ,,,,,e.printStackTrace (); ,,,} ,,,Class clazz =, defineClass(名字,,cLassBytes,, 0,, cLassBytes.length); ,,,return clazz; ,,} }
测试的主函数:
public class MainClass { public 才能;static  void main (String [], args), throws ClassNotFoundException { ,,,MyClassLoader loader =, new MyClassLoader (); ,,,Class<?祝辞,aClass =, loader.findClass (“cn.lijie.MyTest"); ,,,try { ,,,,,Object obj =, aClass.newInstance (); ,,,,,Method Method =, aClass.getMethod (“show"); ,,,,,method.invoke (obj); ,,,},catch (Exception e), { ,,,,,e.printStackTrace (); ,,,} ,,} }
执行主函数,调用外部类的节目方法:
<强>补充:java远程加载类文件强>
1。在赢得上创建java文件并编译
2。上传到远程服务器
3。编写java代码
<强>准备:强>
引入jar包ganymed - ssh3 - 262. - jar
1。加载外部类要定义自己的类加载器
2。使用内存流
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import ch.ethz.ssh3.Connection; import ch.ethz.ssh3.SFTPInputStream; import ch.ethz.ssh3.SFTPv3Client; public class  Fs { ,public static  void main (String [], args), throws Exception { ,OwnClassLoader ocl =, new OwnClassLoader (); ,String ip、用户密码;=,ip “120.34.168.80"//自己的远程ip=,user “root"//用户名=,password “123456“//密码 ,ocl.login (ip,用户,密码); ,Object obj =, ocl.loadeOthClass (“/opt/4/tt.class");//类文件路径 ,, ,System.out.println (obj); ,Class c =, obj.getClass (); ,Field f =, c.getDeclaredField (“age"); ,f.setAccessible(真正的); ,System.out.println(“年龄:“+ f.get (obj)); ,} }//自定义类加载器 class OwnClassLoader  extends 类加载器{ ,private Connection conn =,空; ,//初始化链接 ,public Connection 登录(String ip, String 用户,String 密码){ ,Connection conn =,空; ,try {//才能也可以new 连接(ip,端口)创建对象,默认22 时间=conn 才能;new 连接(ip);//连才能接远程服务 conn.connect才能();//使才能用用户名和密码登录 conn.authenticateWithPassword才能(用户,密码); 康涅狄格州=this.conn 才能;; ,,,,return 康涅狄格州; ,}catch (IOException e), {,, e.printStackTrace才能(); ,,} return 才能;零; ,} ,//返回远程实例 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null如何在java中利用类加载器加载指定的类文件