014 Java的反射机制
作者:nnngu
GitHub:https://github.com/nnngu
博客园:http://www.cnblogs.com/nnngu
简书:https://www.jianshu.com/users/1df20d76ea5c
知乎:https://www.zhihu.com/people/nnngu/posts
这篇文章要总结java的反射机制,将从以下几点进行总结:
一、什么是反射机制
二、哪里用到反射机制
三、反射机制的优点与缺点
四、利用反射机制能获得什么信息
五、反射创建对象的三种方式
一、什么是反射机制
简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在 java 中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。
二、哪里用到反射机制
有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,比如在学jdbc时用过这一行代码, Class.forName("com.mysql.jdbc.Driver.class").newInstance();
但是那时候只知道这行代码是生成驱动对象实例,并不知道它的具体含义。学习了反射机制之后才知道,原来这就是反射,现在很多开源框架都用到反射机制,spring、hibernate、struts都是用反射机制实现的。
三、反射机制的优点与缺点
为什么要用反射机制?直接创建对象不就可以了吗?这就涉及到了动态与静态的概念。
静态编译:在编译时确定类型,绑定对象。
动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,由此降低类之间的藕合性。
一句话,反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中,它的灵活性就表现的十分明显。
比如,一个大型的软件,不可能一次就把它设计的很完美,当这个程序编译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能的更新,而采用反射机制的话,它就可以不用卸载,只需要在运行时才动态的创建和编译,就可以实现该功能。
它的缺点是对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。
四、利用反射机制能获得什么信息
一句话,类中有什么信息,它就可以获得什么信息,不过前提是得知道类的名字,要不然就没有后文了。
首先得根据传入的类的全名来创建Class对象。Class c=Class.forName("className");
注明:className必须为全名,也就是要包含包名,比如,cn.netjava.pojo.UserInfo;
Object obj=c.newInstance(); // 创建对象的实例
OK,有了对象就什么都好办了,想要什么信息就有什么信息了。
获得构造器的方法
Constructor getConstructor(Class[] params) // 根据指定参数获得public构造器
Constructor[] getConstructors() // 获得public的所有构造器
Constructor getDeclaredConstructor(Class[] params) // 根据指定参数获得public和非public的构造器
Constructor[] getDeclaredConstructors() // 获得public的所有构造器
获得方法的方法
Method getMethod(String name, Class[] params) // 根据方法名,参数类型获得方法
Method[] getMethods() // 获得所有的public方法
Method getDeclaredMethod(String name, Class[] params) // 根据方法名和参数类型,获得public和非public的方法
Method[] getDeclaredMethods() // 获得所以的public和非public方法
获得类中属性的方法
Field getField(String name) // 根据变量名得到相应的public变量
Field[] getFields() // 获得类中所以public的方法
Field getDeclaredField(String name) // 根据方法名获得public和非public变量
Field[] getDeclaredFields() // 获得类中所有的public和非public方法
常用的就这些,知道这些,其他的都好办……
五、反射创建对象的三种方式
// 创建对象的方式一:( 对象.getClass() )
Class class1 = p1.getClass();
// 创建对象的方式二:( 类.class 需要一个明确的类 )
Class class2 = Person.class;
// 创建对象的方式三:( Class.forName() 传入时需要以字符串的方式传入 )
Class class3 = Class.forName("com.Person"); // 异常ClassNotFoundException
014 Java的反射机制的更多相关文章
- Java 类反射机制分析
Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...
- java的反射机制
一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
一.Java的反射机制 每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图: 其中
- java笔记--反射机制之基础总结与详解
一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象 ...
- JAVA的反射机制学习笔记(二)
上次写JAVA的反射机制学习笔记(一)的时候,还是7月22号,这些天就瞎忙活了.自己的步伐全然被打乱了~不能继续被动下去.得又一次找到自己的节奏. 4.获取类的Constructor 通过反射机制得到 ...
- java笔录---反射机制(1)
引言 为了方便记忆java的反射机制,在这里仔细的总结了一下.主要是怕以后忘记了,这样也方便回忆.因为最近利用空余时间深入的了解spring和Mybatis框架, 像spring中核心模块IO ...
- Java高新技术 反射机制
Java高新技术 反射机制 知识概要: (1)反射的基石 (2)反射 (3)Constructor类 (4)Field类 (5)Method类 (6)用反射方 ...
- java的反射机制浅谈(转)
原文链接:java的反射机制浅谈 一.java的反射机制浅谈 1.何谓反射机制 根据网文,java中的反射机制可以如此定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性 ...
- 【转】Java利用反射机制访问私有化构造器
Java利用反射机制访问私有化构造器 博客分类: java 我们都知道,当一个类的构造方法被设为私有的时候(private),在其他类中是无法用new来实例化一个对象的. 但是有一种方法可以把带有 ...
随机推荐
- 【总结】浅谈ref与out
ref——仅仅是一个地址 (1)当一个方法或函数在使用ref作为参数时,在方法中或函数中对ref参数所做的更改都将反映在该变量中. (2)如果要使用ref参数,则必须将参数作为ref显示传递到方法中. ...
- svn树冲突的解决方法
树冲突 就是开发人员移动.重命名.删除一个文件或文件夹,而另一名开发人员也对它们进行了移动.重命名.删除或者仅仅是修改时就会发生树冲突.有很多种不同的情形可以导致树冲突,而且不同的情形需要不同的步骤来 ...
- ios有些机型input和fixed导致的页面错位问题
_fixIosInputH () { let [timeout, beforeTop] = [null, 0] $('input, textarea').on('focus', () => { ...
- NIKTO介绍及使用方法
1. NIKTO:perl语言开发的开源WEB安全扫描器:识别网站软件版本:搜索存在安全隐患的文件:检查服务器配置漏洞:检查WEB Application层面的安全隐患:避免404误判(原因:很 ...
- windows的滚动条使用
背景 在毕业快一年的工作时间中,对windows编程的某些特性并不够熟悉,例如滚动条的使用.在一次需求中需要用到滚动条,在开发过程中走了不少弯路,因此需要做一些笔记总结一下学习到的内容. 先推荐几个写 ...
- 机器学习:数据预处理之独热编码(One-Hot)
前言 ———————————————————————————————————————— 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等.这些特征值并不是连续的 ...
- 局域网传输-LED灯搭建局域网:数据传输可达每秒3Gb
一 : LED灯搭建局域网:数据传输可达每秒3Gb 我们之前介绍了利用可见光通讯技术,通过LED灯光实现精准室内定位的例子.实际上,这种灯泡和技术的用途不止于此,比如,它还能进行无线网络传输. 最近, ...
- BugPhobia准备篇章:Beta阶段前后端接口文档
0x00:序言 Two strangers fell in love, Only one knows it wasn’t by chance. To the searching tags, you m ...
- [buaa-SE-2017]个人作业-week3
个人作业-week3:案例分析 分析产品:Bing词典 Part1:调研&评测 1.软件评测和Bug汇报 这次我选择Bing词典的原因是在于,首先我使用过的词典软件较多,平台涵盖PC端.网站. ...
- 面向对象程序设计第三次作业-Calculator
题目: 最终代码: Scan.h: Print.h: Calaulator.cpp: 解题过程 看到题目后,在查询之后明白了这是多文件的题目,然后通过翁凯老师的视频讲解知道了.h和.cpp文件的区别和 ...