美文网首页
java反射机制

java反射机制

作者: 临窗听雨 | 来源:发表于2016-07-26 11:09 被阅读41次

一.反射的概念

      主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

      反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。

二.反射的作用

1、反编译:.class-->.java

2、通过反射机制访问java对象的属性,方法,构造方法等;

3、用于工具,架构,动态开发等开发工程。

三.反射机制中的类

java.lang.Class;

java.lang.reflect.Constructor; 

java.lang.reflect.Field;

java.lang.reflect.Method;

java.lang.reflect.Modifier;

四.Constructor的反射

String str1 = new String(new StringBuffer("abc")); //用constructor构造此String对象

Constructor constructor1 = String.class.getConstructor(StringBuffer.class);

String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));

Class.newInstance的作用:调用默认的构造方法,省去中间Constructor的步骤

Class.forName("java.lang.String").newInstance();

五.成员变量的反射

Field FLY = rp1.getClass().getField("y"); //FLY不是对象上的变量,代表类身上字节码的变量,要用它去取某个对象上对应的值。

FLY.get(rp1);//用get取得y的值

暴力反射:取私有变量

Field FLX = rp1.getClass().getDeclaredField("x");//x为私有变量,所以用此方法

FLX.setAccessible(true);//设置可用

System.out.println(FLX.get(rp1));

六.成员方法的反射

String string = "abc";

Method methodCharAt = String.class.getMethod("charAt",int.class); //取得String的charAt方法的字节数组

System.out.println(methodCharAt.invoke(string, 1));//如果底层方法是静态的,该参数可以为null,因为静态方法没有对象。

如果方法的参数列表为数组,用Object数组来传递对象

System.out.println(methodCharAt.invoke(string, new Object[]{new Integer(2)})); //JDK1.4的形式

System.out.println(methodCharAt.invoke(string,new Object[]{2})); //JDK1.5的形式可以自动装箱

七.数组的反射

具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。

代表数组的Class实例对象的getSuperclass()方法返回的父类为Object类对应的Class。

基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用,非基本数据类型的一维数组,既可以当作Object使用,也可以当作Object[]使用。

Arrays.asList()方法:将数组转换为List。处理int[]和String[]时的差异。

Array工具类用于完成数组反射的操作

怎样得到整个数组的元素类型:无法得到,只能得到具体元素的类型—— a[i].getClass().getName();

八.实现框架的作用

在写程序的时候无法知道要调用的类名,所以在程序中无法直接new某个类的实例对象,而要用反射的方式来做。

InputStream ips = new FileInputStream("config.properties");

Properties pr =new Properties();

pr.load(ips);

ips.close();

String className = pr.getProperty("className");

Collection collections =(Collection)Class.forName(className).newInstance();

相关文章

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 反射之三

    总结内容源自以下文章 粗浅看java反射机制 反射机制应用实践 谈谈java反射机制 Java Reflectio...

  • java反射机制

    java的反射机制 1 JAVA的反射机制是什么?反射机制能做什么?反射机制的优点与缺点2 认识 Class...

  • Java中反射的用途

    Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框...

  • Chapter 13 . 反射机制

    阅读原文 Chapter 13 . 反射机制 13.1 Java反射机制研究及应用 Java Reflection...

  • 详解Java反射机制(Reflection)

    详解Java反射机制(Reflection) 反射机制的作用 JAVA反射机制是在运行状态中,对于任意一个类,都能...

  • Java 反射机制

    [1]. java反射详解[2]. Java Reflection(反射机制)详解[3]. 深入理解Java类型...

网友评论

      本文标题:java反射机制

      本文链接:https://www.haomeiwen.com/subject/gnxpjttx.html