欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

动态加载

程序员文章站 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-->