动态加载类

Class.forName(类的全称);不仅表示类的类类型也表示动态加载类

 

要区分编译和运行 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类

 

new创建对象 是静态加载类 在编译刻就需要加载可能用到的类

 

所以我们希望用动态加载类 那么如何加载呢?

 

首先创建OfficeBetter.java

class OfficeBetter{

   public static void main(String[] args){

try{

//动态加载类,在运行时刻加载

Class c=Class.forName(args[0]);

}catch(Exception e)

{e.printStackTrace();}

   }

}

 

此时编译不会报错因为他不管你将要用到哪些类 但是当你运行时要用到具体的类了,如果没有则会报错 如下编译没问题 运行时需要用到Excel类 但是找不到

 

接下来创建对象

 

class OfficeBetter{

   public static void main(String[] args){

try{

//动态加载类,在运行时刻加载

Class c=Class.forName(args[0]);

 

/*通过类类型创建对象 (注意要往将要加载的类做强制转换),但是用到的类不同就有不同的转换,例如往Word做转换:Word w=(Word)c.newInstance();但是加载的类是Excel怎么办; 往Excel做转换:Excel e=(Excel)c.newInstance();但是加载的类是Word怎么办

所以要想让他们都能在这里用 就要给他们统一标准

*/

OfficeAble oa=(OfficeAble)c.newInstance();

Oa.start();

 

}catch(Exception e)

{e.printStackTrace();}

   }

}

 

 

接下来给Word和Excel制定一个共同的标准

创建接口 OfficeAble.java

Interface OfficeAble

{

Public void start();

}

这样的话就可以oa.start()了

 

 

创建Word.java 并让其遵循标准

class Word implementsOfficeAble

{

Public static void start()

{System.out.println(“Word….starts….”);}

}

 

 

创建Excel.java 并让其遵循标准

class Excel implements OfficeAble

{

Public static void start()

{System.out.println(“Excel….starts….”);}

}

猜你喜欢

转载自blog.csdn.net/qq_33188563/article/details/82154337