Java反射机制-框架设计的灵魂

本文深入讲解Java反射机制的核心概念和应用场景,包括类的加载过程、Class对象的获取方式、实例的创建方法、成员变量和方法的获取及调用等。同时探讨了反射机制可能带来的性能和安全性问题。

概述

运行时状态中,可以获取程序或者程序集的每一个类型的成员或成员信息。核心在于可以运行时动态加载类或者调用方法/属性,不需要事先知道运行对象是谁。

用途

  1. 使用IDE 时,输入一个累活对象,调用它的属性或者方法时,输入 . IDE就自动列出类的方法或属性,这就是java 的反射用途之一。
  2. 在框架设计时,模块间不能相互依赖,这是就需要使用反射获取其他模块的类对象。
  3. 某些类的私有方法(属性)无法直接调用,但是又必须使用时,可以使用反射机制获取类对象的私有方法(属性)并调用。

类的加载过程

Java 文件从编码完成到执行经过两个过程:

**编译:**通过 javac 命令编译成字节码,也就是 .class 文件。

**运行:**把编译生成的 .class 文件交给 JVM 执行。

**类的加载过程:**JVM 虚拟机将 .class 文件中的信息加载到内存中,解析生成对应的 Class 对象,作为这个类的数据访问入口。同一个类,在 内存中只存在一个 Class 对象

也就是说JVM并不是一次性把所有类都加载到内存中,而是第一次执行到这个类的时候加载,且只加载一次。

Class 类的实例表示正在运行的Java应用程序中的类和接口。

Class 没有公共的构造方法。

反射的使用

1、获取Class 对象

反射获取 Class 对象有三种方法:

  1. 调用对象的 getClass() 方法:

    String str = new String();
    Class<?> cls = str.getClass();
    
  2. 直接获取对象(包括基本数据类型)的 class 属性:

    Class<?> cls = int.class;
    
  3. 使用 Class.forName 方法:

    Class<?> cls = Class.forName("类名");
    

在反射里,一般使用第3种方法,第一种已经获取对象,没必要反射。第二种已经知道类型,需要引入包名,比较麻烦。第3种知道类的全提名即可。

2、创建实例

  1. 可以使用Class 对象的newInstance()方法来创建Class对象应用类的实例。

    Class<?> cls = String.class;
    Object oj = cls.newIntance();
    
  2. 可以通过获取Constructor对象的newInstance()方法。这种方式可以指定构造类实例。

    Class<?> cls = String.class;
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值