当前位置:   article > 正文

Android java基础_反射

Android java基础_反射

一.反射的基本概念

反射(Reflection),Java 中的反射机制是指,Java 程序在运行期间可以获取到一个对象的全部信息。

反射机制一般用来解决Java 程序运行期间,对某个实例对象一无所知的情况下,如何调用该对象内部的方法问题。

反射的原理:

反射机制允许 Java 程序在运行时调用Reflection API取得任何类的内部信息(比如成员变量、构造器、成员方法等),并能操作类的实例对象的属性以及方法。

在Java 程序中,JVM 加载完一个类后,在堆内存中就会产生该类的一个 Class 对象,一个类在堆内存中最多只会有一个 Class 对象,这个Class 对象包含了该类的完整结构信息,我们通过这个 Class 对象便可以得到该类的完整结构信息。

这个 Class 对象就像是一面镜子,我们透过这面镜子可以清楚地看到类的结构信息。因此,我们形象的将获取Class对象的过程称为:反射。

二.反射的例子

  1. package a.b.c.d;
  2. class Person {
  3. private String name;
  4. void setName(String name) { this.name = name; }
  5. String getName() { return this.name; }
  6. };
  7. public class Reflect {
  8. public static void main(String args[]) {
  9. Person p = new Person();
  10. Class<?> c1 = null;
  11. try {
  12. c1 = Class.forName("a.b.c.d.Person");
  13. } catch (ClassNotFoundException e) {
  14. System.out.println(e);
  15. }
  16. Class<?> c2 = p.getClass();
  17. Class<?> c3 = Person.class;
  18. System.out.println(c1.getName());
  19. System.out.println(c2.getName());
  20. System.out.println(c3.getName());
  21. }
  22. }

运行:

  1. root@ubuntu:/home/topeet/guyilian# mkdir -p a/b/c/d
  2. root@ubuntu:/home/topeet/guyilian# ls
  3. a Person.class Reflect.class Reflect.java
  4. root@ubuntu:/home/topeet/guyilian# mv Reflect.java a/b/c/d
  5. root@ubuntu:/home/topeet/guyilian# ls
  6. a Person.class Reflect.class
  7. root@ubuntu:/home/topeet/guyilian# javac a/b/c/d/Reflect.java
  8. root@ubuntu:/home/topeet/guyilian# java a/b/c/d/Reflect
  9. a.b.c.d.Person
  10. a.b.c.d.Person
  11. a.b.c.d.Person

三.反射API

 调用某个类的对象的getClass()方法,即:对象.getClass();

  1. Person p = new Person();
  2. Class clazz = p.getClass();

 调用类的class属性类获取该类对应的Class对象,即:类名.class

Class clazz = Person.class;

 使用Class类中的forName()静态方法(最安全,性能最好)即:Class.forName(“类的全路径”)

Class clazz = Class.forName("类的全路径");

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/202580
推荐阅读
相关标签
  

闽ICP备14008679号