动态加载
程序员文章站
2022-05-28 11:18:16
...
这里的动态指的是类的动态装载,我的理解是在程序运行时才确定要把哪个类给装载进去。但实际上真正的动态要把这个简单的理解要丰富的多。因为动态装载可以发生在主程序,当需要的时候去把这个装载进来,这个类可以是需要使用的时候才去编译的。所以动态装载能够是程序变得更加灵活。
下面我们先了解一下静态绑定和动态绑定。比如我有一个student接口。如下
/**
* 这是一个学生接口
*接口里面有一个获得学生名字和学生成绩的方法
*/
public interface Studtent {
public String getName();//获得学生名字的方法
public double getSorce();//获得学生成绩的方法
}
然后我在写一个大学生类,它实现类这个学识接口
public class Unistudent implements Studtent{
private String name;//学生的名字
Private double socre;//学生的成绩
public Unistudent (){
This.name=”大学生”;
This.score=60;
}
/**
* 实现获得学生的姓名的方法
*/
public String getName() {
return name;
}
/**
* 获得学生成绩的方法
*/
public double getSorce() {
return socre;
}
}
然后我再实现一个小学生类
<!--EndFragment-->
public class Pristudent implements Studtent{
private String name;//学生的名字
Private double socre;//学生的成绩
public Pristudent (){
This.name=”小学生”;
This.score=90;
}
/**
* 实现获得学生的姓名的方法
*/
public String getName() {
return name;
}
/**
* 获得学生成绩的方法
*/
public double getSorce() {
return socre;
}
}
当我要创建一个学生对象是我可以这样来创建
Studtent stu=new Unistudent();
stu.getName();
这就是静态绑定,即编译的时候就确定了它的类型,如果需要该成一个小学生类,我不需得改变这段代码,然后重新编译。
Studtent stu=new Prstudent();
stu.getName();
这显然不是很好,可不可以不改变代码,也不用重新编译,就可以实现呢,当然是可以的,这得用到动态编译。
Class c=Class.forName(classname);//装载类
Object obj=c.newInstance();//调用无参构造方法生产对象
Student stu=(Student )obj;//强制转型
stu.getName();
同过上面的方法,只需要传入类名(classname),就可以实现动态加载我们所需要的类了。
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment--><!--EndFragment--><!--EndFragment-->
下一篇: Git合并指定文件到其他分支