Class.forName动态加载类

Class.forName("类的全称")

Class.forName("类的全称")不仅仅代表类的类类型 还代表了动态加载类

动态加载和静态加载

编译时刻加载类是静态加载类、运行时刻加载类是动态加载类 注意:区分编译 运行的区别

静态加载

new 类的实例对象 是编译时刻的静态加载类

运行时刻

public class Office {
 
    public static void main(String[] args) {
        
        if(("Word").equals(args[0])){
            Word w=new Word();
            w.start();
        }
        if(("Excel").equals(args[0])){
            Excel w=new Excel();
            w.start();
        }
    }
}

编译的时候,类找不到,方法找不到 ,编译不通过

Word 不一定用 ,Excel不一定用

存在word ,但还是用不了,因为我们类是做静态加载 编译时刻就需要加载所有可能使用到的类 但是其中有一个不存在或者错误 就无法编译通过

动态加载类 (不能因为一个影响所有)

如果我们需要存在一个功能就用一个功能呢 ?而不是一个功能有问题,其他功能就无法使用?

所以我们需要动态加载类,在运动时加载,

动态加载类的方法

Class.forName("类的全名")

使用原则: 功能性的类使用动态加载

使用技巧

相同的功能 使用接口去指定标准,比如PPT ,EXCEL ,Word

package com.javatest;

public interface Officeable {
 
	
	public void start();
}

package com.javatest;

public class Word  implements Officeable{



	@Override
	public void start() {
		
		System.out.println("Excel ");
		
	}

}


package com.javatest;

public class Office {
 



	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
		
		String str="Excel";
		if(("Word").equals(str)){
			Word w=new Word();
			w.start();
		}
	  
		if(("Excel").equals(str)){
			

			Class c1= Class.forName("com.javatest.Excel");
			Officeable e=(Officeable)c1.newInstance(); 
			
		}
			
			
		
	}
}

转载于:https://my.oschina.net/2016jyh/blog/1787573

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值