六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 59|回复: 0

Java的反射机制

[复制链接]

升级  30%

3

主题

3

主题

3

主题

童生

Rank: 1

积分
15
 楼主| 发表于 2013-1-19 04:07:06 | 显示全部楼层 |阅读模式
java语言的反射机制为是java语言所提供的一项特别吸引人的地方,利用反射我们可以对程序的运行进行动态的监控,开发使用反射特性的程序需要使用一些专门的工具类,这些工具类位于java.lang.reflect包中。

1.Class类简介

    Class类属于[flash=200,200][img]java.lang包中,不需要使用import语句的引入就可以直接使用,其对象代表一个类,并携带类的一些信息,主要包含构造器,方法和成员变量。

   注:a.java程序在运行的过程中,每个类加载后都在内存中产生一个对应的Class对象,一般来说,这个对象由系统来自动维护,不需要程序开发人员关心,

        b.这里的Class中的“C”为大[/img]
[/flash]写,如果变成小写就声明成java的关键字了
下面首先通过一个列子来说明反射机制的使用

Java代码
package com;   
import java.lang.reflect.Method;   
public class ReflectTest {   
    Method method [];   
    public ReflectTest(){   
        try{   
        Class c=Class.forName("com.ReflectTest");   
        method=c.getMethods();   
        }catch(ClassNotFoundException e){   
            e.printStackTrace();   
        }   
        if(method.length>0){   
            for(int i=0;i0){   
            for(int i=0;i0){
for(int i=0;i:"+sc.getName());   
        System.out.println("二维int数组对应的类名为:"+ic.getName());   
    }   
    public static void main(String args []){   
        new ArrayReflection();   
    }   
   
}   
//运行结果为:   
一维string数组对应的类名为:[Ljava.lang.String;   
二维int数组对应的类名为:[[I   
Java代码
public class ArrayReflection {   
        public ArrayReflection(){   
        String []stringArray=new String[4];   
        int[][]intArray=new int[4][4];   
        Class sc=stringArray.getClass();   
        Class ic=intArray.getClass();   
        System.out.println("一维string数组对应的类名为:"+sc.getName());   
        System.out.println("二维int数组对应的类名为:"+ic.getName());   
    }   
    public static void main(String args []){   
        new ArrayReflection();   
    }   
  
}   
//运行结果为:   
一维string数组对应的类名为:[Ljava.lang.String;   
二维int数组对应的类名为:[[I  

public class ArrayReflection {
public ArrayReflection(){
String []stringArray=new String[4];
int[][]intArray=new int[4][4];
Class sc=stringArray.getClass();
Class ic=intArray.getClass();
System.out.println("一维string数组对应的类名为:"+sc.getName());
System.out.println("二维int数组对应的类名为:"+ic.getName());
}
public static void main(String args []){
new ArrayReflection();
}

}
//运行结果为:
一维string数组对应的类名为:[Ljava.lang.String;
二维int数组对应的类名为:[[I 从运进结果我们可以看出,数组对象也有对应的类,"["表示数组,两个就表示二维数组。

在java中,每种基本数据类型都有对应的代号,对于int----I,boolean---Z,byte--B,char--C,long---J.可以到java网站查询详情

2.Field类的简单介绍

  Field类的对象代表成员变量,携带的是成员变量的一些信息,需要注意的是,与Class类相似,Field对象不能通过构造方法的形式来创建对象,必须通过Class类提供的get方法来获得。

Java代码
import java.lang.reflect.Field;   
public class FieldReflectTest {   
    public static void main(String args []){   
        try{   
            Student stu=new Student(21,2003,true,"tom");   
            Class c=stu.getClass();   
            Field field[]=c.getFields();   
            for(int i=0;i
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表