程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 舉例講授Java的外部類與類的加載器

舉例講授Java的外部類與類的加載器

編輯:關於JAVA

舉例講授Java的外部類與類的加載器。本站提示廣大學習愛好者:(舉例講授Java的外部類與類的加載器)文章只能為提供參考,不一定能成為您想要的結果。以下是舉例講授Java的外部類與類的加載器正文


外部類

class A { 
  //Inner1 要在 A 初始化後 能力應用,即要被A的對象所挪用  
  class Inner1 { 
    int k = 0; 
    // static int j = 0; //A加載後,Inner1沒有加載,所以這個 靜態變量j 沒法立刻應用,報錯 
    final int z = 0; 
    /*static void say1() { 
 
    }*/ 
    void say2() { 
       
    } 
 
  } 
  //Inner2 在A加載好後便可以應用了  
  static class Inner2 { 
    int k = 0; 
    static int j = 0; 
    final int z = 0; 
    static void say1() { 
 
    } 
    void say2() { 
       
    } 
  } 
  // 挪用外部類 
  void c() { 
    final int x = 0;// final 潤飾後,可以由部分外部類挪用 
    new A().new Inner1();// 非靜態外部類Inner1,須要它所屬的類的對象挪用 
    new A().new Inner1().say2(); 
     
    A.Inner2.say1(); 
    new A.Inner2().say2();// 非靜態辦法say2(),須要它所屬的類的對象挪用 
 
    class Inner3 { 
      void print() { 
        System.out.println(x); 
      } 
    } 
    /* 
     * 辦法中的部分外部類的挪用,須要在聲明後 由於, 
     * 在辦法裡的履行次序是 從上往下,而這個類 
     * 就相當於一個 部分 變量 固然 要先聲明,再應用 
     */ 
    new Inner3().print(); 
  } 
 
} 

類的加載器 java.lang.ClassLoader
java.lang.ClassLoader 類的根本職責就是依據一個指定的類的稱號,找到或許生成其對應的字節代碼,然後從這些字節代碼中界說出一個 Java 類,即java.lang.Class 類的一個實例。除此以外,ClassLoader 還擔任加載 Java 運用所需的資本,如圖象文件和設置裝備擺設文件等。不外本文只評論辯論其加載類的功效。為了完成加載類的這個職責,ClassLoader 供給了一系列的辦法:
getParent() 前往該類加載器的父類加載器。
loadClass(String name) 加載稱號為 name 的類,前往的成果是 java.lang.Class 類的實例。
findClass(String name) 查找稱號為 name 的類,前往的成果是 java.lang.Class 類的實例。
findLoadedClass(String name) 查找稱號為 name 的曾經被加載過的類,前往的成果是 java.lang.Class 類的實例。
defineClass(String name, byte[] b, int off, int len) 把字節數組 b 中的內容轉換成 Java 類,前往的成果是 java.lang.Class 類的實例。這個辦法被聲明為final 的。
resolveClass(Class<?> c) 鏈接指定的 Java 類。

public class ClassLoaderTest extends ClassLoader { 
  public static void main(String[] args) throws SecurityException, NoSuchMethodException { 
     
    // 根類加載器,加載的焦點類庫 
     URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); 
     for (URL u : urls) { 
     System.out.println(u); 
     } 
    // 擴大類 加載器,,加載的體系屬性:java.ext.dirs 前往的途徑下的 class 
    System.err.println("擴大類(extention classLoader)加載器" 
        + ClassLoader.getSystemClassLoader().getParent());//非繼續關系,只是意義上 
    System.out.println(System.getProperty("java.ext.dirs")); 
    // 運用(體系 application classLoader)類加載器,, 加載體系情況變量 PATH 或 CLASSPATH 
    // 指定的JAR包和類途徑 
    System.err.println("運用(體系)類加載器" + ClassLoader.getSystemClassLoader()); 
    // System.out.println(System.getenv("PATH")); 
    // System.out.println(System.getenv("CLASSPATH")); 
} 
} 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved