1,类是对象,类是 java.lang.Class 类的实例对象
2,Class 类的构造方法只能 jvm 访问。
3,定义一个类并实例化
Foo foo1 = new Foo();
任何一个类都是 Class 类的实例对象,这个实例对象有三种表示方法
(1),Class c1 = Foo.class //实际告诉我们任何一个类都有一个静态成员变量 class
(2),Class c2 = foo1.getClass() //通过调用该类的对象的 getClass 方法
(3),Class c3 = null ;
c3 = Class.forName( pageName.className);
c1 , c2 ,c3 表示了 Foo 类的类类型( class type ),不管 c1 还是 c2 都代表 Foo 的类类型,一个类只能是Class的一 个实例对象,所以 c1 == c2 返回的是 true 。
4,通过类类型构造类的对象
Foo foo1 = ( Foo ) c1.newInstance() //前提是该类有无参的构造方法
5,动态加载与静态加载
new 创建对象是静态加载类,在编译过程中会加载所有可能使用到的类。
class Test{
public static void main (String [] args){
if("word".equals(args[0])){
Word word = new Word();
word.start()
}
if("excel".equals(args[0])){
Excel excel = new Excel();
excel.start();
}
}
class Word{
public void start(){
}
}
}
虽然不一定用到所有方法,但是由于Excel方法没有定义,编译不会通过,如果有一个项目有100个功能,有一个有问 题,那么整个项目就不能部署了。 可以通过动态加载改进:
//动态加载类,在运行时刻加载
Class c = Class.forName( args[0] );
//通过类类型创建该类对象
Word word = c.newInstance();
//但是不确定要创建的是Word还是Excel,可以给两者指定一个标准
(1) interface Office {
public void start ();
}
(2)class Word implements Office{
public void start(){
}
}
(3)Office of = c.newInstance();
6,应用: 软件版本升级
版本更新不需要改动代码,只需加入新功能并实现 Office 接口即可