什么是反射
- 反射允许程序在执行期间通过反射API取得类的内部信息,并能直接操作任意对象的内部属性及方法。
- 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象,这个对象就包含了类的结构信息
动态语言和静态语言的区别
- 动态语言:在运行时代码可以根据某些条件改变自身结构,例如:Object-C、Python,JavaScript
静态语言:运行时结构不可变,例如:Java、C++、C
Java有一定的动态性,可以通过反射、字节码操作获得类似动态语言的特性 - 静态语言在编译时确定变量的数据类型;动态语言在运行时确定,变量使用之前不需类型声明
- 静态语言在编译时会进行类型匹配,不能赋不同类型的值,一般通过向上转型获得多态的效果;动态语言的变量类型运行期可变
- 动态语言代码量更少,可专注于业务逻辑
获取Class实例
一个Class对象对应加载到JVM中的一个.class文件