首页 > 其他分享 >面试---反射

面试---反射

时间:2022-08-22 09:33:42浏览次数:49  
标签:反射 java 程序运行 对象 程序 --- 面试 任意


☺ 面试聊聊反射机制?

Java的反射机制:是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种 动态获取程序信息以及动态调用对象的功能 称为Java语言的反射机制。



☺ 聊一下反射的原理?

java程序运行前,先会将java程序 编程 生成 .class 字节码文件,在程序运行过程中,使用到某个类,内存还没存在该类,那么 虚拟机就会先将该类加载到内存同时, 虚拟机会产生一个 java.lang.class 对象,代表该字节码文件。

通过Class 对象可以得到大量的Method、Constructor、Filed 等对象,这些对象分别代表该类所包含的方法、构造器、属性等等;反射的工作原理就是通过这些对象来执行实际的功能,例如调用方法、创建实例等等。



☺ 聊一下反射的优缺点?

优点:

  • 增加了程序的灵活性:例如Spring框架中,利用xml 配置文件解析bean的过程,就是反射的典型应用场景。
  • 增加了程序的拓展性:可以在不知道运行哪一个类的情况下,还能获取到类的信息,去创建对象以及操作对象;在程序中我们无须将对象的类型硬编码写死,可以更加方便地实现拓展,降低耦合度。

缺点:

  • 更容易出现运行错误:使用显示的类和接口,编译器可以帮我们做类型检查,但是使用反射却是需要等到程序运行才知道对象的类型
  • 性能比较低:反射是一种解释操作, 在访问字段和调用方法前,需要先获取到Filed、Method ,性能相对会低一些。
  • 安全性问题:通过反射可以修改任意的私有字段和访问私有方法破坏了类的封装,可能会出现逻辑错误等安全隐患。

标签:反射,java,程序运行,对象,程序,---,面试,任意
From: https://www.cnblogs.com/shan333/p/16611753.html

相关文章

  • vue3项目-小兔鲜儿笔记-01-项目初始化
    1.pinia基础store/modules/user.tsimport{defineStore}from'pinia'//用户模块constuseUserStore=defineStore('user',{state:()=>{return{......
  • docker-compose-运行微服务项目
    1.数据库迁移将cloud-demo涉及的相关sql导入到Linux上的mysql容器中2.阅读docker-compose.yml文件version:"3.2"services:nacos:image:nacos/nacos-server......
  • Linq-20220817更新
    一、常用函数Where:每一项数据都会经过predicate(传入的委托lambda表达式)的测试,如果对元素执行predicate后返回值为True,则这个元素会添加到结果数组中Count:每一项数据都......
  • 反射机制
    反射机制(Reflection)1.静态与动态语言静态语言:运行时结构不可变的语言,如Java、C、C++。动态语言:运行时可以改变其结构的语言,如C#、JavaScript、PHP、Python等。Java不是......
  • Field Play:Runge-Kutta
    目录引子相关概念Runge-Kutta参考资料引子在FiledPlay:简介中提到了这个方法,查资料了解了一下。OriginMyGitHub相关概念极限有时不能直接计算某个值,但......
  • PowerShell教程 - 数值管理(Working With Number)
    更新记录转载请注明出处。2022年8月22日发布。2022年8月18日从笔记迁移到博客。数值管理(WorkingWithNumber)生成随机数Get-Random实例:限制范围:注意:包括最小......
  • PowerShell教程 - 进程管理(Process Management)
    更新记录转载请注明出处。2022年8月22日发布。2022年8月18日从笔记迁移到博客。进程管理(ProcessManagement)开启进程Start-Process结束进程Stop-Process等......
  • PowerShell教程 - 用户和组管理(User && Group)
    更新记录转载请注明出处。2022年8月22日发布。2022年8月18日从笔记迁移到博客。用户和组管理(User&&Group)获得计算机本地用户Get-LocalUser获得计算机本地组......
  • k8s-mtu设置不当引发的线上故障
    背景在部署新的paas平台线上环境时,突发consul和es中间件无法创建。排查过程以consul通过查询k8s集群中pod状态发现原来3pod的consul集群,其中2个pod一直重启。#kubect......
  • _Readme-exe
      _Readme-exe 2022年8月22日2022/8/22@echoofffor/f"tokens=2delims=="%%ain('wmicpathwin32_operatingsystemgetLocalDateTime/value')do(set......