- 浏览: 6304933 次
- 性别:
- 来自: 一片神奇的土地
文章分类
- 全部博客 (745)
- JQuery (25)
- JS (33)
- 数据库 (59)
- Java基础 (56)
- JSON (8)
- XML (8)
- ireport (7)
- 设计模式 (10)
- 心情 (14)
- freemarker (1)
- 问题 (15)
- powerdesigner (2)
- CSS (15)
- DWR (4)
- tomcat (16)
- Hibernate (12)
- Oracle (7)
- Struts (7)
- Spring (34)
- JSP (23)
- 需学习 (64)
- 工具类库 (63)
- Maven (14)
- 笔试题 (34)
- 源码学习 (31)
- 多线程 (39)
- Android (32)
- 缓存 (20)
- SpringMVC (14)
- jQueryEasyUi (12)
- webservice-RPC (13)
- ant (1)
- ASP.NET (10)
- 正则表达式 (3)
- Linux (15)
- JBoss (1)
- EJB (3)
- UML (2)
- JMS (3)
- Flex (8)
- JSTL (2)
- 批处理 (5)
- JVM (16)
- 【工具】 (16)
- 数据结构 (29)
- HTTP/TCP/Socket (18)
- 微信 (1)
- tomcat源码学习 (15)
- Python (30)
- 主机 (2)
- 设计与架构 (19)
- thrift-RPC (2)
- nginx (6)
- 微信小程序 (0)
- 分布式+集群 (12)
- IO (1)
- 消息队列 (4)
- 存储过程 (8)
- redis (9)
- zookeeper (5)
- 海量数据 (5)
最新评论
-
360pluse:
技术更新,战术升级!Python爬虫案例实战从零开始一站通网盘 ...
Python爬虫实战:Scrapy豆瓣电影爬取 -
18335864773:
推荐用 pageoffice 组件生成 word 文件。
JAVA生成WORD工具类 -
jjhe369:
LISTD_ONE 写道起始地址为163.135.0.1 结束 ...
IP地址与CIDR -
baojunhu99:
private final int POOL_SIZE = 5 ...
使用CompletionService获取多线程返回值 -
LovingBaby:
胡说,javascript 运行时是单线程的,event lo ...
Ajax请求是否可以实现同步
Reflection 是 Java 程序开发语言的重要特征之一,是学习Java必须知识点。
Java反射机制主要提供了以下功能:在运行时构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。反射最大的应用就是框架
Java.lang.Class和Java.lang.reflect包下的API,用于表示或者处理当前JVM中的类,接口和对象。
Java反射的主要功能:
确定一个对象的类
取出类的modifiers,数据成员,方法,构造器,和超类.
找出某个接口里定义的常量和方法说明.
创建一个类实例,这个实例在运行时刻才有名字(运行时间才生成的对象).
取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做到.
在运行时刻调用动态对象的方法.
创建数组,数组大小和类型在运行时刻才确定,也能更改数组成员的值.
Class类是Java反射的基础,Class类表示正在运行的java应用程序中的类和接口。Class只有私有的构造函数。Class类在加载类时由Java虚拟机以及调用类加载器中的 defineClass方法自动创建的。只在内存中存在一份加载类的Class类。
三种方式得到某个Java类的Class类,以java.lang.String为例:
String s = "aaa"; Class cls1 = s.getClass(); Class cls2 = String.class; Class cls3 = Class.forName("java.lang.String"); if (cls1 == cls2) { System.out.println("cls1 == cls2"); } if (cls2 == cls3) { System.out.println("cls2 == cls3"); }
为什么他们三个会==呢?因为他们描述的都是同一个类java.lang.String类。
Class类还有很多方法,配合java.lang.reflect包下的一些API可以实现更多的功能。
一个javabean
package org.legend.reflect; public class UserInfo { private String userName; private Integer age; public String school; public UserInfo() { } public UserInfo(String name, Integer age, String shool) { this.userName = name; this.age = age; this.school = shool; } public UserInfo(String name, Integer age) { this.userName = name; this.age = age; } public String getInfo(String n, Integer i) { return "success" + n + i; } public void getMyInfo(String mName, String mBirth, Integer age) { System.out.println("我是一个来自" + mBirth + "的名叫:" + mName + "的" + age + "岁的选手"); } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
一个操作类:
package org.legend.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; /** * 反射操作类 */ public class GetMyInfo { public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Class mclass = Class.forName("org.legend.reflect.UserInfo"); System.out.println("------------输出类名-----------------------"); System.out.println(mclass.getName()); System.out.println(mclass.getSimpleName()); //基础类的简称 //获取属性(字段) System.out.println("------------输出所有属性--------------------"); Field[] fileds=mclass.getDeclaredFields(); //得到所有的字段,包括公共,保护,默认(包)和私有变量,但不包括继承的字段。 //Field[] fileds = mclass.getFields(); //得到所有的公共字段。 for(Field field:fileds) { String fieldName = field.getName(); //属性名称 int fieldFangWen = field.getModifiers(); //属性访问权限修饰符 Class fieldType = field.getType(); //属性类型 System.out.println(Modifier.toString(fieldFangWen)+" "+fieldType.getSimpleName()+" "+fieldName); } //获取方法 System.out.println("------------输出所有方法--------------------"); Method [] methods=mclass.getDeclaredMethods(); //Method[] medthods = mclass.getMethods(); for(Method method:methods) { String methodName = method.getName(); //方法名称 int methodFangWen = method.getModifiers(); //访问修饰符 Class methodRetrunType = method.getReturnType();//返回类型 Class [] methodParameter = method.getParameterTypes();//方法的参数列表 System.out.print(Modifier.toString(methodFangWen)+" "+methodRetrunType.getSimpleName()+" "+methodName+"("); for(int k=0;k<methodParameter.length;k++) { String parameterName=methodParameter[k].getSimpleName(); if(k!=methodParameter.length-1) { System.out.print(parameterName+" arg"+k+","); } else System.out.print(parameterName+" arg"+k); } System.out.println(");"); } //获取构造 System.out.println("------------输出所有构造器--------------------"); Constructor[]constructors = mclass.getConstructors(); for(Constructor constructor:constructors) { String constructorName = constructor.getName(); Class[] constructorParameter = constructor.getParameterTypes(); System.out.print(mclass.getSimpleName()+" "+constructorName.substring(constructorName.lastIndexOf(".")+1, constructorName.length())+"("); for(int h=0;h<constructorParameter.length;h++) { String parameterName = constructorParameter[h].getSimpleName(); if(h!=constructorParameter.length-1) System.out.print(parameterName+" arg"+h+","); else System.out.print(parameterName+" arg"+h); } System.out.println(");"); } //如何执行指定的方法 System.out.println("------------反射执行方法--------------------"); String name ="getMyInfo"; Class[] parameterTypes = new Class[3]; parameterTypes[0]= String.class; parameterTypes[1]= String.class; parameterTypes[2]= Integer.class; Method me = mclass.getDeclaredMethod(name, parameterTypes); Object obj = mclass.newInstance(); Object[] arg = new Object[3]; arg[0]="范晶晶"; arg[1]="AAA风景区"; arg[2]=new Integer(18); me.invoke(obj, arg); } }
反射的应用很多,很多框架都有用到
spring 的 ioc/di 也是反射....
javaBean和jsp之间调用也是反射....
struts的 FormBean 和页面之间...也是通过反射调用....
JDBC 的 classForName()也是反射.....
hibernate的 find(Class clazz) 也是反射....
反射还有一个不得不说的问题,就是性能问题,大量使用反射系统性能大打折扣。怎么使用使你的系统达到最优就看你系统架构和综合使用问题啦,这里就不多说了。。。
http://www.4ucode.com/Study/Topic/630405
发表评论
-
拦截器和过滤器的区别
2019-06-27 10:46 6998【Spring的拦截器】于【Servlet的Filter】有 ... -
高并发下的数据结构List/Set/Map
2019-03-26 14:17 1212高并发下的Java数据结 ... -
AQS
2019-03-21 15:08 2027大白话聊聊Java并发面试问题之谈谈你对AQS的理解? ... -
tomcat的三种运行模式+JAVA NIO
2019-03-12 11:13 5004详解Tomcat三种运行模 ... -
反射基础
2019-01-11 14:51 619十年架构师不到400行手写一个Spring MVC ... -
java反射原理, 注解原理
2019-01-08 17:22 4531注解机制及原理 JAVA ... -
内存泄露与内存溢出的区别
2018-12-24 16:14 26901、内存泄漏 memory le ... -
深入解析JAVA中的装箱与拆箱
2018-12-21 10:42 1250地址: https://www.cnblogs.com/d ... -
负载均衡原理
2018-12-20 17:43 744简介几种负载均衡原理 高并发解决方案之一 ——负载均衡 ... -
如何避免死锁
2018-12-20 15:31 3326一句话一张图说明银行 ... -
CAS自旋锁
2018-12-20 11:12 1567我们常说的 CAS 自旋锁是什么 CAS与ABA问题 ... -
【一个故事讲清楚NIO+Netty线程模型】
2018-08-22 10:30 3274五种网络io模型 一个简单故事讲述NIO blo ... -
char/varchar/nvarchar的区别及其各自的使用场景
2018-08-20 10:58 2373MySQL数据库char与varchar ... -
MVCC
2018-08-20 10:34 3478轻松理解MYSQL MVCC 实现机制 1.1 什 ... -
【tomcat系统架构(一)】
2018-08-16 16:02 1505四图带你了解Tomcat系统架构——让面试官颤抖Tomca ... -
分布式ID的实现方式
2018-04-27 18:19 3598分布式ID方案有哪些以及各自的优劣势 分布式ID生成器解 ... -
分布式锁的实现方式
2018-04-27 15:35 1747分布式锁解决方案-头条 分布式锁三种实现方式-CSDN ... -
【学习升级路线2】
2018-04-26 13:43 756非技术问题 研究比较深入的领域有哪些 对业内信息的关注 ... -
【学习升级路线1】
2018-04-26 13:54 931思维的惰性 我30的 ... -
需学习东西(面试问题)-backup
2018-04-26 13:46 1396记2017.3.21阿里面试经历,java方向 历年阿里面 ...
相关推荐
java反射机制简单理解,非常容易理解的java反射机制
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
有时候我们说某个语言具有很强的动态性,有时候我们会区分动态和静态的不同技术与作法。我们朗朗上口动态绑定(dynamic binding)、动态链接(dynamic ...是可以通过反射机制来实现“动态”,用一个实例来说明一下:
java学习资料—反射机制深入理解剖析;java学习资料—反射机制深入理解剖析;java学习资料—反射机制深入理解剖析;java学习资料—反射机制深入理解剖析;java学习资料—反射机制深入理解剖析;
Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源...
java 反射机制深入理解,java 反射机制深入理解,java 反射机制深入理解,
Java中的反射机制Java中的反射机制Java中的反射机制
Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制
Qt 使用QMetaObject实现反射机制代码demo
给同事写的反射机制的用法,非常简单易用,大家一看就懂。也便于初学者对反射机制的理解 资源免费提供大家下载,如有疑问,可以直接咨询我
java反射机制原理和反射机制总结!!! java反射机制原理和反射机制总结!!!
java反射机制和动态代理的原理,熟悉反射机制和动态代理
描述JAVA反射机制应用、举例。描述反射机制的具体实现及方法实现。
java反射机制原理
Java反射机制Java反射机制Java反射机制Java反射机制
Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制
JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用
.NET中的反射机制,讲解反射机制的7大关键问题
反射反射反射反射反射反射反射反射反射反射反射反射反射反射反射反射
Java 反射机制 代码的实例 请认真阅读 运行此代码 只要读懂了 反射机制也就明白了