zoukankan      html  css  js  c++  java
  • 第十三章、反射、类加载与垃圾回收

         java类文件通过类加载器加载到内存中。
       
    类加载器包括

      根类加载器:其是用本地代码实现,负责加载核心java类
      扩展类加载器:负责加载扩展的java的类
      系统类加载器:负责加载应用程序自身的类
      还可以通过继承ClassLoader(抽象类)基类来创建自定义的类加载

    类加载的三个阶段
     
      加载、连接(验证、准备、解析)、初始化三个阶段,加载完后得到一个class对象

    反射

    java程序中的对象在运行时会出现两种类型:编译时类型和运行时类型,例如:
         Employee s(编译时类型为Employee)=new Salary()(运行时类型为Salary);

    在java程序中获得Class对象有三种方式
    第一种:
     反射是指java中,可以运行期载入、探知和使用编译器完全未知的类。通过使用java反射机制,
    我们可以获得类的信息,并动态创建对象、设定成员变量的值、调用方法以及动态创建和访问数组
                            例如:
                          //class.forName(className)方式的反射
       Scanner scan = new Scanner(System.in);
       System.out.print("请输入:");
       String className = scan.next();
       Class c3 = Class.forName(className(全限定类名即包名.类名));

    //得到构造方法及其参数,并且可以获取对应的参数类型
    //   Constructor[] cons = c3.getConstructors();
    //   
    //   for(int i=0; i
    //    System.out.println(cons[i].getGenericParameterTypes().length);
    //    if(cons[i].getGenericParameterTypes().length>0){
    //     System.out.println(cons[i].getGenericParameterTypes()[0]);;
    //    }
    //   }
    第二种

       在编译时知道类名的情况用:Class c=类名.class;//调用该类的class属性来获得该类的Class
    对象

    第三种

    如果一个类的实例对象已经得到,则调用该对象的getClass()方法返回该对象所属类对应的的Class
    对象,getClass()方法属于Object类的,所以所有对象都可以使用:
    例如:Dong d=new Dong();
          Class c=d(对象名).getClass();

    垃圾回收

       对象不可获得就会被垃圾回收,System.gc()或者Runtime.gc()方法是程序员与JVM的垃圾回收器
    进行通讯的唯一机制,但是gc()方法并不能保证垃圾回收器立即执行垃圾回收,只能促使垃圾回收器
    尽快回收无用的对象

    对象的finalize()方法可以帮助我们完成一些释放对象所占用的资源等收尾工作。但是垃圾回收
    器是否执行finalize()方法、以及什么时候执行该方法,都是不确定的

  • 相关阅读:
    aws-rds for mysql 5.7.34搭建备库
    Redis 未授权访问漏洞利用总结(转)
    mongoexport/mongimport命令详解
    mongodump/mongorestore命令详解
    redis stream类型 常用命令
    system_time_zone参数值由来
    MySQL加密解密函数AES_ENCRYPT AES_DECRYPT
    MySQL开启SSL加密
    MDL锁获取顺序和优先先
    explicit_defaults_for_timestamp 参数说明
  • 原文地址:https://www.cnblogs.com/tangyue/p/3684980.html
Copyright © 2011-2022 走看看