Java基础——面试官:你来说说反射如何获取私有对象的属性和方法

createh55个月前 (02-01)技术教程68

最近,@Python大星 的朋友小鹿参加了一场#Java#面试。

有一道题是这样的 >>>

【面试官问:你来说说反射如何获取私有对象的属性和方法?】

问题的答案我们文章中揭晓,先看下反射的基础知识,无论你是学动态代理,Spring 的 AOP 都离不开反射的知识。

反射

最开始接触反射这个概念,是在初中上物理--光的反射原理,是不是格外的熟悉亲切。

1、那什么是Java 的反射??

对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。

如果你对Java 的类不是很熟悉,可以移步>>

Java类的介绍

2、Java 反射的好处?

① 在程序运行过程中操作对象

② 可以解耦,提高程序的扩展,如动态代理

3、Java 代码运行过程

*.java 文件 >>> *.class 字节码文件 >>> 类加载

加载具体是指把类的.class 文件中的二进制数据读入到内存中,把它存放在运行时数据区的方法区内,然后再堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构

4、获取 Class 对象的三种方式

① Class.forName ("全类名")

② 类名.class

③ 对象.getClass ()

5、Class对象的功能

可以查看 JDK中文在线文档

java.lang中

① 获取成员变量

  • (1)设置值 void set (Object obj, Object value)
  • (2)获取值 get (Object obj)
  • (3)忽略访问权限修饰符的安全检查 setAccessible (true): 暴力反射
  • 输出结果:

    如何获取私有变量的值?(面试)

    ② 获取构造方法

    ③ 获取成员方法

  • 执行方法:Object invoke (Object obj, Object... args)
  • 获取方法名称:String getName ();
  • 输出结果:


    ④ 获取全类名

    String getName()

    _0328_reflect.constructor.Person

    相关文章

    java匿名内部类的定义以及使用场景

    匿名内部类定义 匿名内部类是Java中一种没有显式声明名称的内部类。它们在创建时被同时声明和实例化,通常用于创建一次性使用的类。它们的特点是:无名称: 无法像普通类一样被其他代码引用。一次性: 通常只...

    内部类Java(内部类定义)

    概念将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。什么时候使用内部类一个事物内部还有一个独立的事物,内部的事物脱离外部的事物无法独立使用比如汽车只有一个发动机,电脑只有一...

    做开发这么久了,还不会搭建服务器Maven私有仓库?这也太Low了吧

    大家好,我是冰河~~最近不少小伙伴想在自己公司的内网搭建一套Maven私服环境,可自己搭建的过程中,或多过少的总会出现一些问题,问我可不可以出一篇如何搭建Maven私服的文章。这不,就有了这篇文章嘛。...

    北大开源最强aiXcoder-7B代码大模型!专为企业私有部署设计

    丰色 衡宇 发自 凹非寺量子位 | 公众号 QbitAI从科技圈最新动态来看,最近AI代码生成概念实火。可是,小伙伴们有没有感觉,AI刷程序题比较亮眼,到了企业真实开发场景中,总感觉欠点火候?恰在此时...

    Java虚拟机运行时数据区的内部结构布局

    运行时数据区的内部结构主要分为方法区(Method Area)、堆(Heap)、程序计数器(Program Counter Register)、本地方法栈(Native Method Stack)、虚...

    从Java 9 到 Java 17之Java 9(java 1-0.9)

    Java 17 是Java 最重要的一个LTS版本之一,但是直接从Java 8 过渡到Java 17跨度太大了,势必有些困难。所以胖哥抽时间梳理了一下从Java 9到Java 17的一些常用API的变...