Java反射浅析

本文介绍了Java反射机制的基本概念,解释了如何使用反射机制在运行时获取类的信息并操作类的对象。详细阐述了获取Class对象的三种常见方式及其优缺点。

1. 反射的概述

  • 反射机制是在运行状态中,对任意一个类,都能够知道这个类的所有属性和方法; 对任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
  • 要想解剖一个类,必须先获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

    反射就是把java类中的各种成分映射成一个个的Java对象

    如:一个类有:成员变量、方法、构造方法、包等,利用反射可对一个类进行解剖,把个个组成部分映射成一个个对象。(其实一个类中这些成员,构造方法、在加入类中都有一个类来描述)
    如图是类的正常加载过程:反射的原理在与class对象。
    熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。

这里写图片描述

2. 反射的使用

  • 获取Class对象的三种方式
    1.1 Object ——> getClass();
    1.2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性
    1.3 通过Class类的静态方法:forName(String className)(常用)
/* 获取Class对象的三种方式 
 - 1 Object ——> getClass(); 
 - 2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性 
 - 3 通过Class类的静态方法:forName(String  className)(常用) 
 - 
*/  
public class Fanshe {  
    public static void main(String[] args) {  
        //第一种方式获取Class对象    
        Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。  
        Class stuClass = stu1.getClass();//获取Class对象  
        System.out.println(stuClass.getName()); 
        //第二种方式获取Class对象  
        Class stuClass2 = Student.class;  
        System.out.println(stuClass == stuClass2);//判断第一种方式获取的Class对象和第二种方式获取的是否是同一个      
        //第三种方式获取Class对象  
        try {  
            Class stuClass3 = Class.forName("fanshe.Student");//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名  
            System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        }  

    }  
}
  • 注意:在运行期间,一个类,只有一个Class对象产生。
  • 以上三种方式常用第三种,第一种对象都有了还要反射干哈。第二种需导入类的包,依赖强,不导包就编译错误。一般第三种,一个字符串可传入也可写在配置文件中等多种方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值