动态加载

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要添加vendor动态加载模块规则,可以按照以下步骤进行操作: 1. 在设备的/vendor/etc/permissions目录下创建一个XML文件,例如:com.example.module.xml。 2. 在XML文件中定义模块的包名和相关权限,例如: ``` <permissions> <library name="com.example.module" file="/vendor/lib/com.example.module.so" ... /> <permission name="com.example.module.permission.ACCESS_MODULE" ... /> </permissions> ``` 其中,library标签用于指定模块的名称和位置,permission标签用于指定模块的相关权限。 3. 将XML文件添加到设备的/vendor/etc/permissions目录中。 4. 在设备的/vendor/etc/init目录下创建一个rc文件,例如:com.example.module.rc。 5. 在rc文件中定义模块加载的规则,例如: ``` service com.example.module /system/bin/app_process -Djava.class.path=/vendor/app/com.example.module.jar /vendor/bin/com.example.module classpath com.example.module user system group system ``` 其中,service标签用于定义模块的服务名称和启动命令,classpath标签用于指定模块的类路径,user和group标签用于指定模块的用户和组。 6. 将rc文件添加到设备的/vendor/etc/init目录中。 7. 重启设备,模块将会被动态加载并运行。 需要注意的是,以上操作需要在具有root权限的设备上进行。同时,添加模块时需要确保模块的名称、位置、权限等信息都是正确的,否则可能会导致模块加载失败或出现其他问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值