//new创建对象是静态加载类,在编译时刻就需要加载所有的可能用到的类。而通过动态加载类可以解决此问题
class office{
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();
}
}
}
//以上代码在编译时就会报错,因为找不到Word类和Excel类以及其各自的 start()方法.
//若存在一个Word类,我们编译器还是不会通过编译,因为它会报没有Exce这个类l
class Word {
public void start(){
System.out.println("java-word");
}
}
//而现在我们想的是,因为有word类已经存在,当我们传的参数是Word时想让程序执行下去,输出相应得内容,显然采用上面静态加载类的方式是不可能实现的,这时候就需要采用动态加载类的方式。如下
class officeBetter{
public static void main(String[] args){
try{
//采用Class.forName(args[0])此种方式
Class c=Class.forName(args[0]);
//使用c.newInstance();实例化对象返回的是相应得对象,因为如果传入的命令行参数是Word的话,实例化的就是Word对象,而如果传入的是Excel,则实例化的对象就是Excel对象,所以此时返回的实例对象不能确定,那么这种情况就应该用一个公用的类,然后让Word类和Excel类实现接口自然就可以根据动态传入的命令行参数,实例化相应得对象了。
officeAble a=(officeAble)c.newInstance();
a.start();
}catch(Exception e){
e.printStackTrace();
}
}
}
Word类:
class Word implements officeAble{
public void start(){
System.out.println("java-word");
}
}
Excel类:
class Excel implements officeAble{
public void start(){
System.out.println("excel-start");
}
}
//如此以来程序也会变得比较耦合,也很容易扩展,如果再有一个其他的ppt类,就很容易实现了,只要ppt类实现officeAble接口,然后重写其中的方法即可。