一天一个Java基础——反射

1.概念

  反射主要是指程序可以访问,检测和修改它本身的状态或行为的一种能力

  Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以运行时装配,无须在组件之间进行链接

  反射允许在编写与执行时,使程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码

  如果使用不当,反射的成本会很高

2.例子

  1 package Test;
  2
  3 import java.lang.reflect.Constructor;
  4 import java.lang.reflect.Field;
  5 import java.lang.reflect.Modifier;
  6
  7 interface TestInterface{
  8     public static String username = "zhengbin";
  9     public static String password = "19950906";
 10     public String add();
 11
 12 }
 13
 14 class Demo implements TestInterface{
 15     private String username;
 16     private String password;
 17
 18     public Demo() {
 19         super();
 20     }
 21
 22 //    public Demo(String username, String password) {
 23 //        super();
 24 //        this.username = username;
 25 //        this.password = password;
 26 //    }
 27
 28     public String getUsername() {
 29         return username;
 30     }
 31     public void setUsername(String username) {
 32         this.username = username;
 33     }
 34     public String getPassword() {
 35         return password;
 36     }
 37     public void setPassword(String password) {
 38         this.password = password;
 39     }
 40     public String toString() {
 41         return "Demo [username=" + username + ", password=" + password + "]";
 42     }
 43     public String add(){
 44         return "add()";
 45     }
 46 }
 47
 48 public class Test1 {
 49
 50     public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
 51         Demo d = null;
 52         /*    Class 在API中的解释:
 53          *
 54          *  Class 类的实例表示正在运行的 Java 应用程序中的类和接口
 55          *  每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象
 56          *  基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象
 57          *  Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的
 58          *
 59          */
 60         Class<?> c = Class.forName("Test.Demo");
 61         System.out.println(c.getName());
 62
 63         d = (Demo)c.newInstance();
 64         d.setUsername("zhengbin");
 65         d.setPassword("19950906");
 66         System.out.println(d);
 67
 68         // 获得反射类的父类
 69         System.out.println(d.getClass().getSuperclass().getName());
 70
 71         // 获得类中的全部构造函数
 72         Constructor<?> cons[] = c.getConstructors();
 73         for(int i = 0;i < cons.length;i++){
 74             System.out.println(cons[i]);
 75         }
 76
 77         System.out.println("---------本类的所有属性----------");
 78         // 获得本类的所有属性
 79         Field[] field = c.getDeclaredFields();
 80         for (int i = 0; i < field.length; i++) {
 81             // 权限修饰符
 82             int mo = field[i].getModifiers();
 83             // 获得属性名
 84             String priv = Modifier.toString(mo);
 85             // 属性类型
 86             Class<?> type = field[i].getType();
 87             System.out.println(priv + " " + type.getName() + " "
 88                     + field[i].getName() + ";");
 89         }
 90
 91         System.out.println("---------实现的接口或者父类的属性----------");
 92         // 取得实现的接口或者父类的属性
 93         Field[] filed1 = c.getFields();
 94         for (int j = 0; j < filed1.length; j++) {
 95             // 权限修饰符
 96             int mo = filed1[j].getModifiers();
 97             String priv = Modifier.toString(mo);
 98             // 属性类型
 99             Class<?> type = filed1[j].getType();
100             System.out.println(priv + " " + type.getName() + " "
101                     + filed1[j].getName() + ";");
102         }
103     }
104
105 }

运行结果:

Test.Demo
Demo [username=zhengbin, password=yqxx950906]
java.lang.Object
public Test.Demo()
---------本类的所有属性----------
private java.lang.String username;
private java.lang.String password;
---------实现的接口或者父类的属性----------
public static final java.lang.String username;
public static final java.lang.String password;

详情:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

时间: 2024-10-11 12:01:13

一天一个Java基础——反射的相关文章

黑马程序员——java基础——反射

 黑马程序员--java基础--反射 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 反射 其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员. 反射就是把Java类中的各种成分映射成相应的java类. 简单说:反射技术可以对一个类进行解剖. 反射的基石-->Class类 1.java中的类是用来描述一类事物的共性,该类事物有什么属性,没有什么属性

一个Java基础练习

com聚合是包容的一种特例,目的是最大化的实现功能模块话,降低组件间的耦合性. 第一步: 通过ATL创建com外部组件TestOutCom.dll,在其内部创建接口包装类CCMyOuterCom,并实现其对应的接口ICMyOuterCom,注意默认选择"聚合"(这点很重要,后面我们会详细解说) 在"聚合"选项中: 勾选"是",则按照默认生成支持聚合的包装类 勾选"否",则包装类头文件CMyOuterCom.h,在公开接口列表字

黑马程序员-java基础-反射基础

------- android培训.java培训.期待与您交流! ---------- java的反射机制是java的特性之一,反射机制是构建框架技术的基础所在,使用反射可以使程序更加灵活,避免将程序写死在代码里.相对于很多初学者只接触过java基础的人,反射还是一个很朦胧难懂的概念,下面我们就来说一下反射的一些应用. java反射机制是指在运行状态中,动态获取信息以及动态调用对象方法的功能.java反射有3个动态性质:1.运行时生成对象实例,2.运行期间调用发放,3.运行时更改属性. 那么反射

黑马程序员——JAVA基础-反射

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 反射是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都只能都调用它的任意一个 方法和属性,这种动态获取的信息一级动态调用对象的方法的功能呢个称为java 的反射机制. 反射其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象, 并将字节码文件中的内容都封装成对象,这样便于操作这些成员.就是把JAVA类中的各种成

一天一个Java基础——泛型

这学期的新课——设计模式,由我仰慕已久的老师传授,可惜思维过快,第一节就被老师挑中上去敲代码,自此在心里烙下了阴影,都是Java基础欠下的债 这学期的新课——算法设计与分析,虽老师不爱与同学互动式的讲课,但老师讲的挺好,不过由于数据结构欠缺课听的有点烧脑,都是数据结构欠下的债 这学期的新课——英语口语,虽外教老师风骚逗趣浪荡不羁爱自由,但我辈词汇量欠缺,表明淡定说yeah,但心中一万匹草泥马策马奔腾,都是英语欠下的债 1.泛型类 实体类(容器类),经常重用的类,下面是一个没有用泛型的实体类: 1

黑马程序员——Java基础---反射Class类、Constructor类、Field类

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 反射的应用场景 一.概述 反射技术: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的

黑马程序员-java基础-反射

java.lang.Class类的实例代表java应用程序运行时加载的.class文档. 其构造函数: private Class() {} 说明我们无法创建Class对象,Class对象是有JVM自动产生,每个.class文档加载后,JVM会自动生成对应的Class对象. 什么时候加载.class文件进内存 1,用Class.forName()或者类加载器(Class claz = fu.class 没有执行static{}块??) 2,用 new 生成对象时 注意:用类声明参考名称并不会加载

黑马程序员----java基础--反射机制

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.反射的基本描述 Java反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象方法的功能称为java语言的反射机制.动态获取类中信息,就是java反射.可以理解为对类的解剖.如果想要对指定名称的字节码文件进行加载并获取其中的内容并调用,这时就使用到了反射技术. 简单一

Java 基础 - 反射

基本概念 Java 反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息. 利用反射,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性. Class 想要获取一个类的信息,首先需要获取类的Class对象. Java中的所有类型包括基本类型(int, long, float等等),即使是数组都有与之关联的Class类的对象. 获取类的对象 //在编译期知道一个类的名字 Class c