Java-Reflect专题学习一
1-1 Class类
Class类 1)在面向对象的世界里,万事万物皆对象。 类是对象,类是java.lang.Class类的实例对象。 There is a class named Class
除了基本的数据类型、静态成员不是对象,万事万物皆对象,而基本的数据类型可封装为包装类。
类是java.lang.class的对象
三种获取类类型的表示方式:
(1)通过隐含的静态成员变量class
Class c = Foo.class
(2)通过对象实例的getClass方法
Class c = foo1.getClass()
(3)通过Class中的forName方法 ,这个需要去捕获异常
Class c = Class.forName("hello.xiaoxi.Foo")
通过类类型去创建对象实例:
Foo f1 = (Foo)c.newInstance()
两点注意的是:Foo类需要
Java反射机制--动态加载类
编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 new 创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类 通过Class a=Class.forName(arg[0]);此时为动态加载,因为编译时不知道使用哪个类,因此编译没有加载任何类,通过编译。运行时,根据 Javac office.java word (word为arg[0],也是类类型),去确定a是哪个类。这就是动态加载。如果word不存在,此时运行会报错。这就是为何有时候会出现编译通过,运行报错的原因。 动态加载一个好处,就是可以随时增加需要编译的类。例如没有excel类,只有word类,也可以运行,需要excel类时再由程序员写此类(为了能统一控制,word类、excel类需要继承同一个父类或者继承同一个接口)。
浙公网安备 33010602011771号