本文接上文“获取类的信息”,利用反射(invoke)来获取一个类中的方法来执行. 1.定义一个类,包含三个名称相同,参数不同的方法 class A{ public void print(){ System.out.println("Hello,World"); } public void print(int a,int b){ System.out.println(a+b); } public void print(String a,String b){ System.out.prin…
我们可以通过反射,获取对应的运行时类中所有的属性.方法.构造器.父类.接口.父类的泛型.包.注解.异常等....典型代码: @Test public void test1(){ Class clazz = Person.class; //获取属性结构 //getFields():获取当前运行时类及其父类中声明为public访问权限的属性 Field[] fields = clazz.getFields(); for(Field f : fields){ System.out.println(f)…
“JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制.”这是百度百科对JAVA反射的描述,仅凭这句话是没法明白反射的真正含义,所以还需要深入剖析.正如其描述中所讲,反射机制一般体现在运行状态,那么什么是运行状态?这就要追溯到JAVA程序的运行过程. 一.java程序的运行过程: JAVA程序运行过程分两个阶段: 1.编译阶段:将.java的源文件编译…
Java反射理解(五)-- 方法反射的基本操作 方法的反射 1. 如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法 2. 方法反射的操作 method.invoke(对象,参数列表) 举例 具体操作请看下面举例: import java.lang.reflect.Method; class A{ public void print(){ System.out.println("helloworld"); } public void print(int a,int b){…
Java 反射理解(三)-- Java获取方法信息 基本的数据类型.void关键字,都存在类类型. 举例如下: public class ClassDemo2 { public static void main(String[] args) { Class c1 = int.class;//int 的类类型 Class c2 = String.class;//String类的类类型,可以理解为String类字节码 Class c3 = double.class; Class c4 = Doubl…
方法的反射 1)如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法. 2)方法反射的操作 method.invoke(对象,参数列表). 代码实例: package com.reflect; import java.lang.reflect.Method; public class MethodDemo1 { public static void main(String []args) throws Exception { /* * 要获取print(int,int)方法 * 1,…
序言 一般而言,动态语言是指程序运行时,允许改变程序结构或变量类型的语言. 从这个观点来看,Perl.Python.Ruby是动态语言,C++.Java.C#不是动态语言. 但是Java有动态相关机制:Reflection,反射,是指可以运行时加载.探知.使用编译期间完全未知的Classes. 一.什么是反射? Java程序可以加载一个运行时才得知名称的Class,获取其完整构造,并生成其对象实体,设置属性,调用方法. 这种动态获取类信息以及动态调用对象方法的功能就是Java语言的反射机制. 二…
上一篇博文<菜鸟学编程(九)——Java反射机制(一)>里面,向大家介绍了什么是Java的反射机制,以及Java的反射机制有什么用.上一篇比较偏重理论,理论的东西给人讲出来总感觉虚无缥缈,还是结合一些实例比较形象具体.那么今天就结合更多的实例具体说说. 实例一:获得完整的类名 package reflection.getclassname; //获得完整的类名 public class GetClassName { public String getNameByClass() { String…
写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客户端来对服务端进行方法调用.所以现在我们清楚了: 需要一个服务端.一个客户端 那么我们说干就干,我们先建立一个服务端: 通过Socket监听本地服务器的一个端口(8081) 调用socket的accept方法等待客户端的连接(accpet方法原理) /** * RPC服务端 * @author wu…
Java反射理解(四)-- 获取成员变量构造函数信息 步骤 获取成员变量信息: obj.getClass() 获取类类型对象 成员变量也是对象,java.lang.reflect.Field 类中封装了关于成员变量的操作: getFields() 方法获取的是所有的public的成员变量的信息 getDeclaredFields() 获取的是该类自己声明的成员变量的信息 getType() 得到成员变量的类型的类类型 getName() 得到成员变量的名称 获取成员变量构造函数信息: obj.g…
Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 演示 我们以具体的代码来演示什么是动态加载类和静态加载类: 新建:Office.java: class Office { public static void main(String[] args) { // new 创建对象,是静态加载类,在编译时刻就需…
Java 反射理解(一)-- Class 类的使用 概念 这里阐述几个基本概念: 在面向对象的世界里,万事万物皆对象.(在 Java 语言中,静态的成员.普通数据类型除外) 类也是对象,类是 java.lang.Class 的实例对象. 类类型是什么? 类类型可以简单理解为类的类型.在万物皆对象的 Java 中,我们定义的每个类都是 java.lang.Class 类的一个对象,该对象就是该类的类类型,即 Class 对象. 得到 Class对象有三种方法: 已知类名 (类名.class) 已知…
反射 到底什么是反射(Reflection)呢? 反射有时候也被称为内省(Introspection),事实上,反射,就是一种内省的方式, Java不允许在运行时改变程序结构或类型变量的结构,但它允许在运行时去探知.加载.调用在编译期完全未知的class,可以在运行时加载该class,生成实例对象(instance object),调用method,或对field赋值. 这种类似于“看透”了class的特性被称为反射(Reflection),我们可以将反射直接理解为:可以看到自己在水中的倒影,这…
在施老师的项目中需要用到invoke,就是通过函数名反射相应的函数.一下代码简单地介绍了java反射中invoke方法,如果要具体的,可以参考魔乐核心课程的反射部分内容 package org.curry.tool; import java.lang.reflect.Method; public class InvokeMethods { public static void main(String[] args) { Employee emp = new Employee(); Class c…
本文转自:http://z3sm2012.iteye.com/blog/1933227 今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类方法时,发生 NoSuchMethodException异常,后来上网发现getMethod()调用公共方法,不能反射调用私有方法,后来找到 getDeclaredField()能够访问本类中定义的所有方法.后来用这个方法解决了我遇到的问题.我查了java api文档,其中详细说明如下: Metho…
转载:http://huoyanyanyi10.iteye.com/blog/1317614 提高java反射速度的方法method.setAccessible(true) package com.chenshuyi.test; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Main { public static void main(String…
详解Java反射各种应用   Java除了给我们提供在编译期得到类的各种信息之外,还通过反射让我们可以在运行期间得到类的各种信息.通过反射获取类的信息,得到类的信息之后,就可以获取以下相关内容: Class对象 构造器 变量 方法 私有变量与私有方法 注解 泛型 数组 本文也将从上面几个方面来介绍Java反射.本文涉及的所有代码均在反射代码首先放出一个Java类作为反射的研究对象,类的内容如下: public abstract class FatherObject implements Runn…
序言 有时候.项目中会用到java动态载入指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大减少,更加的模块化.代码利用率更高.模式中的代理模式就用到java的这一机制. 下边就让我们通过代码来看看怎样实现此功能. 代码具体 package loadjarclass; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoa…
本文承接上一篇:乐字节Java发射之二:实例化对象.接口与父类.修饰符和属性 继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. public static void test() throws Exception { Class<?> clz = Class.forName("com.shsxt.ref.simple.User "); //获取属性 System.out.println("======…
类 Class  每个类被加载之后,系统就会为该类生成一个对应的Class对象,通过该Class对象就可以访问到JVM中的这个类. 我们在Java中获取Class对象一般有三种方式: (1), 使用Class类的forName(String className)静态方法.该方法需要传入字符串参数,该字符串参数的值是某个类的全限定类名(必须添加完整包名). (2), 调用某个类的class属性来获取该类对应的Class对象 例如,Person.class 将会返回Person类对应的class对象…
导读 Java反射机制是开发者迈向结构化开发的重要一步,同时掌握了反射机制也就掌握了所有框架的核心实现思想. 认识反射机制 简单例子 通过以上的程序就会发现,除了对象的正向处理操作之外,还可以通过getClass()方法来获取一个类对应的完整的信息的结构,而这就是反射的开始. Class类对象实例化 在整个反射机制之中,Class类是整个反射操作的源头所在,如果现在可以获取Class类的对象,那么就可以进行所有的更加深层次的反射操作(上面案例仅仅是根据实例化对象的Class获取了类的基本名称).…
前言 前面我们进行了代理模式.静态代理.动态代理的学习.而动态代理就是利用Java的反射技术(Java Reflection),在运行时创建一个实现某些给定接口的新类(也称"动态代理类")及其实例(对象).所以接下来我们有必要学习一下Java中的反射. 一.基础知识 1.1 反射是什么? 在讲反射之前,先提一个问题:假如现在有一个类User,我想创建一个User对象并且获取到其name属性,我该怎么做呢? User.java package com.reflect; /** * @au…
一.概述 1.介绍 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法. 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息.可以通过这个对象看到类的结构.这个对象就像一面镜子,透过这个镜子可以看到类的结构,所以,形象的称之为:反射. 2.动态语言与静态语言 动态语言:是一类在运行时可以改变其结构的…
基于<Java编程思想>第四版 前言 我们要操作一个类实例对象时,一般都要先知道这个类有哪些方法或者成员变量.反射就是在我们不知道这个类有哪些方法或成员变量时,使用特定方式得到类的这些信息,再根据特定规则去调用对应的方法操作类实例对象. 这中间有两个未知条件 如何记录类信息 如何确定规则 类信息是通过Class记录的,规则是由程序员定的. Class Class是一个记录类信息的类,每个类(包括Class)都会有一个Class对象.其实现也很好猜测和理解:编译器扫描完代码,就能知道类的具体信息…
前言 突然发现好久没写博客了,前面写的都是关于Android的东西,今天心血来潮突然有一种冲动想写一篇基于JAVA技术的博客,别问我为什么?有钱.任性! 今天就来谈谈反射机制:学过JAVA的人不一定懂得反射,但是一定听说过反射,不过也仅仅是听说过而已:因为反射用的地方也不会那么多,但是反射用的妙经常会解决我们挠破头皮的大问题.至于诸如为什么叫做反射.而不叫做正射倒射此类的历史问题,还是交给历史学家去研究吧... 反射的基石 在谈反射之前,我们应该先了解下类的概念来引入.类是一种抽象的概念,举个例…
目录 第6讲 | 动态代理是基于什么原理? 典型回答 考点分析 知识扩展 反射机制及其演进 动态代理 精选留言 Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com 杨晓峰-Java核心技术-6 动态代理 反射 MD.md *** 目录 === 第6讲 | 动态代理是基于什么原理? 编程语言通常有各种不同的分类角度,动态类型和静态类型就是其中…
本文接上文"方法反射的基本操作",利用反射了解下java集合中泛型的本质 1.初始化两个集合,一个使用泛型,一个不使用 ArrayList list1 = new ArrayList(); ArrayList<String> list2 = new ArrayList<String>(); 2.有定义类型可得在list2中添加int类型会报错 list2.add("Hello"); list2.add(20); //报错 3.获取两个对象的类…
1. 类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入内存,并为之创建一个Class对象. 任何类被使用时系统都会建立一个Class对象 连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 初始化 就是我们以前讲过的初始化步骤 1.2 类初始化时机 1. 创建类的实例…
1.本章的主要内容 2.关于反射的理解 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法. 框架 = 反射 + 注解 + 设计模式. 3.体会反射机制的“动态性” //体会反射的动态性 @Test public void test2(){ for(int i = 0;i < 100;i++){ int num = new Random().nextInt(3);//0,1,2…
什么是反射? Java安全可以从反序列化漏洞说起,反序列化漏洞又可以从反射说起.反射是⼤多数语⾔⾥都必不可少的组成部分,对象可以通过反射获取他的类,类可以通过反射拿到所有⽅法(包括私有),拿到的⽅法可以调⽤,总之通过"反射",我们可以将Java这种静态语⾔附加上动态特性.可能说完这一两句话大家还是不知道反射是个啥玩意,现在为了让大家容易理解,先为大家提出一个需求,通过这个需要来引出反射.需求如下: 根据配置文件re.properties指定信息,创建对象并调用方法. classfull…