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. C产品狗

    作者:郭琦链接:https://www.zhihu.com/question/29342383/answer/110823046来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  2. AP_应付税务预扣税Withholding Tax的设定和使用(案例)

    2014-07-13 Created By BaoXinjian

  3. Python 图形 GUI 库 pyqtgraph

    原文  Python 图形 GUI 库 pyqtgraph pyqtgraph 是纯 Python 图形 GUI 库,基于PyQT4 /pyside和NumPy.它主要目的用于在数学/科学/工程中.M ...

  4. bug_ _java.lang.IllegalArgumentException: View not attached to window manager

    ============= 1   view not attached to window manager 转自:http://hi.baidu.com/spare_h/blog/item/7fa3e ...

  5. M2M协议

    1, M2M协议 M2M是Machine-to-Machine/Man的简称,是一种以机器终端智能交互为核心的.网络化的应用与服务.M2M协议规定了人机和机器之间交互需要遵从的通信协议.随着科学技术的 ...

  6. rubymine配置 rspec

    If you go in Run > Edit Configurations... And select All Specs in <Your Project> you'll see ...

  7. NPM使用

    安装路径修改: 4.配置npm的全局模块存放路径和cache路径 输入以下命令 npm config set prefix  “D:\Program Files\node\node-global” n ...

  8. [ActionScript] AS3利用SWFObject与JS通信

    首先介绍SWFObject的用法: swfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfurl, flash ...

  9. eclipse项目!*图标含义

    一 .项目前面有红色!,表示工程中classpath中指向的包路径错误 解决办法: 右键项目名称 BuildPath ---> Configure Build Paht...中,然后上面有几个选 ...

  10. PS 的参考线

    新建参考线 菜单:"视图-新建参考线", 直接输入想要位置的参考线.   参考线对齐 按住Shift键拉辅助线,辅助线会自动对齐到当前标尺的刻度上.           按住Alt ...