java学习日记(10)———java重要知识点反射的学习
当时看张孝祥老师讲反射反射是什么的时候,自己很迷糊,概念是这样的 Reflection(反射) 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,当我第一次学习反射的时候,被这些专业术语弄的头昏脑胀的,感觉比以前学的东西要难很多,有点抓不住的感觉,反射是类吗?反射是方法吗?反射到底有什么作用?这些疑问都随之而出。
最后还是通过反复观看张老师的视频,另外网上查了N多的资料,才对反射机制有一定的了解了,那么什么是反射呢?其实说简单点反射就是把java类中的各个成分映射成相应的java类,反射不是一个类,也不是一种方法,反射总的来说是一种机制,就和以前学习的异常机制,是用来解决一系列问题的方法。反射用来解决什么问题呢?是怎么解决的呢?下面就总结下对反射的理解。
学习反射,必须要知道Class类,这个还是很好理解的,class类用来描述对象,Class就是来描述class类的,所以里面都有得到类中内部属性,构造函数,和方法的方法,当然属性,函数自然也都抽取为类来描述了。
获取Class对象的几个常见方法:1,调用getClass 2,运用.class 语法 3 ,运用static method Class.forName()
Java反射机制主要提供以下功能:
1,构造方法的反射应用
一般方法是
new String(new StringBuffer("java");
反射的做法是
Constructor constructor1 = String.class.getConstructor(StringBuffer.class);
String str2 = (String)constructor1.newinstance(new StringBuffer("abc"));
先从字节码得到构造方法,然后根据构造方法对象构造出abc
2,成员方法的反射应用
一般调用是:
str.charAt(1);
反射方法是;
Method methodCharAt = String.class.getMethod("charAt", int.class);
methodCharAt.invoke(str,1));
运用static method Class.forName() 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法
public Method getDeclaredMethod(String name,Class<?>... parameterTypes) 返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法
public Method[] getDeclaredMethods() 返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法
上面都是反射的基本应用,只有用好了以后才有利于以后接触框架,因为框架知识基本上都设计到了反射用到老反射知识,在我们以后写代码写框架时,由于我们并不知道,要被调用的类名,有类可能还没写出来,所以我们无法new出个实例对象来,但是可以运用反射的知识,反射不需要new对象就可以解决这些问题了。