文章目录

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….”);} }