动态加载

这里的动态指的是类的动态装载,我的理解是在程序运行时才确定要把哪个类给装载进去。但实际上真正的动态要把这个简单的理解要丰富的多。因为动态装载可以发生在主程序,当需要的时候去把这个装载进来,这个类可以是需要使用的时候才去编译的。所以动态装载能够是程序变得更加灵活。

下面我们先了解一下静态绑定和动态绑定。比如我有一个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-->

你可能感兴趣的:(动态绑定,动态,动态加载)