>  기사  >  Java  >  Java의 내부 클래스와 클래스 로더를 설명하는 예제 제공

Java의 내부 클래스와 클래스 로더를 설명하는 예제 제공

高洛峰
高洛峰원래의
2017-01-13 09:47:581107검색

내부 클래스

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 클래스의 인스턴스입니다. 이 메소드는 최종으로 선언됩니다.
resolveClass(Class6b3d0130bba23ae47fe2b8e8cddf0195 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")); 
} 
}

Java의 내부 클래스와 클래스 로더를 설명하는 더 많은 예제를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.