亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在運行時刻從文件中調入Class

2019-11-18 13:25:33
字體:
來源:轉載
供稿:網友

  前言:
  
  了解java的類裝載器:
  
  
  
  Java 編程語言編譯器把源代碼代碼轉換成為一個假定機器(即虛擬機)上的 機器語言。虛擬機代碼保存在一個后綴為.class的類文件中。每個類文件保存這 個類的所有方法的虛擬機代碼。
  
  
  
  當運行時用一個解釋程序解釋這些類文件,把這些文件內的虛擬機指信信令翻 譯成本地的機器語言,分存內存,確定程序入口點。
  
  
  
  類裝載器功能類似與C中調入dll文件文法,在C中是調入dll文件分配內存,確定 程序入口點(分配入口指針),而在java中調入一個class文件,同樣是從本地或網絡 中調入文件,轉換為本地機器代碼,分配內存,確定程序入口點。
  
  
  
  當我們在使用中有時要使用一個新類,知道它的文件路徑和它的文件名字,我們 要把它調入系統并使用它或者說一個類文件已經被加密處理,類文件里面的內容 是我們加密后的密文,不能直接使用,只能是對文件內容解密后才能使用,就可 以用類庫加載器ClassLoader,把類文件當做數據流讀入到一個byte[]中,對 這個 byte[]進行解密處理后(沒加密當然就不用做這步了),再通過 byte[] 生成一個類,并加載到系統中。
  
  
  
  對于使用中有以下兩種方法:
  
  
  
  方法1
  
  使用接口類,新調用的class是對它的具體實現
  
  1) 寫一個接口類 newface.class
  
  public interface newface {
  
  public void out(String xx);
  
  public int outsize(String x1,String x2);
  
  }
  
  
  
  
  
  
  
  
  
  2) 寫接口文件實現 testfacea.class 并更名為 testfacea.file 或其它文件名全可以
  
  /*
  
  newface的實現
  
  */
  
  public class testfacea implements newface{
  
  public void out(String xx) {
  
  System.out.  
  }
  
  public int outsize(String x1,String x2) {
  
  return x1.length()+x2.length();;
  
  }
  
  }
  
  
  
  執行的的命令
  
  javac testfacea.java
  
  ren testfacea.class testfacea.file
  
  
  
  3) 在主程序中調入文件到byte[]中,可以在文件可以在本地,也可用網絡無論如何只要能將編譯后的文件內容的類代碼放到 byte[]當中就可以
  
  
  
  java.io.FileInputStream in=new java.io.FileInputStream(namefile);
  
  
  
  byte[] classbyte=new byte[maxsize];
  
  
  
  4) 轉換成一個Class并初始化
  
  
  
  return defineClass(classname,classbyte,0,readsize);
  
  
  
  5) 實現接口
  
  實際上就是對一個接口類用調入的文件實現,當然可以用不同的文件進行不同的實現也可以對一個文件進行加解密操作,
  
  //方法 1 的例子代碼,newface是本地接口類,newface.class本地已經存在 開始
  
  testc=cl.load("testfacea.file","testfacea");
  
  testo=testc.newInstance();
  
  ((newface)testo).out("方法1 第(1)種使用方法");
  
  System.out.println("outsize="+((newface)testo).outsize("1111","aaaa"));
  
  或
  
  
  
  testc=cl.load("testfacea.fisle","testfacea");
  
  testo=testc.newInstance();
  
  newface newface1=(newface)testo;
  
  newface1.out("方法1 第(2)種使用方法");
  
  System.out.println("outsize="+newface1.outsize("22222","bbbbb"));
  
  
  
  
  
  
  
  
  
  要注重的是對一個要調入的文件,一定要是一個已經存在的接口類的實現這個有點EJB中的調用的中遠程接口要在本地,而調入的文件就是EJBobject了這種方法的的好處是要調入的class中的方法是可以說是已知的,相對來講這種方法簡明易用以下是主程序的完整代碼
  
  //使用的主程序
  
  public class testnewface {
  
  public static void main(String[] args) throws java.lang.Exception
  
  {
  
  // 共用初使化參數,開始
  
  Class testc;
  
  Object testo;
  
  cloader cl=new cloader();
  
  // 共用初使化參數,結束
  
  
  
  //方法 1 的例子代碼,newface是本地接口類,newface.class本地已經存在 開始
  
  testc=cl.load("testfacea.file","testfacea");
  
  testo=testc.newInstance();
  
  
  
  ((newface)testo).out("方法1 第(1)種使用方法");
  
  System.out.println("outsize="+((newface)testo).outsize("1111","aaaa"));
  
  
  
  testc=cl.load("testfacea.fisle","testfacea");
  
  testo=testc.newInstance();
  
  newface newface1=(newface)testo;
  
  newface1.out("方法1 第(2)種使用方法");
  
  System.out.println("outsize="+newface1.outsize("22222","bbbbb"));
  
  //方法 1 的例子代碼,結束
  
  }
  
  }
  
  /*
  
  要想自己完成從一個 byte[] 轉換到一個Class 必須要 extends ClassLoader
  
  因為ClassLoader中的方法defineClass是 protected 要使用只有 extends ClassLoader
  
  */
  
  class cloader extends ClassLoader {
  
  static int maxsize=10000;
  
  public Class load(String namefile,String classname) throws java.lang.Exception
  
  {
  
  try {
  
  //進行判定這個class是否已經調入,已經有就直接返回,不然就調入
  
  Class ctmp=this.findLoadedClass(classname);
  
  System.out.println(ctmp.getName()+" is load");
  
  return ctmp;
  
  }
  
  catch (Exception e) {
  
  //System.out.println(e);
  
  }
  
  java.io.FileInputStream in=new java.io.FileInputStream(namefile);
  
  byte[] classbyte=new byte[maxsize];
  
  //實際應用時完全可以對一個文件進行加解密處理,只要保證使用defineClass時classbyte中
  
  //已經解密后的內容就可以
  
  int readsize;
  
  readsize=in.read(classbyte);
  
  // System.out.println("讀文件長:"+readsize);
  
  in.close();
  
  return defineClass(classname,classbyte,0,readsize);
  
  }
  
  }
  
  
  
  
  
  
  
  方法2
  
  不使用本地接口類的方法,這種方法class從文件定義成一個class和方法1是相同的,但要使用這個class就不同了,這種方法不需要接口類,
  
  1) 寫一個類 testfacea.class (本例中為了方便還是使用了testfacea,實際上已經可以不用 implements newface,即可以完全不用接口類)
  
  public class testfacea {
  
  public void out(String xx) {
  
  System.out.println(xx+" for testfacea ");
  
  }
  
  public int outsize(String x1,String x2) {
  
  return x1.length()+x2.length();;
  
  }
  
  }
  
  
  
  
  
  
  
  為明析起見還有一個測試用類型:一個列系統信息表的類
  
  public class listinfo {
  
  public static void main(String[] args) {
  
  //列系統信息表 begin
  
  String skey,sinfo;
  
  Object so;
  
  java.util.Enumeration hlistkey=System.getProperties().propertyNames();
  
  while (hlistkey.hasMoreElements())
  
  {
  
  skey=(String)hlistkey.nextElement();
  
  so=System.getProperty(skey);
  
  System.out.println("key="+skey+" info="+so);
  
  }
  
  //列系統信息表 end
  
  }
  
  }
  
  
  
  
  
  
  
  2) 生成 testfacea.class 更名為 testfacea.file 或其它文件名也可以
  
  
  
  生成 listinfo.class 更名為 listinfo.file 或其它文件名也可以
  
  
  
  執行的的命令
  
  
  
  javac testfacea.java
  
  
  
  ren testfacea.class testfacea.file
  
  
  
  javac listinfo.java
  
  
  
  ren listinfo.class listinfo.file
  
  
  
  3) 主程序中調入文件到byte[]中,可以在本地文件調用,也可用網絡無論如何只要能將

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲人成a一在线v站| 日韩精品中文字| 欧美日韩福利电影| 日韩精品有码在线观看| 国产一区二区三区在线免费观看| 国产精品一区久久| 亚洲最大成人免费视频| 国产精品欧美在线| 国产精品自产拍高潮在线观看| 91日本在线观看| 色妞久久福利网| 色视频www在线播放国产成人| 欧美日韩综合视频| 国产婷婷97碰碰久久人人蜜臀| 国产日韩欧美视频| 秋霞av国产精品一区| 国产亚洲精品激情久久| 日韩欧美在线中文字幕| 欧美激情欧美激情| 91亚洲永久免费精品| 成人性生交大片免费看小说| 欧美在线视频a| 在线看日韩av| 久久久久久噜噜噜久久久精品| 亚洲精品电影网| 在线观看日韩av| 欧美激情一区二区三区成人| 日韩av高清不卡| 欧美亚洲第一区| 成人免费视频在线观看超级碰| 一本大道久久加勒比香蕉| 91po在线观看91精品国产性色| 亚洲综合在线中文字幕| 国产69精品99久久久久久宅男| 在线中文字幕日韩| 国产福利精品视频| 日韩电影免费观看在线| 国产综合色香蕉精品| 久久久久久噜噜噜久久久精品| 亚洲视频网站在线观看| 亚洲成成品网站| 97视频在线观看播放| 日韩电影免费在线观看| 精品亚洲aⅴ在线观看| 日韩欧美在线观看视频| 亚洲激情视频网站| 日韩免费精品视频| 成人免费看黄网站| 亚洲片国产一区一级在线观看| 日韩国产精品视频| 中文字幕久热精品在线视频| 在线电影欧美日韩一区二区私密| 日日摸夜夜添一区| 国产成人亚洲综合青青| 中文字幕日韩综合av| 亚洲一区二区三区视频播放| 欧美放荡办公室videos4k| 欧美日韩国产精品一区| 91av视频导航| 精品久久久一区| 久久久久这里只有精品| 久久精品国产91精品亚洲| 一本一道久久a久久精品逆3p| 欧美美最猛性xxxxxx| 狠狠躁夜夜躁久久躁别揉| 欧美老妇交乱视频| 中文字幕精品www乱入免费视频| 92国产精品视频| 激情亚洲一区二区三区四区| 一本色道久久88综合日韩精品| 亚洲欧美在线播放| 亚洲欧洲午夜一线一品| 欧美日韩视频在线| 国产网站欧美日韩免费精品在线观看| 亚洲精品二三区| 国产精品亚洲精品| 久久亚洲国产成人| 欧美丰满少妇xxxxx做受| 精品成人乱色一区二区| 一区二区亚洲欧洲国产日韩| 黄网站色欧美视频| 欧美另类老女人| 久久久国产精品x99av| 成人av电影天堂| 久久久精品欧美| 2023亚洲男人天堂| 欧美日韩一区二区三区| 7777免费精品视频| 91久久久久久久久久久久久| 亚洲自拍偷拍第一页| 91久久在线观看| 欧美一乱一性一交一视频| 日韩美女免费线视频| 欧美日韩亚洲成人| 国产性猛交xxxx免费看久久| 亚洲午夜未满十八勿入免费观看全集| 91亚洲va在线va天堂va国| 亚洲国产成人久久综合一区| 日韩电影大片中文字幕| 久久九九全国免费精品观看| 国产一区二区三区视频| 国内精品久久久久久影视8| 日韩色av导航| 欧美劲爆第一页| 色系列之999| 在线成人激情黄色| 国产成人免费av电影| 久久久国产精品视频| 欧美精品久久久久| 亚洲高清福利视频| 欧美日韩中文字幕在线视频| 激情成人中文字幕| 搡老女人一区二区三区视频tv| 欧美亚洲日本黄色| 日韩视频免费大全中文字幕| 欧美日韩成人在线视频| 81精品国产乱码久久久久久| 国产精品最新在线观看| 国产在线久久久| 欧美黄色小视频| 最新国产成人av网站网址麻豆| 久久久久久久久久av| 久热精品在线视频| 亚洲午夜未满十八勿入免费观看全集| 日韩高清a**址| 欧美国产日产韩国视频| 日韩视频亚洲视频| 欧美激情在线有限公司| 97久久精品视频| 国产日韩综合一区二区性色av| 狠狠躁夜夜躁人人爽超碰91| 中文字幕欧美亚洲| 中文字幕精品一区二区精品| 啪一啪鲁一鲁2019在线视频| 亚洲精品国产精品乱码不99按摩| 国产精品啪视频| 91久久久精品| 欧美精品在线免费| 国产成+人+综合+亚洲欧美丁香花| 日韩亚洲精品视频| 亚洲高清一二三区| 成人做爽爽免费视频| 亚洲电影免费观看高清完整版| 这里只有精品视频| 亚洲人成网7777777国产| 九九热视频这里只有精品| 国产精品黄色影片导航在线观看| 欧美视频在线观看 亚洲欧| 亚洲国产精品一区二区久| 欧美激情在线观看视频| 91丝袜美腿美女视频网站| 青青久久av北条麻妃黑人| 国产精品视频大全| 成人免费视频在线观看超级碰| 国产精品偷伦一区二区| 国产美女精品免费电影| 久久成人免费视频| 欧美大片在线影院| xxxx性欧美| 精品国产视频在线| 欧美日韩久久久久| 色先锋资源久久综合5566| 欧美电影免费在线观看| 国产日韩欧美在线观看|