Classe interne
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(); } }
Chargeur de classe java.lang.ClassLoader
La responsabilité fondamentale de la classe java.lang.ClassLoader est de trouver ou de générer la classe correspondante en fonction du nom d'un objet spécifié. classe. Codes d'octet, puis définissez une classe Java à partir de ces codes d'octet, c'est-à-dire une instance de la classe java.lang.Class. De plus, ClassLoader est également responsable du chargement des ressources requises par les applications Java, telles que les fichiers image et les fichiers de configuration. Cependant, cet article ne traite que de sa fonction de chargement des classes. Afin de remplir cette responsabilité de chargement des classes, ClassLoader fournit une série de méthodes :
getParent() renvoie le chargeur de classe parent de ce chargeur de classe.
loadClass(String name) charge la classe nommée name et le résultat renvoyé est une instance de la classe java.lang.Class.
findClass(String name) trouve la classe nommée name et le résultat renvoyé est une instance de la classe java.lang.Class.
findLoadedClass(String name) trouve la classe chargée nommée name et le résultat renvoyé est une instance de la classe java.lang.Class.
defineClass(String name, byte[] b, int off, int len) convertit le contenu du tableau d'octets b en une classe Java, et le résultat renvoyé est une instance de la classe java.lang.Class. Cette méthode est déclarée définitive.
resolveClass(Class6b3d0130bba23ae47fe2b8e8cddf0195 c) lie la classe Java spécifiée.
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")); } }
Pour plus d'exemples expliquant les classes internes et les chargeurs de classes de Java, veuillez prêter attention au site Web PHP chinois !