Java反射机制-Class类常用方法
来源:互联网 发布:手机网络证书过期 编辑:程序博客网 时间:2024/06/16 08:45
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<Class<?>> getAllParentClass(Class<?> clazz) { List<Class<?>> listClass = new ArrayList<Class<?>>(); for(Class<?> parentClass=clazz;parentClass.getSuperclass()!=null;parentClass=parentClass.getSuperclass()){ listClass.add(parentClass); } return listClass;}/** * 获取当前类实现的接口 */public List<Class<?>> getInterfaces(Class<?> clazz) { return Arrays.asList(clazz.getInterfaces());}/** * 获取当前类和父类还有接口继承的所有实现的接口 */public HashSet<Class<?>> getAllInterfaces(Class<?> clasz) { HashSet<Class<?>> listClass = new HashSet<Class<?>>(); for(Class<?> parentClass=clasz;parentClass.getSuperclass()!=null;parentClass=parentClass.getSuperclass()){ getInterface(parentClass,listClass); } return listClass;}public void getInterface(Class<?> clasz,HashSet<Class<?>> listClass){ for (Class<?> aClass : clasz.getInterfaces()) { listClass.add(aClass); if(aClass.getInterfaces()!=null){ getInterface(aClass,listClass); } }}/** * 获取当前类的方法 */public List<Method> getMethod(Class<?> clazz) { return Arrays.asList(clazz.getDeclaredMethods());}/** * 获取当前类和父类的方法 */public List<Method> getAllMethod(Class<?> clazz) { List<Method> listMethod = new ArrayList<Method>(); for(Class<?> parentClass=clazz;parentClass.getSuperclass()!=null;parentClass=parentClass.getSuperclass()){ listMethod.addAll(Arrays.asList(parentClass.getDeclaredMethods())); } return listMethod;}/** * 获取当前类的属性 */public List<Field> getField(Class<?> clazz) { return Arrays.asList(clazz.getDeclaredFields());}/** * 获取当前类和父类的所有属性 */public List<Field> getAllField(Class<?> clazz) { List<Field> listField = new ArrayList<Field>(); 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();}可以尝试运行一下。
谢谢大家的阅读!
阅读全文
0 0
- Java反射机制-Class类常用方法
- JAVA反射机制常用方法
- Java反射机制常用方法
- Java反射机制-class类
- Java反射机制--Class类
- Java反射机制-Class类
- Java反射机制--Class类
- Java反射机制常用方法介绍
- 认识class类 JAVA的反射机制
- JAVA反射机制-class类的获取
- Java反射机制及其Class类浅析
- Java反射机制—class类
- Java反射机制—class类
- Java反射机制Class类用法
- Java反射机制总结学习--Class类
- Java Class类与反射机制
- java中Class类和反射机制
- 反射 之 Class 类的常用方法
- IO流(1)——输入输出流的构造及available()的应用
- 把树莓派的存储空间拓展到整张TF卡中
- 爱上WordPress系列教程:(二)插件的安装与使用
- mybatis系列七:多对一关联查询
- 基于邻接矩阵的无向图的广度优先遍历
- Java反射机制-Class类常用方法
- String
- Java核心技术 第9版 学习笔记三
- leetcode 453. Minimum Moves to Equal Array Elements
- JZOJ 2017.12.09【NOIP提高组】模拟赛C组
- 对STM32的理解
- MFC按键响应长按操作
- Paintball UVA
- 2017-12-10杭电OJ2012 《素数判定》