fanShe.java

package example5;
class fanShe{
    /*1.应用在一些通用性比较高的代码中。
     *2.后面学的框架,大多数都是应用框架来实现的。
     *3.在框架开发中,都是基于配置文件来开发。在配置文件中配置了类,可以通过反射得到类中的所有内容,可以让类中的某个方法来执行。
     *类中的所有内容:属性,没有参数的构造方法,有参数的构造方法,普通方法。
     *反射的原理:
     *代码保存在.java文件中保存至本地硬盘-->编译得到.class文件-->把class类使用jvm中的类加载器加载至内存-->Class类(字节码文件在内存中的表示)
     *我如果得到了这个Class类,便可以得到类里所有的内容
     *使用反射首先需要得到Class类(三种方法)
     *(1)类名.class
     *(2)对象名.getClass()
     *(3)使用Class.forName("类的路径")
     *属性通过一个类Field获得。
     *构造方法通过一个类constructor获得。
     *普通方法通过一个类method获得。
     */
     private String name;
    int age;
    //无参数的构造方法
    public fanShe() {}
    //有参数的构造方法
    public fanShe(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }  
}

testFanshe.java

package example5;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import org.junit.Test;

class testFanshe {
    public static void main(String[] args) throws Exception {
        // 得到Class类的三种方法
        Class c1 = fanShe.class;
        Class c2 = new fanShe().getClass();
        Class c3 = Class.forName("example5.fanShe");
        /*test1();
        test2();
        test3();*/
        test4();
    }

// 反射操作无参数的构造方法
    public static void test1() throws Exception {
        Class c3 = Class.forName("example5.fanShe");
        // 得到反射类的一个实例
        fanShe f1 = (fanShe) c3.newInstance();
        // 用实例去调用类中的方法
        f1.setName("宝娟");
        System.out.println(f1.getName());
    }

// 反射操作有参数的构造方法
    @Test
    public static void test2() throws Exception {
        // 得到Class类
        Class c3 = Class.forName("example5.fanShe");
        // 得到有参数的构造方法类
        // 传递的是有参数的构造方法里的参数类型,以class类型传递
        Constructor con = c3.getConstructor(String.class, int.class);
        // 通过有参的构造方法设置实例的值
        fanShe p1 = (fanShe) con.newInstance("阿苏", 20);
        System.out.println(p1.getName() + "  " + p1.getAge());
    }

// 反射操作类的属性
    public static void test3() {
        // 得到Class类
        try {
            Class c2 = Class.forName("example5.fanShe");
            // 得到类的一个实例
            fanShe p2 = (fanShe) c2.newInstance();
            // 得到name属性,参数是属性名称
            Field f1 = c2.getDeclaredField("name");
            //表示允许操作私有属性
            f1.setAccessible(true);
            //为name属性设置值,第一个参数是类的一个实例,第二个参数是要设置的值。
            f1.set(p2, "wangwu");
            // 得到属性值并打印输出
            System.out.println(f1.get(p2));
        } catch (Exception e) {
            e.printStackTrace();
        }

}
    //使用反射来操作普通方法
    public static void test4() throws Exception {
        //得到Class类
         Class c4=Class.forName("example5.fanShe");
         //得到类的一个实例
         fanShe p4=(fanShe) c4.newInstance();
        //得到普通方法的类的方法,第一个参数是要操作的普通方法的名称,第二个参数是普通方法中传入参数的类型。
         Method f4=c4.getDeclaredMethod("setAge", int.class);
         //操作的是私有方法
         f4.setAccessible(true);
         //此函数是使普通方法运行,并设置值。第一个参数是类的一个实例,第二个参数是要设置的值。
         f4.invoke(p4,15);
         //将设置的值打印输出
         System.out.println(p4.getAge());
    }
    /*注:当操作的方法是静态方法是,由于静态方法的调用方式是 类名.方法名
     * 所以不需要类的实例
     * 在invoke()方法中的第一个参数直接写为null
     * f4.invoke(null,15);
     */
}

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 身上指的是我们可以于运行时加载.探知.使用编译期间完全未 ...

  10. java中反射

    Person.java===>>person.class ==>>jvm中的类加载器===>>class对象:代表内存中Person.class ==>> ...

随机推荐

  1. 08_Redis持久化——RDB方式

    [简述] 持久化:Redis能将数据从内存中以某种形式同步到硬盘中,使得重启后可以根据硬盘中的记录恢复数据,这一过程就是持久化. Redis支持两种方式的持久化,简单来说如下: RDB方式:会根据指定 ...

  2. idea maven 依赖问题

    今天发现,原来idea引用maven依赖的时候,优先依赖的是本地.但是有个问题,如果我删除了一个packet,如果刚刚好本地另外一个项目里面也有这个对于的packet,idea的智能提示 是 将其导入 ...

  3. DELPHI 小结

    //十六进制(S)-->>十进制(I)  [重写:Jey]function hextoint(s: string): Integer; begin           //$代表16进制  ...

  4. 使用 Azure CLI 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager 部署模型

    以下步骤演示如何使用 Azure 命令行接口 (CLI) 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 本文中的操作需要 Az ...

  5. 从传输流收到意外的 EOF 或 0 个字节

    /// <summary> /// 发送POST请求 /// </summary> /// <param name="json"></pa ...

  6. MySQL数据操作(借鉴)

    /* 启动MySQL */net start mysql /* 连接与断开服务器 */mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */mysqld ...

  7. 【设计模式最终总结】桥接模式 VS 外观模式

    差异点 外观模式,是把功能通过一个接口提供出来,方便日后更换实现,或者这种实现可以由多方提供,但同时只用一个.典型例子:@Slf4j 桥接模式,多个维度,每个维度提供一个接口,这些接口集中在一个类中, ...

  8. 20140316 曼联VS利物浦,罗杰斯的小九九,当4312对上4231

    一.预测的阵式!? 赛前看fourfourtwo,Whoscored的首发预测,楼主立刻意淫了阵式图,并且大言不惭在微博贴了当晚的热战区域(上图的左侧),并疑惑着,格伦·囧森打左后卫,那这……显然是逼 ...

  9. 可用的rtmp卫视直播地址

    http://blog.csdn.net/chinabinlang/article/details/45092297[ 可用的rtmp卫视直播地址] http://blog.csdn.net/chin ...

  10. Node.js在windows平台的安装

    nodejs官网:https://nodejs.org/en/ 下载安装: node-v8.4.0-x64.msi 检查 path 中是否已经配置nodejs的安装路径,如果没有要配置. node   ...