这篇小博客有这么些内容~认识何使用java反射机制的心路历程
什么是java反射机制呢?什么时候会用到java反射机制呢?怎么使用java反射机制呢?
那我们开始吧~
(一)反射机制(Reflection)
JAVA反射机制_百度百科(你不打算戳戳看吗?)
java反射机制让Java这个静态语言变得格外突出,反射机制可以让java在运行过程中动态的调用类里面的属性和方法,可以动态的调用对象的方法。
*在度娘解释里动态语言和静态语言这两个词瞩目
所以静态语言和动态语言的区别 - raindi - 博客园。
静态在编译的时候一个变量的类型由它的定义决定,而动态语言实在于运行时可以根据上下文来确定变量的类型
(二)为什么要用反射机制呢?
反射机制可以让java在运行的时候获得某个类的结构、成员变量,用来实例化。Java的反射机制它知道类的基本结构,这种对Java类结构探知的能力,我们称为Java类的“自审”。这种自审机制就像用eclipse的时候--对象.XXX的时候编译工具会跳出这个对象对应的的属性和方法,就是自审机制。nice
(三)怎么使用java反射机制呢?
1.Class类
什么是Class类呢?
在java语言里,类是java.lang.Class的实例化对象(Class大写C),那么就可以说我创建一个对象比如学生就是Class类的对象,“学生”本身也是类。
2.反射
现在想用java的反射机制来访问“学生”类我可以这样声明
public class Domo {
public void f() {
//声明学生对象1
Student ni = new Student();
//声明学生对象2
Class a = Student.class;//也就是每一个对象都有一个class属性
//声明学生对象3
Class b = ni.getClass();//通过已知对象来获得对应的类;
//声明学生对象4
try {
Class c3 = Class.forName("one.Student");//找到类的路径
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
这里的abc都是类都表示了Student的类类型,那么abc是否相等呢?
实践输出“a==b”返回值是true可见一个类只能是一个Class的实例对象。
-----1通过http://a.b.cc创建实例化对象
通过a,b,c的newInstance来创
try {
Student a1 =(Student)a.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
-----2调用对象的方法
通过调用对象的方法,方法其实也是实例化对象,它是Method的实例化对象。
Method[] ms = c.getMethods();//获得类里面的方法;
for(int i = 0; i < ms.length;i++){
//然后可以得到方法的名称
System.out.print(ms[i].getName()+" ");
}
获得对象的参数,和获得方法一样,属性也有它的类-》Field
Field[] fs = c.getDeclaredFields();//可以这样获得方法,这里的方法不管是私有还是共有都可以获取
-----3对象的构造函数
同理构造函数也有它的类-》Constructor
Constructor[] cs = c.getDeclaredConstructor;//获取它的全部构造函数
谈谈Java反射机制~我有认真看他的博客