---------- 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);
}
}
}