反射机制概述

类的加载:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。
加载:
就是指将.class文件读入内存,并为之创建一个Class对象。
任何类被使用时系统都会建立一个Class对象。
连接:
验证 :是否有正确的内部结构,并和其他类协调一致
准备 :负责为类的静态成员分配内存,并设置默认初始化值
解析:把类中的符号引用转换为直接引用
初始化 :

类的加载时机

  1. 创建类的实例
  2. 访问类的静态变量,或者为静态变量赋值
  3. 调用类的静态方法
  4. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
  5. 初始化某个类的子类
  6. 直接使用java.exe命令来运行某个主类

类加载器:负责将.class文件加载进内存,并为之生成一个class对象;
分类:

  1. Bootstrap ClassLoade:根类加载器,负责Java核心类的加载,例如System,String,一般位于JRE目录下的rt.jar目录下;
  2. Extension ClassLoader:扩展类加载器,负责JRE扩展目录中的jar包加载,一般为JRE下lib目录下的ext目录下;
  3. Sysetm ClassLoader:系统类加载器,负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径。

反射机制:运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;
用处:从而对于任意一个对象,都能够调用它的任意一个方法和属性,这样动态获取类的信息以及动态调用对象的方法的功能称为java语言的反射机制;要想使用反射机制,要将该类的字节码文件对象获取到后,通过字节码文件对象,就能够剖析这个类的构成,以及调用类中的属性和功能;

获取类的字节码文件对象:(字节码文件对象只有一个)
   1. getClass()方法;
    	Object obj = new Object();  
        Class a = obj.getClass();
        Class b = obj.getClass();
        System.out.println(a == b);
  2. 通过类中的静态的Class属性,获取类的字节码文件对象;
      Class objectClass = Object.class;
      System.out.println(objectClass == a && objectClass == b);
  3. 通过Class中的静态方法forName(),需要传入类的全限定名即:类名+包名
		Class c = Class.forName("java.lang.Object");
        System.out.println(a == c);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值