Java的反射机制也会是面试中较常问到的点。建议可以从基本定义,语法和实际应用3方面作答。

1、基本定义

反射机制是在运行状态中,

对于任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意一个方法和属性;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2、基本语法

1)获取Class对象

一般有3种形式:

Class<?>  class1 = Class.forName("全限定类名");

Class<?> class2 = new TestReflect().getClass();

Class<?> class3 = TestReflect.class;

System.out.println("类名称   " + class1.getName());//将打印出全限定类名(包名.类名)

2)实例化一个类的对象

方法一:newInstance

Class<A>  class1 = Class.forName("全限定类名");

A a = class1.newInstance();

//调用a的set方法

方法二:构造函数

Constructor<A> cons[] = class1.getConstructors();//该类的全部构造函数

A a = (A) cons[0].newInstance();//无参

a = (A) cons[1].newInstance("value1", "value2");//带参

3)获取父类和接口(单继承多实现)

父类:

Class<A>  clazz = Class.forName("全限定类名");

Class<?> parentClass = clazz.getSuperclass();

System.out.println("clazz的父类为:" + parentClass.getName());

接口:

Class<?> intes[] = clazz.getInterfaces();//该类所有接口

for (int i = 0; i < intes.length; i++) {

System.out.println((i + 1) + ":" + intes[i].getName());

}

4)获取一个类全部属性:

Class<A>  clazz = Class.forName("全限定类名");

Field[] field = clazz.getDeclaredFields();

for (int i = 0; i < field.length; i++) {

// 权限修饰符

int mo = field[i].getModifiers();

String priv = Modifier.toString(mo);

// 属性类型

Class<?> type = field[i].getType();

System.out.println(priv + " " + type.getName() + " " + field[i].getName() + ";");

}

5)获取一个类全部方法:

Class<A>  clazz = Class.forName("全限定类名");

Method method[] = clazz.getMethods();

for (int i = 0; i < method.length; ++i) {

Class<?> returnType = method[i].getReturnType();//返回值类型

Class<?> para[] = method[i].getParameterTypes();//参数类型

String Modify = Modifier.toString(method[i].getModifiers());//修饰符

}

6)调用某个类的方法

Class<A>  clazz = Class.forName("全限定类名");

Method method = clazz.getMethod("方法名", {参数类型1.class,参数类型2.class,……});

method.invoke(clazz.newInstance(), {参数值1,参数值2,……});

3、反射机制的应用举例:结合工厂模式

interface Animal {public abstract void eatFood();
}class Monkey implements Animal {@Overridepublic void eatFood() {System.out.println("monkey eat peach ...");}}class Panda implements Animal {@Overridepublic void eatFood() {System.out.println("Panda eat bamboo ...");}}class Factory {public static Animal getInstance(String ClassName) {Animal animal = null;try {animal = (Animal) Class.forName(ClassName).newInstance();} catch (Exception e) {e.printStackTrace();}return animal;}
}

我们来调用一下~

public static void main(String[] args) {Animal animal = Factory.getInstance("com.nineclient.Panda");if(animal != null) {animal.eatFood();}}

运行结果:

Panda eat bamboo ...

从以上3个点答反射机制,基本上就行了~~

面试系列(三):Java反射机制相关推荐

  1. 【javase-improved】第二篇:Java反射机制

    文章目录 一.JAVA反射机制的概述 (1) 基于代码对于反射的理解 (1)通过反射访问类(以Person为例)内部成员 二.动态语言和静态语言的区分 三.Java 反射机制功能研究 四.Class类 ...

  2. 反射 字段_详解面试中常考的 Java 反射机制

    反射(Reflection) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性和方法. 反射是一项高级 ...

  3. Java反射机制大神必学系列之 ,高级与低级的差别在哪里?

    Java反射机制大神必学系列之 ,高级与低级的差别在哪里? java学习爱好者 2019-05-20 19:08 前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来 ...

  4. 【面试】Java 反射机制(常见面试题)

    文章目录 前言 一.反射是什么? 二.为什么要有反射 三.反射 API 3.1 获取 Class 对象的三种方式 3.2 获取成员变量 3.3 获取构造方法 3.4.获取非构造方法 四.实践 五.常见 ...

  5. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...

    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn   发布于:2012-09-15 ...

  6. Java基础与提高干货系列——Java反射机制

    前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来.那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现. 正文 Java反射机制定义 Java反射机制 ...

  7. java反射机制深入详解_Java基础与提高干货系列——Java反射机制

    前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来.那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现. 正文 Java反射机制定义 Java反射机制 ...

  8. 秒懂系列,深入理解Java反射机制

    文章目录 深入理解Java反射机制 一.Java反射概述 二.Java创建对象思想传递 三.类对象 3.1 类对象和类的对象 3.2 三种获取类对象的方法 四.Class对象的常用方法 4.1 获取成 ...

  9. java反射机制(三)---java的反射和代理实现IOC模式 模拟spring

    IOC(Inverse of Control)可翻译为"控制反转",但大多数人都习惯将它称为"依赖注入".在Spring中,通过IOC可以将实现类.参数信息等配 ...

  10. java中h5是什么_[ 面试系列 ] - 三:H5 是什么?

    系列文章 H5 和 HTML5 我想可能很多同学都和曾经的我一样,认为 H5 是 HTML5 的简写,所谓 H5 开发,就是遵循 HTML5 标准的前端开发而已.但事实并非如此,尽管 H5 这个词最早 ...

最新文章

  1. Spring Boot Serverless 实战 | Serverless 应用的监控与调试
  2. centos7 搭建vsftpd服务并锁定用户的家目录
  3. python中库是什么意思_python的库是什么意思
  4. zookeeper在windows下设置为服务启动(不需双击zkServer.cmd)
  5. 如何一本正经地写出别人无法维护的代码?
  6. Google Maps 补丁绕过、得双倍奖金这么简单?我陷入了自我怀疑
  7. caffe中的layers
  8. 清华谭浩强编著的c语言程序设计教程,清华大学谭浩强C语言程序设计教程第3版 (9).doc...
  9. itext 生成pdf、pdf模板生成pdf
  10. b700a怎么连蓝牙_233621蓝牙21无线音箱B700A小测
  11. 【MATLAB】MATLAB 可视化之曲面图与网格图
  12. Unity3D导入图片资源
  13. 使用Mixamo_Converter重新定义根骨骼导入UE4
  14. 33-Figma-数据采集器使用方式-后裔采集器
  15. 仓库管理系统-新名词(经济订货批量 、订货周期、订货提前期)
  16. 通过Python终端输入命令对NAO机器人进行实时控制
  17. 使用NuGet管理C++项目的依赖库
  18. python关于疫情新手项目_快来看看我趁着疫情学的新技能(分享python学习途中的优质资源)...
  19. 【5G核心网】 Handover procedures Execution phase切换流程执行阶段
  20. android flv格式的视频文件,android-如何运行mkv,flv,avi格式的视频文件?

热门文章

  1. 草根站长的创业路:说说这两年的创业经历
  2. 踩坑记录——ProxyServer删除问题经验分享
  3. mysql数据库异地备份
  4. python爬虫——当当网商品比价爬虫
  5. WebX框架解析及使用教程
  6. Aster及其它遥感数据下载地址
  7. Android 4.2蓝牙介绍
  8. 科学期刊中关于计算机视觉,计算机视觉相关专业JCR1区期刊
  9. 软件测试人员必备的60个测试工具清单,果断收藏了!
  10. Atiflash显卡BIOS、Nvflsh显卡BIOS、显卡BIOS刷新与超频详细说明教程--转载+BYZ修正...