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. ORACLE Instant Client 配置

    http://www.oracle.com/technetwork/cn/database/features/instant-client/index-092699-zhs.html 在官网下载对应的 ...

  2. Yii集成smarty说明

    1.       [在protected目录下建立文件夹vendor/smarty,把smarty的类包放入其中] 2.       [在extensions目录下边建立文件CSmarty.php] ...

  3. 黄聪:360浏览器如何使用插件实现解除网页禁用右键复制的限制(Enable Copy)

    使用Enable Copy插件即可. 插件下载:Enable-Copy_v1.15.rar

  4. 黄聪:Discuz!的SEO优化策略二:如何去掉页脚多余的信息

    论坛搭建好,首先是把多余的东西都砍掉. 页脚的信息在我看来,都是很多余的信息,如下图: 要怎么消灭掉它们呢? 1.进入 全局 -- 站点信息 2.站点名称改为你的论坛名称,它会出现在内页的标题最末位. ...

  5. shell脚本摘要

    开启监听端口的程序时,查看是否开启成功(该例子监听8983端口) #动态显示[|][/][-][\] function spinner() { local pid=$1 local delay=0.5 ...

  6. 关于c语言中qsort函数的一点心得

    今天写c时无意间用到了排序,便想着使用c语言标准库中提供的排序函数,即qsort函数(c++stl中提供了sort函数用于排序),首先是介绍qsort函数的一些基本用法(以下内容转自: http:// ...

  7. CF 15/09/23

    CF580A 给出一个数列,求最长不下降子序列(连续) 直接DP,O(n) CF580B 主人公有n个朋友,每一个朋友有2个属性:m,sat 现在他想邀请部分朋友,邀请的人满足MAX_M-MIN_M& ...

  8. c# 函数及out传值

    使用 out传值的时候仅仅是将变量名(箱子)拿过来,并不会管之前是什么值函数体结束之前必须对该out的参数进行赋值,否则报错(不好意思还回去)out传值,可以进行多个值的传回 public void ...

  9. python(8) 自己制造异常让程序退出,把print的内容写入到文件

    异常 也可以自己输出异常原因: raise Exception("404 404 404") import math import time #print 到文件的代码****** ...

  10. studio_ 优化Android Studio 启动、编译和运行速度?

    http://www.admin10000.com/document/6842.html: 作为一名 Android 程序员,选择一个好的 IDE 工具可以使开发变得非常高效,很多程序员喜欢使用 Go ...