Java动态加载类
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….”);} }