Java反射
2021/9/8 1:06:11
本文主要是介绍Java反射,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
什么是反射?
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态(或准动态,为啥要说是准动态,因为一般而言的动态语言定义是程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。)语言的一个关键性质。
获取Class的三种方式
//1.通过类名.Class Class c = Student.Class; //2.通过classforName,引号里面是这个类所在的全限定名 Class c = Class.forName(""); //3.通过该类的对象创建 Student student = new Student(); Class c = student.Class;
获取该类及其从父类继承下来的所有公共public属性(c.getFields())
//获取该类的属性(包括继承来的) Field[] fields = c.getFields();//获取该类及其父类中所有的public属性 for (Field field : fields) { //遍历属性 System.out.println(field.getName()); //获取属性的名字 System.out.println(field.getType()); //获取属性类型 System.out.println(Modifier.toString(field.getModifiers())); //获取属性的访问控制符对应的int值,在将这个int值转换成转换成控制符 }
获得该类自定义-声明的属性(c.getDeclearFields())
//获取该类自己定义-声明的属性 Field[] declaredFields = c.getDeclaredFields(); for (Field declaredField : declaredFields) { System.out.println(declaredField.getName()); //获取属性的名字 System.out.println(declaredField.getType()); //获取属性类型 }
获得该类定义的所有构造方法(c.getConstructors())
Constructor[] constructors = c.getConstructors(); for (Constructor constructor : constructors) { System.out.println(constructor.getName()); System.out.println(constructor.getParameterCount()); Parameter[] parameters = constructor.getParameters();//获得该构造方法的参数 for (Parameter parameter : parameters) { System.out.println(parameter.getName()); } } Student student = (Student) constructors[1].newInstance(180,"张三",21); //得到这个类的构造方法信息后,通过实例化创建一个Student对象 System.out.println(student.getName());
获得该类的普通方法
Method[] methods = c.getMethods(); for (Method method : methods) { System.out.println(method.getReturnType()); System.out.println(method.getName()); } System.out.println(methods[2].invoke(student, "lisi")); //通过student这个对象调用这个对象里面的第三个方法,传入一个值是lisi c.getMethod("study",String.class).invoke(student,"lisi");
这篇关于Java反射的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28MQ底层原理资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:入门与初级用户指南
- 2024-11-28MQ消息队列资料入门教程
- 2024-11-28MQ消息队列资料:新手入门详解
- 2024-11-28MQ消息中间件资料详解与应用教程
- 2024-11-28MQ消息中间件资料入门教程
- 2024-11-28MQ源码资料详解与入门教程
- 2024-11-28MQ源码资料入门教程
- 2024-11-28RocketMQ底层原理资料详解