如何在java中利用类加载器加载指定的类文件

  介绍

这篇文章给大家介绍如何在java中利用类加载器加载指定的类文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

首先定义一个类,比如MyTest,并且将其编译成类文件,然后放到一个指定的文件夹下面,其中文件夹的最后几层就是它的包名,这里我将这个编译好的类放到:/用户/艾伦/桌面/cn/lijie/MyTest。类

如何在java中利用类加载器加载指定的类文件

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中利用类加载器加载指定的类文件

<强>补充:java远程加载类文件

1。在赢得上创建java文件并编译

如何在java中利用类加载器加载指定的类文件

2。上传到远程服务器

如何在java中利用类加载器加载指定的类文件

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中利用类加载器加载指定的类文件