JAVA反射机制
来源:互联网 发布:手机端js关闭当前页面 编辑:程序博客网 时间:2024/06/05 11:41
JAVA反射机制
Java反射机制是Java被视为动态(或准动态)语言的一个关键性质,这个机制允许程序在运行状态中,透过Refection APIs,获取任意一个对象的内部信息:
- modifiers
修饰词
如:public、static等
- superclass 如:
Object
- interface
接口
的实现类 如:Cloneable
- fields
属性
- mothod
方法
java反射机制可以在程序运行时:改变field
、调用method
、加载、探知、使用编译期间完全未知的classes
。
动态 获取信息
以及调用对象
的方法的功能称为 Java语言的反射机制。
总结一下:
反射就是通过名字反向获取类对象,属性,方法;
应用场景:
在事先不确定new 哪个对象,给哪个属性赋值,调哪个方法如果确定不要使用反射
反射机制提供的功能
在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判段任意一个类所具有的成员变量和方法在运行时调用任一个对象的方法在运行时创建新类对象:通过类对象可以反向new对象 类对象.newInstance();通过类对象可以获取类的所有信息(属性和方法);类是对象的模版,也就是可以通过类对象获取对象的所有信息(信息不是属性值);
注意: Class对象(类对象)
使用Java的反射功能时,基本首先都要获取类的Class对象,再通过Class对象获取其他的对象。
类对象:
.class
文件会被JVM
加载为Class对象(类对象)
Class也是一个类,是类对象的类型(类是对象的类型)Class在java.lang包中,无需导包一个.class文件对应一个类对象,所有类对象的类型都是Class
获取类对象
方法1:
Class<?> cls = Class.forName("类名");
注意:
类名:必须是全限定名:包名.类名Class.forName:通过类名反向获取类对象类名必须是JVM加载完毕后的,所以要进行异常处理Class.forName("类名")如果不接收返回值,只是加载该.class文件到JVM中
方法2:
Class<X> cls = X.class;(X是一个类); //类.class获取类对象Class<Master> clsMaster = Master.class;
getDeclaredXXX和getXXX的区别:
带Declared是获取本类中声明的方法或属性,包括private不带Declared是获取所有public的属性和方法,包括父类public的
getDeclaredMethod()、getMethod()
无参:(方法名)有参:(方法名,参数类型...):Class.getMethod("setStrain",String.class)
调用:从里到外对象调用Method;
Method.invoke(对象名,参数值...);
注意: 如果调用方法有返回值,就用Object类型的引用接收返回结果;
调用父类中的private属性、方法:
Class<X> cls = X.class;X x = null;Class<?> superClass = cls.getSuperclass(); //获取X的父类try{ if(superClass == Object.class){ System.out.out("该类没有父类"); } Field superField = superClass.getDeclaredField("属性名"); superField.setAccessible(true); superField.set(x, rs.getObject("属性名")); //rs.getObject() 获取对应属性名的值} catch(NoSuchFieldEcxeption e) { Field childField = X.getDeclaredField("属性名"); childField.setAccessible(true); childField.set(x, rs.getObject("属性名"));}
阅读全文
1 0
- 【反射】JAVA反射机制
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- java的反射机制
- Java的反射机制
- java反射机制详解!
- Java反射机制
- Java的反射机制
- java 反射机制--侯捷
- java反射机制
- java反射机制
- [候捷]Java反射机制
- java 反射机制
- java 反射机制初探
- 关于Java反射机制
- java反射机制
- Dockerfile详解
- mybatis查询得到list列表,列表长度不为零,但遍历列表获取对象属性值时,出现空指针异常
- 0808-JDBC-Java DataBase Connectivity
- Linux系统(Ubuntu16.04)ssh配置无密码登录
- 康托展开&康托逆展开 的写法
- JAVA反射机制
- [POJ 1860] Currency Exchange [spfa]
- Dockerfile指令
- php 读写json文件。追加,修改json
- python学习——局部变量与全局变量
- linux IPC---记录上锁
- Java-简单操作Excel
- Zend Studio快捷键
- 不同电脑上的两台linux使用桥接模式实现互通(静态ip地址)