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

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

最近,@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中对象的概念的理解)

    内存、性能是程序永恒的话题,实际开发中关于卡顿、OOM也经常是打不完的两只老虎,关于卡顿、OOM的定位方法和工具比较多,这篇文章也不打算赘述了,本章主要是来整理一下JVM的内存模型以及Java对象的生...

    Java设计模式-单例模式(java单例模式原理)

    单例模式定义:它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式主要分为两大类:饿汉式和懒汉式,懒汉式又分为 单线程下的普通懒汉式,多线程下的双重校验锁、静态内部类、枚举。单例模式的...

    用GitHub创建自己的Maven私有仓库

    【Github上创建仓库】首先,在GitHub上创建自己的仓库(mvn-repo):【配置本地setting文件】找到本地的maven settings文件,配置server:有两种选择,可以选择配置...

    终于搞懂了 Java 8 的内存结构,再也不纠结方法区和常量池了

    java8内存结构图虚拟机内存与本地内存的区别Java虚拟机在执行的时候会把管理的内存分配成不同的区域,这些区域被称为虚拟机内存,同时,对于虚拟机没有直接管理的物理内存,也有一定的利用,这些被利用却不...

    java的53个关键字(含2个保留字)第一篇

    1.java的关键字(keyword)有多少个? 51+2个保留字=53个关键字(java的关键字都是小写的!!)2.java的保留字(reserve word)有多少个?问题:分别是什么? 1).c...