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. 最大流问题Ford-Fulkerson方法(转)

    本篇主要讲解最大流问题的Ford-Fulkerson解法.可是说这是一种方法,而不是算法,因为它包含具有不同运行时间的几种实现.该方法依赖于三种重要思想:残留网络,增广路径和割.本文将会详细介绍这些内 ...

  2. 转:谷歌大脑科学家 Caffe缔造者 贾扬清 微信讲座完整版

    [转:http://blog.csdn.net/buaalei/article/details/46344675] 大家好!我是贾扬清,目前在Google Brain,今天有幸受雷鸣师兄邀请来和大家聊 ...

  3. apache 做http代理

    1.修改 http.conf 文件 ,增加 监听端口 Listen 开启需要的扩展 LoadModule proxy_module modules/mod_proxy.so LoadModule pr ...

  4. python (18)在linux中如何实现定时发送邮件

    最近要用到,定时发送邮件功能: 如何定时,当然要用到linux中crontab了 如下的代码能够定时发送邮件 #!/usr/bin/env python # -*- coding=utf-8 -*- ...

  5. Mobirise

    网站建设器Mobirise v1.9.2 免费版 - 绿色软件联盟 2015年9月5日 - 网站建设器Mobirise是一个用户友好的程序,使您可以构建桌面和移动网站,准备在Javas cript中. ...

  6. Java多线程之新类库中的构件PriorityBlockingQueue

    package concurrent2; import java.util.ArrayList; import java.util.List; import java.util.Queue; impo ...

  7. log4net日志信息 插入 mysql数据库?

    log4net配置文件如下: <!--插入数据库--> <appender name="AdoNetAppender_MySql" type="log4 ...

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

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

  9. C语言 段位

    C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为"位段"或"位域" 在结构体中位段的定义格式为: unsignede < ...

  10. mybatis的增删改查

    一.配置文件方式 mapper.xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...