1. 什么是反射?

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

2. 哪里用到反射机制?

  1. JDBC中,利用反射动态加载了数据库驱动程序。
  2. Web服务器中利用反射调用了Sevlet的服务方法。
  3. Eclispe等开发工具利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法。
  4. 很多框架都用到反射机制,注入属性,调用方法,如Spring。

3. 什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作?

  1. 对象序列化,将对象中的数据编码为字节序列的过程。
  2. 反序列化;将对象的编码字节重新反向解码为对象的过程。
  3. JAVA提供了API实现了对象的序列化和反序列化的功能,使用这些API时需要遵守如下约定:
    1. 被序列化的对象类型需要实现序列化接口,此接口是标志接口,没有声明任何的抽象方法,JAVA编译器识别这个接口,自动的为这个类添加序列化和反序列化方法。
    2. 为了保持序列化过程的稳定,建议在类中添加序列化版本号。
    3. 不想让字段放在硬盘上就加transient
  4. 以下情况需要使用 Java 序列化:
    1. 想把的内存中的对象状态保存到一个文件中或者数据库中时候;
    2. 想用套接字在网络上传送对象的时候;
    3. 想通过RMI(远程方法调用)传输对象的时候。

4. 反射机制的优缺点?

  1. 优点:可以动态执行,在运行期间根据业务功能动态执行方法、访问属性,最大限度发挥了java的灵活性。
  2. 缺点:对性能有影响,这类操作总是慢于直接执行java代码。

5. 动态代理是什么?有哪些应用?

  1. 动态代理是运行时动态生成代理类。
  2. 动态代理的应用有 Spring AOP数据查询、测试框架的后端 mock、rpc,Java注解对象获取等。

6. 怎么实现动态代理?

  1. JDK 原生动态代理和 cglib 动态代理。
  2. JDK 原生动态代理是基于接口实现的,而 cglib 是基于继承当前类的子类实现的。

7. Java反射机制的作用

  1. 在运行时判断任意一个对象所属的类
  2. 在运行时构造任意一个类的对象
  3. 在运行时判断任意一个类所具有的成员变量和方法
  4. 在运行时调用任意一个对象的方法

8. 如何使用Java的反射?

  1. 通过一个全限类名创建一个对象

    1. Class.forName(“全限类名”); 例如:com.mysql.jdbc.Driver Driver类已经被加载到 jvm中,并且完成了类的初始化工作就行了
    2. 类名.class; 获取Class<?> clz 对象
    3. 对象.getClass();
  2. 获取构造器对象,通过构造器new出一个对象
    1. Clazz.getConstructor([String.class]);
    2. Con.newInstance([参数]);
  3. 通过class对象创建一个实例对象(就相当与new类名()无参构造器)
    1. Cls.newInstance();
  4. 通过class对象获得一个属性对象
    1. Field c=cls.getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
    2. Field c=cls.getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的声明字段
  5. 通过class对象获得一个方法对象
    1. Cls.getMethod(“方法名”,class……parameaType);(只能获取公共的)
    2. Cls.getDeclareMethod(“方法名”);(获取任意修饰的方法,不能执行私有)
    3. M.setAccessible(true);(让私有的方法可以执行)
  6. 让方法执行
    1). Method.invoke(obj实例对象,obj可变参数);-----(是有返回值的)

Java反射常见面试题相关推荐

  1. Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3

    Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...

  2. java陷阱常见面试题_Java常见陷阱

    java陷阱常见面试题 总览 Java是一种极简主义的语言,具有比其他语言故意更少的功能,尽管如此,Java仍然具有产生奇怪效果的边缘情况,甚至具有令人惊讶的效果的一些常见情况也会使您轻而易举. 如果 ...

  3. Java基础常见面试题(一)

    Java基础常见面试题(一) 1. 为什么说 Java 语言"编译与解释并存"? 我们可以将高级编程语言按照程序的执行方式分为两种: 编译型 :编译型语言会通过编译器将源代码一次性 ...

  4. Java开发常见面试题详解(JVM)_2

    Java开发常见面试题详解(JVM)_2 JVM 问题 详解 JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots link 你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认 ...

  5. Java工程师常见面试题集锦

    Java工程师常见面试题集锦(一)互联网人必看!(附答案及视频教程,持续更新) 2019年01月02日 14:01:14 CSDNedu 阅读数:653 大牛也怕面试题,尤其是基础题,在面试中如果出现 ...

  6. Java多线程常见面试题及答案汇总1000道(春招+秋招+社招)

    Java多线程面试题以及答案整理[最新版]Java多线程高级面试题大全(2021版),发现网上很多Java多线程面试题都没有答案,所以花了很长时间搜集,本套Java多线程面试题大全,汇总了大量经典的J ...

  7. Java虚拟机常见面试题

    2019独角兽企业重金招聘Python工程师标准>>> 1.java引用的四种状态 强引用.软引用.弱引用.虚引用. 强引用 new一个Object存放在堆内存,然后用一个引用指向它 ...

  8. 合肥Java面试常考题_北大青鸟java 面试--常见面试题(中)

    上一文中,我们总结了java面试的基础,多线程,jvm的常见面试题,本文合肥北大青鸟合工大校区的袁老师继续介绍面试中网络.数据结构和算法.分布式理论和微服务的常见面试题. 一.网络 网络的话,主要集中 ...

  9. 北大java面试,北大青鸟java 面试--常见面试题(下)

    在之前的两篇文章中,我们已经提到了java面试中的常见问题,还有部分内容,合肥北大青鸟合工大校区的袁老师在本文也给出,希望对大家的面试过程有些帮助.这是我总结的最后一部分常见面试题:分别是数据库,基础 ...

  10. Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)

    总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 link 什么是可重入锁? link 谈谈LockSupport link 谈谈AQS link ...

最新文章

  1. 内联式css样式,直接写在现有的HTML标签中
  2. 工厂模式(Factory)(转)
  3. 浅析物流行业文档规范管理
  4. 2019诺贝尔生理学\医学奖率先颁出!英美3学者加冕,揭秘血与氧关系,抗击肿瘤和癌症...
  5. JavaScript中数组使用总结
  6. 室内空气流动原理图_家庭新风系统示意图 新风系统运行原理介绍
  7. TensorFlow MNIST LeNet 模型持久化
  8. SCAU_WeiShenWahle 之省赛任务
  9. java 配置tomcat_为tomcat配置java环境变量
  10. kubernetes 简介:调度器和调度算法((Affinity/Anti-Affinity, Taints and Tolerations, 自定义调度器 )
  11. 【bzoj2989】数列 KD-tree+旋转坐标系
  12. 安徽省计算机一级选择题题库,计算机等级考试一级选择题题库
  13. 教你阅读vue源码的正确姿势,看完就学废!
  14. Ron Patton之《软件测试》书籍(原书第2版)书籍
  15. 荆州水文水位查询_长江水位实时查询网(长江水位公告实时查询)
  16. oracle中distance用法,distance的用法总结大全
  17. 2018 东北四省赛
  18. 西游记中文殊菩萨的坐骑青狮两次下界为妖
  19. 数据库插入数据时报错 1364 - Field ‘house_name‘ doesn‘t have a default value
  20. 弗吉尼亚-伍尔夫:在优雅和疯癫之间游走

热门文章

  1. ncbi查找目的基因序列_献给初学者:如何使用 NCBI 查找基因序列、mRNA、Promoter...
  2. 第七章 与Web集成——《跟我学Shiro》[张开涛]
  3. 计算机丢失d3d10,“怎样解决d3dx10_42.dll丢失造成的游戏打不开”的解决方案
  4. 安装Oracle驱动ojdbc8到本地maven仓库
  5. astar插件下载 就行_2020年视频编辑PR插件齐全了!包含了抠图调色磨皮降噪~
  6. python 文本替换 速度_python 实现批量替换文本中的某部分内容
  7. 游戏鼠标的dpi测试软件,有什么软件可以测试鼠标的dpi或着说cpi – 手机爱问
  8. 用计算机处理文字,计算机文字 计算机文字与信息处理
  9. 萤火虫算法_萤火虫算法(一)
  10. FreeRTOS 教程指南 学习笔记 第六章 中断管理(二)