参考:
(1)http://blog.csdn.net/liujiahan629629/article/details/18013523
(2)https://www.zhihu.com/question/24304289/answer/150310001  作者:meepo
作为小白,结合各位大神的回答,吐血总结:

JAVA反射机制:

(1)在运行状态中
(2)对于任意一个类,都能够知道这个类的所有属性和方法;
(3)对于任意一个对象(类的一个实例),都能够调用(访问,检测和修改)这个类的任意一个方法和属性;

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

反射机制的作用:

1.  反编译:.class-->.java

2.  通过反射机制访问java对象的属性,方法,构造方法等;

实例:

一、反射机制获取类有三种方法
package First;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier; public class Test { private int a;
private String id; public static void main(String[] args) throws Exception {
//
Class c = Class.forName("First.Test");
System.out.println(c); //
Class c2 = Test.class;
System.out.println(c2); //
Test c3 = new Test();
Class c4 = c3.getClass();
System.out.println(c4); }
}

 输出如下:
class First.Test
class First.Test
class First.Test

  

二、创建对象:
Class c = Class.forName("First.Test");
/*
* 创建此Class 对象所表示的类的一个新实例
* 调用了Employee的无参数构造方法.
*/
Object o = c.newInstance();

由此理解:为什么一个简单Java类必须存在一个无参构造方法

三、获取属性
(1)获取指定属性
package First;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier; public class Test { private String id; public static void main(String[] args) throws Exception { //获取类 包名.类名
Class c = Class.forName("First.Test"); //获取Test类的id属性
Field fs = c.getDeclaredField("id"); //实例化这个类赋给o
Object o = c.newInstance(); //打破封装,使能修改
fs.setAccessible(true); //运行状态时,给o对象的id属性赋值"110"
fs.set(o, "110"); //set System.out.println(fs.get(o));
}
}


输出如下:
110

  

(2)获取所有属性

package First;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier; public class Test { public static void main(String[] args) throws Exception {
//获取Integer类
Class c = Class.forName("java.lang.Integer"); //获取所有的属性
Field[] fs = c.getDeclaredFields(); //定义可变长的字符串,用来存储属性
StringBuffer sb = new StringBuffer(); //通过追加的方法,将每个属性拼接到此字符串中
sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n"); //遍历里边的每一个属性
for(Field field:fs){
sb.append("\t");//空格
sb.append(Modifier.toString(field.getModifiers())+" ");//获得属性的修饰符,例如public,static等等
sb.append(field.getType().getSimpleName() + " ");//属性的类型的名字
sb.append(field.getName()+";\n");//属性的名字+回车
} sb.append("}"); System.out.println(sb);
}
}

输出如下:
public final class Integer{
public static final int MIN_VALUE;
public static final int MAX_VALUE;
public static final Class TYPE;
static final char[] digits;
static final char[] DigitTens;
static final char[] DigitOnes;
static final int[] sizeTable;
private final int value;
public static final int SIZE;
public static final int BYTES;
private static final long serialVersionUID;
}

  

四、Spring框架怎么用反射的?

(1) 首先准备两个很简单的业务类
(2) 非反射方式切换不同的业务方法调用
当需要从第一个业务方法切换到第二个业务方法的时候,使用非反射方式,必须修改代码,并且重新编译运行,才可以达到效果 (3)反射方式

使用反射方式,首先准备一个配置文件,就叫做spring.txt吧, 放在src目录下。 里面存放的是类的名称,和要调用的方法名。
在测试类Test中,首先取出类名称和方法名,然后通过反射去调用这个方法。

当需要从调用第一个业务方法,切换到调用第二个业务方法的时候,不需要修改一行代码,也不需要重新编译,只需要修改配置文件spring.txt,再运行即可。

配置文件里有class(类)和method(方法)

下面实现了反射:

使用这个例子,可以较好得理解反射的一个应用场景。

这也是Spring框架的最基本的原理,只是它做的更丰富,安全,健壮。

(我把大神的回答全COPY过来,是为了更好的理解)

 
 
 反射:
比如:连接数据库的信息,写在配置文件,可以只修改配置文件,不修改代码,就能方便的更换连接的数据库:SqlServer、MySQL、Oracle等
这也是通过反射,获取数据库配置文件的各个字段信息
 
 
 


Java反射(一眼就看会)的更多相关文章

  1. 文末送书四本 | 这篇Java反射机制太经典!不看后悔!

    先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员. 价值:Java技能,面试经验指导,简历优化,职场规划指导,技能提升方法,讲不完的职场故事,个人成长经 ...

  2. Java反射机制的浅显理解(这篇文章还没写好,留个草稿给自己看的)

    目前只是有一个大概的理解,先把自己感觉容易立即的概念放这里,等以后结合实际工作理解深刻了再来补充. 一.什么是Java反射机制?(多种定义) 1. JAVA反射机制是在运行状态中,对于任意一个类,都能 ...

  3. 超详细的java反射教程

    看技术博客时,看到关于java反射的博文,写的非常好.猛击下面的地址,开始java反射之旅 中文翻译地址:http://ifeve.com/java-reflection/ 英文原版地址:http:/ ...

  4. java 反射机制

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

  5. java反射机制深入详解

    java反射机制深入详解  转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...

  6. java 反射的应用 以及通过反射 用到的工厂模式

    java反射详解 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案 ...

  7. JAVA反射实践

    Java反射机制在我的理解当中就是下面几点: 1. 对一个给定的类名(以字符串形式提供)能动态构建一个对象实例 2. 对于任意一个类,都能够知道这个类的所有属性和方法     3. 对于任意一个对象, ...

  8. [转]java反射机制

    原文地址:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html 一.什么是反射机制         简单的来说,反射机制指的是程序在运 ...

  9. Java反射与动态代理

    Java反射机制可以动态地获取类的结构,动态地调用对象的方法,是java语言一个动态化的机制.java动态代理可以在不改变被调用对象源码的前提下,在被调用方法前后增加自己的操作,极大地降低了模块之间的 ...

随机推荐

  1. legend2---开发日志4(常用的链接传值方式有哪些)

    legend2---开发日志4(常用的链接传值方式有哪些) 一.总结 一句话总结:常用的其实就是get和post,不过有具体细分 a标签 post表单 js方式拼接url 1.js正则尽量少匹配的符号 ...

  2. android 趟坑记

    又是一个伤感的故事,但阿古好像已经习以为常了. 大半年的辛苦又泡汤了,故事是这样. 帝都某高端小区,封闭局域网,做一个可视对讲+门禁的APP,之前那一版因为使用了商业代码,又不想花钱,于是找阿古换一个 ...

  3. 彻底搞懂 CPU 中的内存结构

    https://www.cnblogs.com/YJK923/p/10302180.html

  4. C#复习题(概念) --C#学习笔记

    第一章 1.公共语言架构(CLI)由哪几部分组成? (1)通用类型系统:定义了一套类型系统的框架,规定了数据类型的声明.使用和管理方法. (2)公共语言规范:一组语言规则的集合 (3)通用中间语言:一 ...

  5. LeetCode--290--单词模式

    问题描述: 给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式. 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之 ...

  6. sgu 169 Numbers

    题意:n和n+1同时被数位乘积整除的k位数个数. 假如a是237,b是238.由于个位以前的数一样.那么对于2,如果a%2==0,b%2就!=0,如果a%3==0,b%3就!=0.因此个位以前的数只能 ...

  7. gcc请不要优化

    gdb跟踪剖发现free_area_init中一段优化错了,如下:    memset(mem_map, 0, start_mem - (unsigned long) mem_map);    do ...

  8. Android Studio 一直卡在building解决办法

    1.随便找一个你能运行的as项目 2.打开gradle-wrapper.properties,文件目录:项目/gradle/wrapper/gradle-wrapper.properties 3.复制 ...

  9. drf 生成接口文档

    REST framework可以自动帮助我们生成接口文档.接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 REST framewrok生成接口文档 ...

  10. 网络管理命令ping和arping

    ping ping        向目标主机发送icmp请求包 常用来测试当前主机与目标主机网络连接状况 常见选项 -c              设置发包的个数 -s               设 ...