前言:
当我们在类加载的时候,除了把.class文件加载到内存,会把各个类存到各个类模板(class类型)对象
上,相同的类只有一个类模板对象。
连接:把类的二进制数据合并到JRE中

反射
运行时探究和使用编译时未知的类
原理:JVM在加载一个类的时候,会把该类的信息存放到一个class对象中,该对象又称为类模板对象,
JVM可以通过检索该对象,得到这个类所拥有的各种信息(名字、所在包、父类、实现接口……)JDK提供
API,允许程序员获取到类的class对象,导致程序员也可以检索到这个类的这些信息,即便这个类不是这个
程序/程序员所实现的。

操作三步骤:获取到class对象、探究类的信息、使用探究到的类的信息

一、获取class对象
1、通过类型名获取class对象(类、接口、数组、基本数据类型、返回类型……)
Class stuClass=StudentBean.class;
Class intClass = Integer.TYPE; JDK1.5之前使用包装类来获取基本数据类型对象
Class intClass = int.class; JDK1.5之后可以直接获取。
所有的类型都可以获取到class对象,没有动态性,在编写代码时已经知道类型名。

2、通过实例对象获取class对象
StudentBean stu = new StudentBean();
Class stuCladd = stu.getClass();
只有能产生实例化对象的类型可以通过该方法获取到class对象,包括:非抽象类、数组类型
因为在编写代码时已经得到实例对象,不具有动态性。

3、通过类型名的字符串形式获取class对象
Class stuClass=Class.forName("类全名");
类和接口可以通过该方式获取class对象,细节:必须填写全类名、先主动完成加载,然后返回class对象
这是唯一一种动态性的体现,以后会大量使用,表现在各种框架中抒写配置文件。

二、通过class对象探究类的信息
1、探究属性——field
探究所有公共属性——stuClass.getFields();探究所有公共的属性、包括从父类继承而来的
探究所有已声明属性——stuClass.getDeclaredFields();探究所有本类声明的属性,不包括从父类继承的
探究指定公共属性——stuClass.getFields("");探究指定公共属性,包括父类的
探究指定声明属性——stuClass.getDeclaredField("");探究指定本类声明的属性,不包括父类的
2、探究构造——constructor
同上
3、探究方法——method
同上
三、使用class对象探究的信息
1、探究到constructor,就可以产生实例对象
newInstance(参数,参数)
2、探究到method,就可以调用方法
invoke(对象,参数)
3、探究到field,就可以赋值、取值
set(对象,参数) get(对象)
在使用探究到的信息,有一些细节:
1、第三种产生对象的方式
2、在反射产生实例对象时,可以直接调用class对象的newInstace方法获取到实例对象,但它只能
调用公共无参构造,这就是JavaBean的第一规范的原因
3、私有属性在反射中操作,都是调用它的公共的set、get方法,这就是JavaBean的第二规范的原因——常用
4、反射是Java的底层实现,其实是可以破坏封装直接操作任意访问修饰符的构造、方法、属性
setAccessible(true) 设置可访为true(构造、属性、方法)——慎用

java的灵魂——反射的更多相关文章

  1. Java基础之一反射

    反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))   一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...

  2. java基础之反射---重要

    java反射: 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)):   1:获取Class字节码文件对象的三种方式: /** ...

  3. Java基础之—反射

    反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))   一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...

  4. Java学习之反射篇

    Java学习之反射篇 0x00 前言 今天简单来记录一下,反射与注解的一些东西,反射这个机制对于后面的java反序列化漏洞研究和代码审计也是比较重要. 0x01 反射机制概述 Java反射是Java非 ...

  5. Java中的反射和注解

    前言 在Java中,反射机制和注解机制一直是一个很重要的概念,那么他们其中的原理是怎么样呢,我们不仅仅需要会使用,更要知其然而之所以然. 目录 反射机制 反射如何使用 注解定义 注解机制原理 注解如何 ...

  6. java中的反射机制在Android开发中的用处

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

  7. Java里面,反射父类里面数字类型字段,怎么set值

    Java里面,反射父类里面数字类型字段,怎么set值,我的做法是这样: /** * TODO 直接设置对象属性值, 忽略private/protected 修饰符, 也不经过setter * @aut ...

  8. java 27 - 2 反射之 反射的概述以及获取Class文件对象的方式

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

  9. 黑马程序员——【Java高新技术】——反射机制

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.Java反射机制:是指“在运行状态中”,对于任意一个类,都能够知道这个类中的所有属性和方法: ...

随机推荐

  1. 20172321 20172333 2017-2018 暑假作业APP

    20172321 20172333 2017-2018 暑假作业APP 项目介绍 项目成员 吴恒佚 20172321 严域俊 20172333 项目简介 从理论上来说,这是一个贪吃蛇游戏. <贪 ...

  2. web14 validation.xml配置 登录验证文件配置

    电影网站:www.aikan66.com 项目网站:www.aikan66.com 游戏网站:www.aikan66.com 图片网站:www.aikan66.com 书籍网站:www.aikan66 ...

  3. git 的认识

    简单说,三个概念:远程仓库.本地仓库.本地工作目录.clone是从远程仓库上down下本地仓库+工作目录:本地仓库就是工作目录里.git这个目录commit是把工作目录的修改提交给本地仓库pull把远 ...

  4. 监控MySQL服务器主从同步异常的脚本,出现异常,报警

    监控主从复制的指标有: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0 (从服务器与主服务器延时多少秒) # ...

  5. JPEG标准推荐的亮度、色度DC、AC Huffman编码表

    JPEG 标准推荐的亮度.色度DC.AC Huffman 编码表 博主在完成数字图像处理大作业时利用搜索引擎查找了很久完整的四张Huffman 编码表(亮度AC Huffman编码表.亮度DC Huf ...

  6. Robot Framework 教程 (4) - 自定义Library

    RobotFrame Work为我们提供了包括OS.Android.XML.FTP.HTTP.DataBase.Appium.AutoIt.Selenium.Watir等大量的库.在使用过程中,除这些 ...

  7. Java 使用 Dbutils 工具类库 操作mysql

    Dbutils 官网http://commons.apache.org/proper/commons-dbutils/ 结合我个人写的JDBCUtils 写的 Dbutils 的使用demo . JD ...

  8. ACM数论之旅1---素数(万事开头难(>_<))

    前言:好多学ACM的人都在问我数论的知识(其实我本人分不清数学和数论有什么区别,反正以后有关数学的知识我都扔进数论分类里面好了) 于是我就准备写一个长篇集,把我知道的数论知识和ACM模板都发上来(而且 ...

  9. 转载manifold learning一篇

    我恨自己不干活儿,不过也没辙. 早晚要学习流形的,今天先转一篇文章,以后找不到就尿了. 我真羡慕数学系的人,╮(╯▽╰)╭. 发信人: Kordan (K&M), 信区: AI标  题: do ...

  10. VS开发环境美化

    1.字体,推荐Deja Vu Sans Mono 2.背景色为护眼绿色, 工具-->选项-->环境,字体和颜色,字体改为Deja Vu Sans Mono,项背景 改为