2021/8/17

java学习

反射

  • 解释

说的是程序在运行期间借助反射API取得任意类的内部信息。去获得对应对象的内部属性和方法。任何类在被JVM加载之后会产生有一个对应的Class对象,这个Class包含被加载类的全部结构信息。

/通过反射获取类的class对象
public class T {
    public static void main(String[] args) throws ClassNotFoundException {
        Class c1 = Class.forName("Test.T");

        System.out.println(c1);
        Class c2=Class.forName("Test.T");
        Class c3=Class.forName("Test.T");
        Class c4=Class.forName("Test.T");
        System.out.println(c2.hashCode());
        System.out.println(c3.hashCode());
        System.out.println(c4.hashCode());
    }
}

运行结果:

class Test.T
1846274136
1846274136
1846274136

一个类在内存中只会存在一个class对象,并且在加载后会封装在class对象中

  • 使用

正常方式:引入需要的"包类"名称->通过new实例化->取得实例化对象

反射方式:实例化对象->getClass()方法->取得完整的"包类"名称

  • 功能

java反射机制提供的功能:

  1. 在运行时判定任意一个对象所属的类
  2. 在运行时构造任意一个类的对象
  3. 在运行时判定任意一个类所具有的成员变量和方法
  4. 在运行时调用任意一个对象的方法
  • 创建
        方式一:
        Class c1=person.getClass();
        方式二:
        Class c2=Class.forName("Test.t2");
        方式三:
        Class c3=Student.class;
        方式四;
        Class c4=c1.getSuperclass()
  • 什么类可以有class对象

1.interfance 接口

2.[] 数组:只要元素类型与维度一样,就是同一class

3.enum 枚举

4.class :外部类,成员内部类,静态内部类,局部内部类,匿名内部类

5.primitive type:基本数据类型

6.void

  • 类的加载过程

要是类未被加载到内存中,系统则会通过三个步骤对类初始化

1.将类的class文件读入内存,为之创建java.lang.Class对象。

2.将类的二进制数合并到JRE。

  1. JVM对类初始化

    <clinit>(){
    		m=300;
    		m=100;
    }
    
  • 类的初始化

主动引用,会发生类的初始化

  1. new一个类的对象
  2. 调用类的静态成员和静态方法
  3. 反射调用

被动引用,不会发生类的初始化

  1. 引用常量不会发生初始化
  2. 访问静态域
  • 类加加载器
  1. 引导类加载器
  2. 扩展类加载器
ClassLoader p=parent.getParent();


  1. 系统类加载器
ClassLoader=class.forName("java.lang.Object").getClassLoader;
  1. 获取系统类加载器可以加载的路径
System.getProperty("java.class.path");

还有写项目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值