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

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

如何尋一個類X實例中類的物理所在?

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

  問題: 當我擁有一個類X的實例,我怎么在運行的時候實時找出它的類的物理所在?
  在我給你答案之前,我必須指出,假如你堅持養成一個好習慣--編程序時總是考慮與硬盤位置無關,那么你的java學習將會進展的很順利.當你要裝載資源的時候,比如一些屬性和配置文件,盡可能的使用ResourceBundle.getBundle()而不是使用java.util.File,除非真的是必須這樣.這樣做不僅有利于你的J2EE應用開發,而且越到后來,你就越會發現,我怎么有那么多東西要裝載?這個時候,你就會覺得這個方法確實給你帶來了方便.
  
  盡管如此,追尋到class的根源有時候在程序測試和debug的時候會很有用,由于這個想法,我給出了一種很有幫助的方法能夠替我們完成這個任務,這些所有都是基于j2se的api的.
  /**
     * Given a Class object, attempts to find its .class location [returns null
     * if no sUCh definition can be found]. Use for testing/debugging only.
     *
     * @return URL that points to the class definition [null if not found].
     */
    public static URL getClassLocation (final Class cls)
    {
      if (cls == null) throw new IllegalArgumentException ("null input: cls");
      
      URL result = null;
      final String clsAsResource = cls.getName ().replace ('.', '/').concat (".class");
      
      final PRotectionDomain pd = cls.getProtectionDomain ();
      // java.lang.Class contract does not specify if 'pd' can ever be null;
      // it is not the case for Sun's implementations, but guard against null
      // just in case:
      if (pd != null)
      {
        final CodeSource cs = pd.getCodeSource ();
        // 'cs' can be null depending on the classloader behavior:
        if (cs != null) result = cs.getLocation ();
        
        if (result != null)
        {
          // Convert a code source location into a full class file location
          // for some common cases:
          if ("file".equals (result.getProtocol ()))
          {
            try
            {
              if (result.toExternalForm ().endsWith (".jar")
                result.toExternalForm ().endsWith (".z                result = new URL ("jar:".concat (result.toExternalForm ())
                  .concat("!/").concat (clsAsResource));
              else if (new File (result.getFile ()).isDirectory ())
                result = new URL (result, clsAsResource);
            }
            catch (MalformedURLException ignore) {}
          }
        }
      }
      
      if (result == null)
      {
        // Try to find 'cls' definition as a resource; this is not
        // document.d to be legal, but Sun's implementations seem to     //allow this:
        final ClassLoader clsLoader = cls.getClassLoader ();
        
        result = clsLoader != null ?
          clsLoader.getResource (clsAsResource) :
          ClassLoader.getSystemResource (clsAsResource);
      }
      
      return result;
    }
   
  你最好通過這個類的ProtectionDomain方法來獲得這個類的代碼文件來源以及url地址.然而,有一個問題就是, Class.getProtectionDomain()似乎并不會返回一個null值-在api里也似乎是這么說的. 但是Class.getProtectionDomain()并不一定就會返回一個有效的url值,所以我們在后面通過判定result來得知是否有效.
  
  所有的細節都是classloader的動作,我們知道,classloader就是裝載和定義我們的class的.通過java.lang.ClassLoader.defineClass()—5個參數,而且ProtectionDomain參數不能為空,我們可以建立需要的類以及相關受保護的區域.
  
  一般來講, java.net.URLClassLoader以及相關的擴展一般都會遵循這個規則,但是并非所有自定義的classloader都會保證自動實現它.
  
  假如第一步失敗了,你可以試試通過getResource()來獲得.class結尾的文件的位置.Java規范里面并沒有具體說明這樣作是否答應:因為,任何代碼都能通過URLS讀取整個類的定義,是一個潛在的安全漏洞.有一些jvm已經禁止通過getResource()來裝載.class文件.然而,sun的jdk卻是通過這個途徑來裝載類的,這似乎傳遞了某些合法的信息.
  
  最后,千萬不要忘記,不要去尋找任何不存在的東西,一個java.lang.Class類是不需要真正存在一個.class文件的.一個明顯的例子就是動態代理類:它的字節碼定義是在運行的時候合成的. 對于它,getClassLocation()將會返回null. 將來,j2ee里面將更多的依靠這種運行時構造的方法.因為這些原因,還有就是虛擬機各自都不同,我提供的這種方法你最好只是用來做測試和debug.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品videossex88| 一本久久综合亚洲鲁鲁| 国产精品成人在线| 日韩www在线| 久久久av电影| 日韩一区在线视频| 欧美激情在线有限公司| 国产精品99久久久久久人| 7777精品视频| 91久久精品久久国产性色也91| 中文字幕成人精品久久不卡| 日韩欧美精品网址| 亚洲人成电影网站色…| 亚洲成人久久电影| 国产主播喷水一区二区| 深夜福利国产精品| 国产欧美欧洲在线观看| 久久婷婷国产麻豆91天堂| 国产美女精彩久久| 日韩一区二区欧美| 亚洲国产欧美一区二区丝袜黑人| 国产999精品久久久影片官网| 欧洲成人免费视频| 日本精品视频在线| 亚洲第一精品福利| 欧美高跟鞋交xxxxxhd| 久久久www成人免费精品| 亚洲高清不卡av| 欧美一级大片在线免费观看| 成人激情在线播放| 色综合久久天天综线观看| 久久全国免费视频| 久久精品色欧美aⅴ一区二区| 日韩毛片中文字幕| 55夜色66夜色国产精品视频| 亚洲人成电影网| 成人激情视频在线播放| 亚洲xxx自由成熟| 91香蕉嫩草影院入口| 成人写真视频福利网| 久久久久久久国产精品视频| 欧美日韩国产页| 久久久伊人欧美| 国产日本欧美视频| 68精品国产免费久久久久久婷婷| 欧美另类在线播放| 亚洲国产97在线精品一区| 欧美专区在线视频| 成人激情av在线| 亚洲第一网中文字幕| 自拍偷拍亚洲精品| 欧美成人第一页| 中文字幕亚洲字幕| 日韩视频第一页| 4438全国亚洲精品在线观看视频| 亚洲国产精品推荐| 亚洲在线免费看| 国产精品极品美女在线观看免费| 久热精品在线视频| 热久久这里只有| 亚洲全黄一级网站| 狠狠躁夜夜躁久久躁别揉| 国产精品国产三级国产aⅴ浪潮| 懂色aⅴ精品一区二区三区蜜月| 狠狠躁夜夜躁人人爽天天天天97| 亚洲欧美国产日韩中文字幕| 欧美激情乱人伦| 色综合久久悠悠| 国产精品久久久久久婷婷天堂| 欧美极品欧美精品欧美视频| 91在线观看免费网站| 欧美一级在线播放| 国产精品日韩在线观看| 国产精品夫妻激情| 亚洲成人在线视频播放| 亚洲大胆美女视频| 亚洲图片制服诱惑| 日韩av中文字幕在线免费观看| 91精品国产777在线观看| 九九综合九九综合| 欧美日韩中文字幕综合视频| 国产xxx69麻豆国语对白| 国产区精品视频| 日韩精品在线第一页| 久久久综合av| 国产精品视频播放| 91精品久久久久久久久久久久久久| 精品亚洲永久免费精品| 一区二区三区国产视频| 91精品国产高清自在线| 91免费欧美精品| 国产精品激情自拍| 91欧美精品成人综合在线观看| 亚洲午夜激情免费视频| 91黑丝在线观看| 亚洲视频在线免费看| 91免费看片网站| 欧美怡春院一区二区三区| 欧美精品一区二区三区国产精品| 亚洲国产精品中文| 亚洲最大中文字幕| 97香蕉久久夜色精品国产| 高清一区二区三区日本久| 国产一区二区三区日韩欧美| 国产在线a不卡| 亚洲乱码国产乱码精品精天堂| 亚洲女人天堂视频| 欧美日韩国产中字| 国产在线a不卡| 欧美一区三区三区高中清蜜桃| 国产精品高精视频免费| 欧美丰满少妇xxxxx| 亚洲综合中文字幕在线观看| 国产一区二区三区在线免费观看| 久久久国产影院| 亚洲qvod图片区电影| 欧美在线中文字幕| 亚洲一区二区自拍| 日韩一二三在线视频播| 2020欧美日韩在线视频| 高清一区二区三区四区五区| 国产精品女视频| 久久久女女女女999久久| 亚洲精品网站在线播放gif| 日本精品久久中文字幕佐佐木| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲日本中文字幕免费在线不卡| 日韩欧美在线视频日韩欧美在线视频| 国产精品永久免费观看| 亚洲国产高潮在线观看| 国模精品视频一区二区| 在线电影中文日韩| 欧美激情小视频| 欧美电影免费观看网站| 国产mv免费观看入口亚洲| 成人网在线免费观看| 日韩精品小视频| 美女精品视频一区| 欧美在线一级va免费观看| 91禁国产网站| xx视频.9999.com| 中文字幕在线看视频国产欧美在线看完整| 亚洲综合中文字幕在线观看| 欧美与黑人午夜性猛交久久久| 国产精品一区二区三区成人| 色综合视频一区中文字幕| 国产精品极品美女在线观看免费| 国产小视频91| 国产mv免费观看入口亚洲| 国产精品视频在线观看| 亚洲性日韩精品一区二区| 中文字幕久热精品在线视频| 秋霞成人午夜鲁丝一区二区三区| 中文字幕九色91在线| 欧美洲成人男女午夜视频| 黄色精品在线看| 日韩精品视频免费在线观看| 日本精品视频在线观看| 国产亚洲欧洲在线| 国产成人精品午夜| 伊人久久久久久久久久久久久| 伊人久久免费视频| 欧美精品在线视频观看| 国产日本欧美一区二区三区在线|