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. TMS320C54x系列DSP的CPU与外设——第8章 流水线

    第8章 流水线 本章描述了TMS320C54x DSP流水线的操作,列出了对不同寄存器操作时的流水线延迟周期.(对应英语原文第7章) 8.1 流水线操作 TMS320C54x DSP有一个6段的指令流 ...

  2. IIS环境下如何批量添加、修改、删除绑定的域名

    IIS环境下如何批量添加和修改所绑定域名 1.关闭IISADMIN服务和W3SVC服务,可以从服务里面关闭,也可以直接执行命令:net stop iisadmin /y: 2.打开“C:\WINDOW ...

  3. windows7修改双系统启动项名称、先后顺序、等待时间

    一.进入BCDEdit.exe  正常启动Windows 7 系统,点击“开始” -> “所有程序” -> “附件”,右击“命令提示符” -> “以管理员身份运行”(需要将操作当前用 ...

  4. could not open extension control file "/usr/share/postgresql/9.1/extension/plpythonu.control": No such file or directory

    在使用createlang 安装plpythonu的时候出现如下错误:could not open extension control file "/usr/share/postgresql ...

  5. working copy locked 问题

    解法 1 :  右键svn-->clean up 解法 2 :  被lock的文件夹进入控制台 del lock /q/s [转载解法] SVN 本地更新时,由于一些操作中断更新,如磁盘空间不够 ...

  6. BIP_开发案例02_BI Publisher中复杂案例实现代码(案例)

    2014-12-27 Created By BaoXinjian

  7. JAVA 子父类的特点

    一.变量(属性)    this 代表当前对象的引用 this.变量 首先在本类中找所需要的这个变量,如果没有找到再去父类中找    super 用于访问当前对象的父类成员 super.变量 直接在父 ...

  8. R中根据匹配原则将一列拆分为几列的方法

    例如我们需要将一下数据的第二列从and处拆分为两列: before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar ...

  9. 织梦CMS站点favicon.ico图标的放置

    1.在线制作一个ico图标,推荐制作网站:http://ico.55.la/.制作好后,将favicon.ico图标放在站点模板默认目录下的images文件夹里. 2.在index.htm的<h ...

  10. mysql 如何用root 登录

    mysql -uroot -p 如果没有密码,按两下回车就进去了