转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?opt=1最近在接触到框架的底层的时候,遇到了反射,便想好好的学习和总结一下反射,帮助理解java框架的运行流程和运行原理:根据万物皆对象,所以类也是对象,通过反射得到描述类的对象,也就是Class这个类。有三种方法得到:类名.class;实例.getclass;Class.forName(全类名);得到描述类的类后,就可以通过类里面的方法,字段和注解。在java编程中,使用的框架大多对底层进行了封装,在进行编程的过程中,如何调用底层封装好的类,属性或方法,基本都是通过反射或代理的方式进行获取,其底层的原理都是通过反射进行操作的。如果有这么一个类:package com.test;

public class Test {    public void sayHi(String name)    {        System.out.println("Hi "+name);    }

}

可以编写另外一个类来反射调用Test类的方法: 

package com.test;

import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;

public class Class {    public static void main(String[] args) {         String [] names ={"tom","tim","allen","alice"};            java.lang.Class<Test> clazz = Test.class;            try            {                Method method = clazz.getMethod("sayHi", String.class);                for(String name:names)                    method.invoke(clazz.newInstance(),name);            } catch (NoSuchMethodException e)            {                e.printStackTrace();            } catch (IllegalAccessException e)            {                e.printStackTrace();            } catch (IllegalArgumentException e)            {                e.printStackTrace();            } catch (InvocationTargetException e)            {                e.printStackTrace();            } catch (InstantiationException e)            {                e.printStackTrace();            }    }

}JAVA的反射是指,可以通过一个类名来探察这个类里面的信息,比如说类的属性名,属性名的修饰符,方法名,方法返回值,方法修饰符等等,反正除了方法体得不到,其他都可以用反射得到;反射还可以生成类的实例,通过这个实例定义属性,调用方法,特别是能调用私有的属性和私有的方法import java.lang.reflect.*;public class ReflectionTest {

public static void main(String[] args) {  try {   Class c=Class.forName("java.util.HashSet");   Object o=c.newInstance();   Method[] methods=c.getDeclaredMethods();   for(Method method:methods){    System.out.println(method);   }   Method m1=c.getMethod("add", Object.class);   m1.invoke(o, "cyq");   m1.invoke(o, "hello");   m1.invoke(o, "java");   System.out.println(o);  } catch (Exception e) {   e.printStackTrace();  } }

}

这是一个简单的反射例子,就是得到HashSet中的所有申明的方法,生成一个HashSet的实例,然后往里面添加对象 

java反射基础的更多相关文章

  1. java反射基础知识(四)反射应用实践

    反射基础 p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的Quick Start. 在应用反射机制之前,首先我们先来看一下如何获取一个对象对应的 ...

  2. java反射基础知识(一)

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

  3. java反射(基础了解)

    package cn.itcast_01; /** *Person类 */ public class Person {    /** 姓名 */    private String name;     ...

  4. 深入解析Java反射基础

    博客原文:http://www.sczyh30.com/posts/Java/java-reflection-1/ - 这老哥写的特别好 一.回顾:什么是反射? 反射(Reflection)是Java ...

  5. Java 反射基础

    1.反射概念: Java运行时,动态获得类的信息以及动态调用对象的方法的功能. 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调 ...

  6. java反射基础知识(五)反射应用实践

    详解Java反射各种应用   Java除了给我们提供在编译期得到类的各种信息之外,还通过反射让我们可以在运行期间得到类的各种信息.通过反射获取类的信息,得到类的信息之后,就可以获取以下相关内容: Cl ...

  7. java反射基础知识(三)

    原文地址:http://tutorials.jenkov.com/java-reflection/index.html http://www.cnblogs.com/penghongwei/p/329 ...

  8. java反射基础知识(二)

    1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数.属性.父类.接口等 Class 内部信息的机制.通过反射还可以让我们在运行期实例化对象 ...

  9. 5、java反射基础

    Class对象: Class对象记录了所有与类相关的信息,当类加载器从文件系统中加载.class文件到JVM中的同时会为每一个类创建一个Class对象.通过Class对象可以获取到类的属性.方法.构造 ...

  10. 简介Java反射基础

    [参考资料: 疯狂Java讲义 Chapter 18] 1.类加载.连接.初始化 当Java程序需要某一个类时,如果该类尚未加载到内存中,系统会通过加载.连接.初始化三个步骤将该类加载到内存,并完成初 ...

随机推荐

  1. 【Python-虫师】自动化测试模型--参数化

    一.自动化测试代码最开始是线性的,后续发展为模块化代码,所以涉及到了函数和方法的引用. 1. 函数和方法的最主要区别: Python的方法中定义函数的时候,函数中必须写self.而单独定义函数的时候则 ...

  2. 查看win信任的证书办法机构(CA机构的公钥)

    cmd mmc

  3. CentOS工作内容(五)单一网卡配置多个IP

    CentOS工作内容(五)单一网卡配置多个IP 用到的快捷键 tab 自动补齐(有不知道的吗) ctrl+a 移动到当前行的开头(a ahead) ctrl+e 移动到当前行的开头(e end) ct ...

  4. mysql备份工具innobackupex,xtrabackup-2.1的原理和安装

    mysql备份工具innobackupex,xtrabackup-2.1的原理和安装 http://bbs.2cto.com/read.php?tid=310496 一.Xtrabackup介绍 1. ...

  5. Iterator源码解读

    //继承关系 public interface Inteator { boolean hasNext(); Object next(); } public interface Iterable { I ...

  6. IP追踪

    cmd里输入:tracert www.baidu.com 上图箭头方框中就是对应公司的总网IP

  7. 找出numpy array数组的最值及其索引

    在list列表中,max(list)可以得到list的最大值,list.index(max(list))可以得到最大值对应的索引 但在numpy中的array没有index方法,取而代之的是where ...

  8. 摄影EV值深入研究

    1. 什么是EV值 1.1. EV值定义 EV(Exposure Value),曝光值,是反应曝光量的一个值.当感光度为ISO 100.光圈值为F1.曝光时间为1秒时,定义曝光量为0.曝光量减少一档时 ...

  9. Dapper Extensions中修改Dialect

    如果是MySql数据库,则修改为:DapperExtensions.DapperExtensions.SqlDialect = new MySqlDialect(); DapperExtensions ...

  10. 安卓备份 To Do(待办事项)的数据库

    真正路径:/data/data/com.mediatek.todos/databases/todos.db 使用过链接的路径:/data/user/0/com.mediatek.todos/datab ...