• java_[类加载器]


    Class 与 类加载

    • Class对象由JVM自动产生,每当一个类被加载时,JVM就自动为其生成一个Class对象,通过Class对象可以获得类的相关信息。
    • 将类信息读到内存中过程,称为类加载
    • Java在需要使用某个类时,才会将该类进行加载,而不是在程序启动时就加载所有的类。

    • 所谓真正需要是指生成类的对象或类被加载时 new ,  Class.forName() ,  ClassLoader

    Ø加载class对象

    有6种情况JVM会加载Class对象

    • 使用new关键字创建对象时。
    • 通过反射创建对象时。
    • 调用某个类的static方法时。
    • 调用某个类的static属性时。
    • 当初始化某个类的子类时。
    • 某个类标明为main() 函数类(启动类) 。

    ØClass.forName加载类

    • 实现动态加载类
    • static Class forName(String name)
    • static Class forName(String name, boolean initialize, ClassLoader loader)
    • 类的具体路径 设为false代表在加载类时不会立即运行静态块,而会在使用类建立对象时才运行静态块。
    • 类加载器 Thread.currentThread().getContextClassLoader() —— 获得当前主线程的类加载器

    Øjava代码 

    public class Demo1 {
        public static void main(String[] args) {
            String s = new String("wenhaitao");
            //1. getClass()
            Class cls= s.getClass();
            System.out.println("leiming" + cls.getName());
            System.out.println("baoming" + cls.getPackage());
            System.out.println("是否为接口:" + cls.isInterface());
            System.out.println("是否为基本类型:" + cls.isPrimitive());
            System.out.println("是否为数组:" + cls.isArray());
            System.out.println("String类的父类:" + cls.getSuperclass());
    
            //2.Class
            Class cls1 = String.class;
            System.out.println("类名:" + cls1.getName());
            System.out.println("包名:" + cls1.getPackage());
            System.out.println("是否为接口:" + cls1.isInterface());
            System.out.println("是否为基本类型:" + cls1.isPrimitive());
            System.out.println("是否为数组:" + cls1.isArray());
            System.out.println("String类的父类:" + cls1.getSuperclass());
    
            System.out.println(cls == cls1);
            int a = 100;
            System.out.println(int.class);
        }
    }

    Ø获取一个对象的父类与实现接口

    public class Demo4 {
        public static void main(String[] args) {
            Class clz;//类对象
            ClassLoader cl, cl1;//类加载器
    
            clz = String.class;
            cl = clz.getClassLoader();//得到加载String类对象的类加载器
            System.out.println("加载String类对象的加载器:" + cl);
            //当类加载器为null的时候,表示的是BootStrapLoader
    
            System.out.println("******************************");
            clz = Demo4.class;
            cl = clz.getClassLoader();
            System.out.println("加载Demo4类对象的类加载器:" + cl);
            while(cl!=null) {
                cl1 = cl;
                cl = cl1.getParent();//得到父加载器
                System.out.println(cl1+"的父加载器是:" + cl);
            }
    
        }
    }

      别荒废了最能拼的年纪,让自己整天无所事事。自己那么差又不努力,还有什么资格唉声叹气。

      为了自己想要的未来,无论现在有多难熬,都必须得满怀信心的坚持下去。

  • 相关阅读:
    SQL游标操作每隔5分钟时间段数据统计信息
    win64位操作系统下安装pl/sql developer 并登录连接到oracle12c
    分科目统计每科前三名的学生
    merge源表数据移植到目标表新表数据中
    sqlserver表分区
    用SqlBulkCopy批量插入数据到SqlServer数据库表中
    SQL server插入数据后,如何获取自增长字段的值?
    Java创建线程的三种方式
    Java用户线程和守护线程
    Java虚拟机详解
  • 原文地址:https://www.cnblogs.com/dyywht/p/13537390.html
Copyright © 2020-2023  润新知