Class类的常用方法如下:
Class.forName();动态加载类。
newInstance() :根据对象的class新建一个对象
getSuperclass() 获取继承的父类
getInterfaces() 获取继承的接口
getDeclaredFields() 获取字段名字
getDeclaredMethods();获取当前类的所有方法。
getConstructors() :获得所有的构造函数。
getModifiers() : 反射中获得修饰符
getPackage() :反射中获得package
getField(String name):反射中获得域成员。
getFields() :获得域数组成员。
isAnnotation() :判断是否为注解类型。
isPrimitive() :判断是否为基本类型。
isArray() :判断是否为数组类型。
isEnum() :判断是否为枚举类型。
getClassLoader() :获得类的类加载器
getMethods() 获得公共的方法。
以上就是Class类的常用方法,下面是我对一些方法做出的实例代码:
/*** 获取类对象*/
public Class> getClassName(String className)throws Exception {
return Class.forName(className);
}
/*** 实例化对象*/
public Object createClass(Class> clazz)throws Exception {
return clazz.newInstance();
}
/*** 获取当前类的父类*/
public Class> getParentClass(Class> clazz)throws Exception {
return clazz.getSuperclass();
}
/*** 获取当前类的所有父类*/
public List> getAllParentClass(Class> clazz) {
List> listClass = new ArrayList>();
for(Class> parentClass=clazz;parentClass.getSuperclass()!=null;parentClass=parentClass.getSuperclass()){
listClass.add(parentClass);
}
return listClass;
}
/*** 获取当前类实现的接口*/
public List> getInterfaces(Class> clazz) {
return Arrays.asList(clazz.getInterfaces());
}
/*** 获取当前类和父类还有接口继承的所有实现的接口*/
public HashSet> getAllInterfaces(Class> clasz) {
HashSet> listClass = new HashSet>();
for(Class> parentClass=clasz;parentClass.getSuperclass()!=null;parentClass=parentClass.getSuperclass()){
getInterface(parentClass,listClass);
}
return listClass;
}
public void getInterface(Class> clasz,HashSet> listClass){
for (Class> aClass : clasz.getInterfaces()) {
listClass.add(aClass);
if(aClass.getInterfaces()!=null){
getInterface(aClass,listClass);
}
}
}
/*** 获取当前类的方法*/
public List getMethod(Class> clazz) {
return Arrays.asList(clazz.getDeclaredMethods());
}
/*** 获取当前类和父类的方法*/
public List getAllMethod(Class> clazz) {
List listMethod = new ArrayList();
for(Class> parentClass=clazz;parentClass.getSuperclass()!=null;parentClass=parentClass.getSuperclass()){
listMethod.addAll(Arrays.asList(parentClass.getDeclaredMethods()));
}
return listMethod;
}
/*** 获取当前类的属性*/
public List getField(Class> clazz) {
return Arrays.asList(clazz.getDeclaredFields());
}
/*** 获取当前类和父类的所有属性*/
public List getAllField(Class> clazz) {
List listField = new ArrayList();
for(Class> parentClass=clazz;parentClass.getSuperclass()!=null;parentClass=parentClass.getSuperclass()){
listField.addAll(Arrays.asList(parentClass.getDeclaredFields()));
}
return listField;
}
以上是根据反射获取类的信息,下面是测试类的代码:
public static void main(String[] args) throws Exception {
// System.out.println(new ClassA().getClass().getName());
// System.out.println(ClassA.class.getName());
InfoClass i = new InfoClass();
Class> clazz = i.getClassName("test1.ClassA");
System.out.println("获得类对象:" + clazz.getName()+"\t\t"+clazz);
Object obj = i.createClass(ClassA.class);
System.out.println("获得类的实例"+obj.getClass().getName()+"\t\t"+obj);
System.out.println("获得类的父类"+i.getParentClass(ClassA.class));
show("获取当前类的所有父类:",i.getAllParentClass(ClassA.class));
show("获取当前类实现的接口:",i.getInterfaces(ClassA.class));
show("获取当前类和父类还有接口继承的所有实现的接口:",i.getAllInterfaces(ClassA.class));
show("获取当前类的方法",i.getMethod(ClassA.class));
show("获取当前类和父类的方法",i.getAllMethod(ClassA.class));
show("获取当前类的属性",i.getField(ClassA.class));
show("获取当前类和父类的所有属性",i.getAllField(ClassA.class));
}
public static void show(String name,Object obj){
System.out.print(name);
if(obj instanceof Collection){
for(Object o:((Collection)obj)){
System.out.print("\t");
System.out.print(o);
}
}
System.out.println();
}