Person.java===>>person.class ==>>jvm中的类加载器===》》class对象:代表内存中Person.class
==>>通过Clsaa对象中的方法获取内存中的 person.class对象的全部成员及方法构造函数等拿到后也都是对象,其构造函数为Constructor对象,变量为Field对象,属性为Method属性
获取Class对象的三种方式
    1.类名
    2.通过实例
    3.Class.forName("类的全路径");(推荐使用)
 
package reflect;
 
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
 
import org.junit.Test;
 
 
 
/**
 * 反射类的使用
 * @author sunyb
 *
 */
public class reflect_Test {
 
     
     @Test
     public void run()
     throws ClassNotFoundException
     {
           
            //三种方式获取
            //第一种通过类名获取
            Class clazz0 =Person.class ;
            //第二种通过实例
            Class clazz1 =new Person(1).getClass();
            //第三种通过 Class.forClass
            Class clazz2 =Class.forName( "reflect.Person");
     }
     /**
      * 获取构造对象
      * throws Exception
      */
     @Test
     public void run1()
     throws Exception
     {
            //获取Person的Class对象
            Class clazz=Class.forName ("reflect.Person" );
            //创建实例
            //Person p=(Person)clazz.newInstance();//等于调用了Person的无参构造函数
            //获取有参数的构造器
            Constructor c=clazz.getConstructor(int.class,String. class);
           Person p=(Person) c.newInstance(1, "孙业宝");
           System. out.println(p.getName());
     }
     
     
     /**
      * 获取属性对象
      */
     @Test
     public void run2()
     throws Exception
     {
           
                      //获取Person的Class对象
                      Class clazz=Class.forName("reflect.Person");
                      //创建实例
                     Person p=(Person)clazz.newInstance(); //等于调用了Person的无参构造函数
                     Field name=clazz.getDeclaredField( "name");
                     name.setAccessible( true);
                     name.set(p, "郭美女");
                     System. out.println(name.get(p));
                
     }
     
     /**
      * 通过反射获取方法
      */
     @Test
     public void run3()
     throws Exception
     {
            //获取Person的Class对象
            Class clazz=Class.forName("reflect.Person" );
            //创建实例
           Person p=(Person)clazz. newInstance();//等于调用了Person的无参构造函数 
           Method m= clazz.getDeclaredMethod ("setName" , String.class);
           m. setAccessible(true);
           m. invoke(p, "凤凰"); //等于执行了 p.Name="凤凰";
           System. out.println(p.getName());
     }
}

java中反射的更多相关文章

  1. Java中反射的三种常用方式

    Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...

  2. java中反射学习整理

    转载请注明:http://blog.csdn.net/j903829182/article/details/38405735 反射主要是指程序能够訪问.检測和改动它本身的状态或行为的一种能力. jav ...

  3. Java中反射的实现方式

    所谓反射,是指在运行时状态中,获取类中的属性和方法,以及调用其中的方法的一种机制.这种机制的作用在于获取运行时才知道的类(Class)及其中的属性(Field).方法(Method)以及调用其中的方法 ...

  4. 简单模拟Java中反射的应用场景

    有人说Java是一门静态语言.那么何为静态语言,动态语言又是什么? 1.动态语言 是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以 被引进,已有的函数可以被删除或是其他结构上的变化 ...

  5. Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别

    一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:   其中

  6. Java中反射与常用方法

    java通常是先有类再有对象,有对象我就可以调用方法或者属性. 反射其实是通过Class对象来调用类里面的方法.通过反射可以调用私有方法和私有属性.大部分框架都是运用反射原理.   如何获得Class ...

  7. Java中反射机制详解

    序言 在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射, ...

  8. java中反射讲解及实例

    Java反射机制详解 java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实 ...

  9. Java中反射的理解

    反射 一.什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了"动态性". 反射用在 Java 身上指的是我们可以于运行时加载.探知.使用编译期间完全未 ...

随机推荐

  1. Java方法总结与源码解析(未完待续)

    使用StringTokenizer去掉字符串中的空格 public class StringTo { public static void main(String[] args){ String te ...

  2. 使用jackson进行json数据格式转换

    private static final JsonFactory factory = new JsonFactory(); StringWriter jsonOut = new StringWrite ...

  3. GL_GL系列 - 多币种管理分析(案例)

    2014-07-08 Created By BaoXinjian

  4. 程序员的sql金典

    1.数据库基础概念 2.数据类型 3.通过SQL语句管理数据表 4.数据的增删改 5.Select的基本用法 6.高级数据过滤 7.数据分组 8.限制结果集行数和抑制重复数据 9.计算字段 10.不从 ...

  5. mysql server has gone away 与max_allowed_packed

    今天在本地测试测试给所有店铺批量发信息的功能,大约2万条记录,在本地和备用linux服务器上测试都没有问题,但上windows时一直报mysql server has gone away的错误,搜索一 ...

  6. Citrix 服务器虚拟化之五 Xenserver配置存储

    Citrix 服务器虚拟化之五  Xenserver配置存储 XenServer中定义了一个容器称为存储库(SR)来描述一个特定的存储目标存储虚拟磁盘映像(VDI). VDI是一个的磁盘抽象,包含一个 ...

  7. 基于NPOI的Execl导入导出例子

    源地址:http://bbs.csdn.net/topics/390830774

  8. C++学习3

    C++仍然在使用C语言的 char.int.long 等基本数据类型,它们在现代操作系统(Windows XP.Win7.Win10 等)中的长度如下表所示: longlong是C99新增的一种数据类 ...

  9. [Flex] ButtonBar系列——flex3 labelFunction用户提供的函数,在每个项目上运行以确定其标签

    <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="h ...

  10. 问答精华-IntelliJ IDEA快捷键大全

    这篇文章介绍了idea的默认快捷键http://www.jikexueyuan.com/blog/229.html 另外:老师将快捷键设置为eclipse的了,你需要在preference里面找到ke ...