Java语言的反射机制

1. Java反射的含义:获取应用中正在运行的Java对象。

2. Java反射机制: 在运行的程序中,对于任意的类,都可以知道这个类的属性、方法以及构造函数,对于任意对象都可以调用它的方法。这种在运行时动态获取和修改类的信息的能力称为Java反射机制。

3. Java反射的功能:

  1) 在运行时判断任意一个对象所属的类

  2) 在运行时创建任意一个类的对象

  3) 在运行时获取任意一个类的所有成员变量、方法以及构造函数

  4) 在运行时调用任意一个对象的方法

  5) 作为动态代理的基础,生成代理类

4. Java反射的实现类

  1) Class : Class类表示Java应用运行时的类或接口

  2) Field : 提供有关类或接口的属性信息的对象

  3) Method : 提供有关类或接口方法信息的对象

  4) Constructor : 提供有关类构造函数的信息

  注意:Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/ 属性/构造方法/访问权限)都需要它来实现。

5. 编写Java反射程序的步骤:

  1) 首先获取一个类或对象的Class对象,方法如下:

    Class clazz1 = ClassName.class;

    Class clazz2 = Class.forName("com.znker.reflection.ClassName");

    Class clazz3 = Object.getClass();

  2) 调用Class对象中的方法来获取一个类的的属性、方法以及构造函数的对象

6. Java反射的使用案例

  1) 获取一个对象的包名和类名

  

package com.znker.reflection;

public class ReflectionDemo {
    // other codes
}

/**
 * Java 反射案例:获取一个对象的完整包名和类名
 *
 */
public class ReflectionTest {
    public static void main(String[] args) {
        ReflectionDemo demo = new ReflectionDemo();
        System.out.println(demo.getClass().getName());
    }
}

  2) 实例化Class对象

  

package com.znker.reflection;

/**
 * 三种实例化Class对象的方式
 *
 * */
public class ReflectionTest {
    @SuppressWarnings({ "unused", "rawtypes" })
    public static void main(String[] args) {
        // 最常用的形式
        try {
            // @param 类的全路径名
            Class<?> clazz1 = Class.forName("com.znker.reflection.Reflection");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        Class clazz2 = ReflectionDemo.class;

        Class clazz3 = new ReflectionDemo().getClass();
    }
}

  3) 利用无参构造函数创建对象

  

package com.znker.reflection;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        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;
    }

    @Override
    public String toString() {
        return "[" + this.name + " , " + this.age + "]";
    }
}

package com.znker.reflection;

public class Refdemo {
    public static void main(String[] args) {
        Class<?> demo = null;
        try {
            demo = Class.forName("com.znker.reflection.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        Person person = null;
        try {
            // 通过无参构造函数实例化对象, 构造一个与Class有关的对象
            person = (Person) demo.newInstance();

        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }

        person.setName("John");
        person.setAge(18);

        System.out.println(person);
    }
}

Java Reflection的更多相关文章

  1. Java Reflection(getXXX和getDeclaredXXX)

    package com.sunchao.reflection; public class Person { private int age ; private String name; public ...

  2. Java Reflection 反射基础

    反射基础: package reflection; /** * Created by : Infaraway * DATE : 2017/3/2 * Time : 23:06 * Funtion : ...

  3. Some Link: Java Reflection

    http://docs.oracle.com/javase/tutorial/reflect/index.html https://bugs.openjdk.java.net/browse/JDK-4 ...

  4. java reflection总结

    一.java反射常用方法 获取Class的几种方式: Class class1 = String.class;// 该方法最为安全可靠,程序性能更高.         Class class2 = s ...

  5. Java Annotations, Java Reflection, and Java Test Runner

    www.vogella.com/tutorials/JavaAnnotations/article.html

  6. Java反射(Reflection)

    基本概念 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的. 这种动态获取类的信息以及动态调用对象的方法的功能来自于J ...

  7. java 反射(Reflection)

    看了很多关于java 反射的文章,自己把所看到的总结一下.对自己,对他人或多或少有帮助吧. Java Reflection是什么? 首先来看看官方文档Oracle里面对Reflection的描述: R ...

  8. Java RTTI and Reflection

    Reference: Java编程思想 java 反射(Reflect) Java系列笔记(2) - Java RTTI和反射机制 Java Reflection in Action, 有空再补 -- ...

  9. 全方位解读Java反射(reflection)

    JAVA提供了一种反射机制,反射也称为反省. java程序运行以后内存中就是一堆对象,除了对象什么都没有. 找对象 拉关系 瞎折腾 对象在运行过程中能否有一种机制查看自身的状态,属性和行为.这就是反射 ...

随机推荐

  1. Java Map hashCode深究

    [Java心得总结七]Java容器下——Map 在自己总结的这篇文章中有提到hashCode,但是没有细究,今天细究整理一下hashCode相关问题 1.hashCode与equals 首先我们都知道 ...

  2. caffe安装:ubuntu16.04 + opencv2.4 + python 2.7+ CUDA 8.0 RC + CuDNN 5.0

    官方教程:http://caffe.berkeleyvision.org/install_apt.html 主要参考教程: https://github.com/BVLC/caffe/wiki/Ubu ...

  3. Ubuntu下安装了java但启动eclipse报错说没装java

    参考资料:http://blog.csdn.net/happyteafriends/article/details/8290950 一.问题 在Ubuntu下安装了java并在~/.bashrc配置了 ...

  4. Ubuntu14.04 LTS安装不成功

    北京时间2014年04月18日早8:00时,Ubuntu14.04 LTS在ubuntu官网放出,果断下之体验. 镜像为ubuntu-14.04-desktop-amd64.iso.大小为964M.M ...

  5. hdu 5429 Geometric Progression 高精度浮点数(java版本)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5429 题意:给一段长度不超过100的每个数字(可以是浮点数)的长度不超过1000的序列,问这个序列是否 ...

  6. Unity5.0 手动激活

    提供Unity5.0.1.f1(32-bit)下载http://pan.baidu.com/s/1bg5sDK 密码 ns75 有时候会发现,用激活工具是激活不了的,这个时候就要手动激活,其实个人觉得 ...

  7. poj -2975 Nim

      Nim Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4312   Accepted: 1998 Description ...

  8. StrutsPrepareAndExecuteFilter(转)

    http://www.iteye.com/topic/829843  一.概述 Struts2的核心是一个Filter,Action可以脱离web容器,那么是什么让http请求和action关联在一起 ...

  9. Python Web 框架:Tornado

    1.Tornado Tornado:python编写的web服务器兼web应用框架 1.1.Tornado的优势 轻量级web框架 异步非阻塞IO处理方式 出色的抗负载能力 优异的处理性能,不依赖多进 ...

  10. oracle远程连接服务器数据库

    oracle远程连接数据库,需要配置本地服务,具体步骤如下: 1. 2.添加新的服务 3.输入服务名(例如:orcl3即服务器数据库名) 4.选择TCP协议 5.输入服务器IP(192.268.10. ...