Java学习之反射机制

java语言区别于C,C++等准静态语言的最大特点就是java的反射机制。静态语言的最直接定义就是不能在运行时改变程序结构或变量的类型.按照这样的定义,python,ruby是动态语言,C,C++,Java不是动态语言。虽然在这样的定义下java不是动态语言,但java的反射机制(Reflection)却是可实现动态的相关机制。java反射机制的作用有

  1、在运行时判断任意一个类所具有的成员变量和方法

  2、在运行时构造任意一个类的对象

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

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

  在java的jdk中,有java.lang.reflect包,在该包中有5个比较重要的类,

  1、Class类:代表一个类。

  2、Constructor类:表示类的构造方法,通过该类来操作构造方法

  3、Field类:代表类的成员变量(属性)。

  4、Method类:代表类的方法。通过该类可操作方法。

  5、Array类:提供了动态创建数组,以及访问数组的元素的静态方法。

  Class 类十分特殊。它和一般类一样继承自Object,当一个class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM 便自动产生一个Class 对象。Class并没有构造方法,不能人为生成。

  要想使用java的反射,首先要获得类的Class,而获得的方法有以下几种

  String str = "CIACs";

  1、Class c1 = str.getClass();

  2、Class c2 = Class.forName("java.lang.String");//调用Class的静态方法

  3、Class c3 = String.class;//每个包装类都有自身的class

  获得Class后,就可以生成对象了,对象的构造方法有带参数的和不带参数的,当通过不带参数的构造方法来生成对象时有以下两种方式

  1、通过newInstance()方法生成

  Class<?> classType = str.getClass();

  Object obj = classType.newInstance();

  2、通过构造方法实现

  Class<?> classType = str.getClass();

  Constructor con = classType.getConstructor(new Class[]{});

  Object obj = con.newInstance(new Object[]{});

  若要通过带参数的构造方法生成对象实例,就只能使用如下方法

  Class<?> classType = str.getClass();

  Constructor con = classType.getConstructor(new Class[]{String.class});

  Object obj = con.newInstance(new Object[]{"CIACs"});

 获得类的对象实例后就可以操作对象的方法和属性了。以下是一个例子


1packagereflection;

2

3importjava.lang.reflect.InvocationTargetException;

4importjava.lang.reflect.Method;

5

6publicclassTestClass{

7

8publicintadd(inta,intb)

9{

10returna+b;

11}

12

13publicStringecho(Stringstr)

14{

15returnstr;

16}

17

18publicstaticvoidmain(String[]args)throwsException{

19Class<?>classType=TestClass.class;//获得Class

20

21ObjectTest=classType.newInstance();//通过classType获得对象实例

22

23MethodaddMethod=classType.getMethod("add",newClass[]{int.class,int.class});//运行中获得add方法

24

25Objectresult=addMethod.invoke(Test,newObject[]{1,2});//传入参数调用add方法

26

27System.out.println((Integer)result);

28

29MethodechoMethod=classType.getMethod("echo",newClass[]{String.class});

30

31Objectresult2=echoMethod.invoke(Test,newObject[]{"http://www.cnblogs.com/zhi-hao/"});

32

33System.out.println(result2);

34

35}

36

37}

  运行结果:

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2025-01-27 23:12:52

Java学习之反射机制的相关文章

Java中的反射机制

反射,reflection,听其名就像照镜子一样,可以看见自己也可以看见别人的每一部分.在java语言中这 是一个很重要的特性.下面是来自sun公司官网关于反射的介绍: Reflection is a feature in the Java programming language. It allows an executing Java program to examine or "introspect" upon itself, and manipulate internal pr

根据实例详解Java中的反射机制

概念:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.作用:Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态代理. 可以说Java的反射机制是Java中所有框架的基础,要对SSH等框架有一个深刻的理解

JAVA Reflection(反射机制)

Java 反射机制 反射机制简介 反射机制应用示例 简单的Ioc实现 代理模式 Java动态代理 简单的Aop实现 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言. 尽管在这样得定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关的机制:反射机制 (Reflection). 什么是反射? 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和

浅析Java中的反射机制原理

       反射反射,程序员的快乐!        Java中反射机制使用的还是比较广泛的,系统的灵活性.可扩展性大都都是通过反射等方式来加载外部插件,使得系统与插件解耦的同时,增加了功能.但是很多人都只是会用,却是不知道它的实现机制,今天就由我来带大家揭开反射机制的神秘面纱.        Java中是用Class.forName(classname)来反射类. package com.java.reflecttest; import com.java.dbtest.DBTest; /**

学习心得:Java为什么支持反射机制?

心得 Java为什么能够支持Reflection?答案是Java运行时仍然拥有类型信息,它包含了这个类一切:它有哪些字段.哪些方法,各是何种保护级别等等,还有这个类依赖于哪些类.在Java中,类信息以对象的形式存放,这些对象是一种元对象,它们的类型就是Class.拥有了这些信息,无论是动态创建对象还是调用某些方法都是轻而易举的.在C++中,通过RTTI(运行时类型识别),我们也可以知道类的一些信息,但为什么C++中却没有Reflection,原因是类型信息不完整.RTTI这个名字本身就告诉我们,

Java的反射机制---动态调用对象的简单方法_java

唉!我还真是在面试中学习新东东啊,一个公司刚刚给了个测试,不过我很奇怪的是为什么web developer的职位居然考java的反射机制题,不过学习研究一下反射机制对我来说是件好事啦! 先说说什么是java反射机制吧,在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这 种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.主要功能:在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对 象:在运行时判断任意一个

java 利用java反射机制动态加载类的简单实现_java

如下所示: ////////////////// Load.java package org.bromon.reflect; import java.util.ArrayList; import java.util.List; public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<

Java 反射机制详解及实例代码_java

Java反射详解 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 package Reflect; /** * 通过一个对象获得完整的包名和类名 * */ class Demo{ //other codes... } class hello{ public static void main(String[] args) {

[Java开发之路]反射机制

简介 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. Java反射机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是Java有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以