您的位置:首页 > 其它

反射 学习笔记之动态加载类

2015-04-09 20:49 316 查看
1 Class.forName("类的全名")不仅表示了类的类类型,还代表了动态加载类

2 编译时刻加载类称之为静态加载,运行时刻加载类是动态加载类

3 new 对象是静态加载类,在编译时刻就需要加载所有的可能使用的类(编译时刻加载)

用Edit写一个reflectDemo2,里面有俩个命令行参数判断的代码word,execl,我们在同一个文件夹下写一个word类不写execl类,我们假如只想运行word不想运行execl,但是很不幸,由于这是静态加载,javacreflectDemo2编译时是将其中所有类都要加载,只有word但是找不到execl类直接编译出错!

class  reflectDemo2
{
public static void main(String[] args)
{
if("word".equals(args[0]))
{
word w = new word();
w.start();
}
if("word".equals(args[0]))
{
excel e = new excel();
e.start();
}
}
}


class word
{
start()
{
System.out.println("Word!");
}
}


运行就出错了


下面我们使用动态加载定义better类,依然还是只定义了一个word类,为了方便扩展,定义了一个接口

class better
{
public static void main(String[] args)
{
try
{
//动态加载类
Class c = Class.forName(args[0]);
//通过类类型,创建对象
Office oa = (Office)c.newInstance();
oa.start();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
此时word继承Office接口

class word implements Office
{
public void start()
{
System.out.println("Word!");
}
}


接口如下

interface Office
{
public void start();
}


依然是只有一个word类,没有excel类这次使用动态加载这次可以顺利编译成功了!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: