一:反射前述
- 动态语言:是一类在运行时可以改变其结构的语言:例如新的函数,对象,甚至代码。通俗的说就是在运行时代码可以根据某些条件改变自身结构。
- 主要动态语言:Object-c,C#,JavaScript,PHP,Python等
- 静态语言:与动态语言相对应,运行时结构不可变的语言。如Java,C,C++
- Java不是动态语言,但我们可以利用反射机制获得类似动态语言的特性,让编程更灵活。 反射机制允许程序在执行期间借助Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区就产生了一个Class类型的对象,此对象包含类的完成结构信息。
二:通俗讲法
- 我们都知道所有的java类都是继承了object这个类,在object这个类中有一个方法:getclass().这个方法是用来取得该类已经被实例化了的对象的该类的引用,这个引用指向的是Class类的对象。
三:什么是反射?
class user{
private String name;
private int age;
}
class test{
public static void main(Stirng[] args){
Class c1 = Class.forName("com.pojo.User");
Class c2 = Class.forName("com.pojo.User);
}
}
四:获得反射的几种方式
- 一个加载的类在JVM中只会有一个Class实例,一个Class对象对应的是一个加载到JVM中的一个.class文件。
- 每个类的实例都会记得自己是由那个Class实例所生成,通过Class可以完整的得到一个类中的所有的被加载的结构。
- Class类是Reflection的根源,针对任何你想动态加载运行的类,唯有先获得相应的Class对象。
class Person{
private String name;
}
class test2{
public static void main(String[] args){
Person person = new Person();
Class c1 = person.getClass();
Class c2 = Class.forName("com.pojo.Person");
Class c3 = Person.class;
Class c4 = Integer.TYPE;
Class c5 = c1.getSuperclass();
}
}