java反射机制面试_什么是JAVA反射机制,详细解读JAVA面试的核心技术

Java反射机制允许程序在运行时动态获取类的信息并调用其方法和属性。它使得Java在静态编译语言中拥有动态特性,能够在运行时加载未知类并操作。获取Class对象的三种方式包括:通过类的`.class`属性,`Object.getClass()`方法,以及`Class.forName()`。反射在Java中用于实现元编程,提高代码灵活性和动态性。
摘要由CSDN通过智能技术生成

一、什么叫Java反射机制?

Java中的反射机制是指在运行状态中,对于任意一个类,能够动态获取这个类中的属性和方法;对于任意一个对象,都能够任意调用它的属性和方法。这种动态获取类的信息以及动态调用对象方法的功能称为Java的反射机制。总结就是:反射可以实现运行时知道任意一个类的属性和方法。

0455712441b02467fe56689d1dbd13a0.png

二、Java当中为什么需要反射机制?工作原理是什么?

要明白为什么需要反射机制,首先就得先清楚两个概念:

(1)静态编译:在编译时就必须要知道变量得类型才能编译通过,比如C++,Java等编译之前必须清楚的指明数据类型;

(2)动态编译:显然和上述概念相反,即在编译时不需要立即知道变量的类型,在运行时指明其类型就行。

3b90ab2d581bb04eecb6bc931751786d.png

有上述概念之后便有了静态语言和动态语言之分,而Java,C++就是典型的静态语言,而Python,Ruby等则为动态语言。但是Java虽是一个静态的解释型语言,但其也有动态的性质------反射(Reflection)。用在Java身上指的是运行时加载,探知,使用编译期间未知的classes。

下面探讨一下反射是如何在仅知道类名的情况下能够知道整个类的完整构造的(方法,属性等)。

dcc22db5142ccc91f022ec2b1fdc9b61.png

首先我们都清楚,Java是一种解释型的语言,即编译器首先将源码编译成class文件,然后虚拟机(JVM)再将class文件解释给目标计算机执行。而这里所说的反射机制操作的其实就是源码编译之后的class文件。首先将class文件加载到内存,然后从该文件中解剖出某个具体类的构造函数,方法和属性,从而完全知道某个类的所有构造。

三、反射的使用及入门

在使用反射之前,最好清楚一个这样的概念,即类类型。在编程语言中,各种数据都有其数据类型,那么对于类本身而言,它也有自己的类型,即类类型,其实和普通的数据类型差不多,清楚这一点就行。类是java.lang.Class类的实例对象,而Class是所有类的类(There is a class named Class)。对于普通的类实例化时只需要new一个就行,但是要想用new实例化Class是行不通的,因为Class的构造器是私有的(自行查看源码)。

5018179e9962e5e1373f03344241e6cb.png

1、获取某个类(Student)的Class对象的三种方法:

(1)Class c1=Student.class;//通过Student类隐藏的静态变量来获取

(2)Class c2=Student.getClass();//通过Stduent的getClass()方法

(3)Class c3=Student.forName("com.tyf.reflect.Student");//com.tyf.reflect.Student为Student类的全类名。

6d59dab78c93f1c39cc5009932b75b74.png

注意:这里的c1,c2,c3是完全一样的,都是Class的对象(学名 类类型)。这里不必纠结Student和c1,c2,c3是否一样了(都叫Class对象),只需了解类类型是什么就行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值