Class.forName("类全名")
1.不仅表示类类名,还表示动态加载类
2.编译时是静态加载类,运行时是动态加载类
由于用IDE无法很好的展示编译过程,所以用cmd javac编译.java文件
静态加载类:
Office.java
class Office
{
public static void main(String[] args) {
if ("Word".equals(args[0]))
//new是静态加载类,在编译的时候就要实现所有类
//这意味着当有一个类不能加载成功
//那么其他的类都无法加载成功
//动态加载类就能实现只有当使用这个类的时候才去加载这个类
//
{
Word w = new Word();
w.start();
}
if ("Excel".equals(args[0]))
{
Excel e = new Excel();
e.start();
}
}
}
Word.java
class Word implements OfficeAble
{
public static void start(){
System.out.println("Word start");
}
}
即使有Word类Office.java也不能完成编译!
动态加载类:
OfficeBetter.java
class OfficeBetter
{
public static void main(String[] args) {
//动态加载类,在运行时加载类
try{
Class c = Class.forName("args[0]");
//通过类类型,创建该类的对象,
//如果只是创建一个Word或者Excel的对象
//那就只能使用这一类的对象的方法(只能使用Word或者Excel的方法)
//所以创建个统一标准
OfficeAble oa = (OfficeAble)c.Instance();
oa.start();
}
catch(Exception e){
e.printStackTrace();
}
}
}
OfficeAble.java
interface OfficeAble{
public void start();
}
使用 javac OfiiceBetter.java Word 即可调用star