---------- android培训、java培训、期待与您交流! ----------
Java中的反射从一个Class类的对象开始,根据这个Class对象可以获得一个类的全部成员列表,找出类的全部类型信息(),并可以发现关于类自身的一些信息,如它使用的修饰符()或它所在的包。Java中与反射相关的类出Class和Packge在java.lang包中外,其他均在java.lang.reflect包中。
Java中主要通过调用对象的getClass()方法、使用类的名字表达式、通过Class类的静态方法forName()三种方式获得Class类的对象。有了Class对象后。就可以调用Class类中的方法来获取类的父类,实现的接口、成员变量、成员方法和构造函数等信息,当然也可以使用newInstance()方法来创建对象。在实际使用中需要调用Method类、Field类和Constructor类中的方法完成某些操作,比如调用Method类的invoke()完成方法调用,调用Field类的set()方法修改成员变量的值,调用Constructor类的newInstance()方法创建类的实例等。
获取Class的方式:
使用getClass()方法获取Class对象实例。 package com.itheima.thread; public class Class_Test { public static void main(String[] args) { java.awt.List a = new java.awt.List(); E_getClass.showInterface(a); } } class E_getClass { public static boolean showInterface(Object object) { if (object == null) return false; /* * 通过对象获得Class */ Class class1 = object.getClass(); Class[] interFace = class1.getInterfaces(); System.out.println("类"+class1.getName()+"继承的接口有:"); for (int i = 0; i < interFace.length; i++) System.out.println(interFace[i].getName()); return true; } } 使用.class获取Class类的对象。 package com.itheima.thread; public class Class_Test1 { public static void main(String[] args) { Class cs = String.class; Class[] suClass = cs.getInterfaces(); System.out.println("类"+cs.getName()+"继承的的接口有:"); for (int i = 0; i < suClass.length; i++) { System.out.println(suClass[i].getName()); } } } 使用forName()方法获取Class类的对象。 package com.itheima.thread; import java.lang.reflect.Constructor; public class Class_Test2 { public static void main(String[] args)throws Exception { Class class1 = Class.forName("java.util.Date"); Class[] intfs = class1.getInterfaces(); for (int i = 0; i < intfs.length; i++) { System.out.println(intfs[1].getName()); } System.out.println("-----------------"); Constructor[] constructors=class1.getConstructors(); for(Constructor constructor:constructors) { StringBuilder stringBuilder=new StringBuilder(constructor.getName()+"("); Class[] paramets=constructor.getParameterTypes(); for (Class paramet:paramets) { stringBuilder.append(paramet.getName()+","); } if(paramets.length>0) stringBuilder.deleteCharAt(stringBuilder.length()-1); stringBuilder.append(")"); System.out.println(stringBuilder); } } }