课程名称:反射
课程章节:第一章
主讲老师:Cedar
课程内容:
Class类的使用
class:面向对象的世界,万事万物都可以是对象
类是对象,类是java.lang.Class类的实例对象。
类如何表示
Class.forName("类的全称")
public class ClassDemo1 {
public static void main(String[] args) throws Exception {
// 普通模式:实例化对象
Foo foo = new Foo();
// 任何一个类都是Class的实例对象
// 1:第一种表示方式,实际告诉我们任何一个类都有一个隐含的静态成员变量class
Class c1 = Foo.class;
// 2:第二种表达方式 已知该类对象,通过getClass方法
Class c2 = foo.getClass();
/**
* c1,c2表示了Foo类的类类型
* 万事万物皆对象
* 类也是对象,是Class类的实例对象
* 这个对象我们成为该类的类类型
*/
// 3:第三种表达方式
Class c3 = null;
c3 = Class.forName("com.example.study.Reflect.Foo");
// 不管c1,c2,c3都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象
System.out.println(c1 == c2);
System.out.println(c2 == c3);
// 我们可以通过类的类类型创建该类的对象实例--->通过c1,c2,c3创建Foo对象
Foo foo1 = (Foo) c1.newInstance(); //需要有无参构造方法
foo1.hh();
}
}
new 创建对象,是静态加载类,在编译时刻就需要加载所有的可能使用到的类
通过动态加载类可以解决静态类加载不到的问题——这样编译不会爆出任何错误
不仅代表了类的类类型,还代表了动态加载类
要学会区分编译,运行
编译时刻加载类是静态加载类,运行时加载类是动态加载类
课程收获:
之前一直光知道反射,却不知道反射如何使用,现在知道了动态加载类的优势以及编译的话,是会让静态加载爆出一系列问题,很多时候,动态加载会更好的处理和解决问题!
革命尚未成功,同志还需努力!