微网站是什么意思,云南信息港,站群管理,免费商用cmsJava中我们一般会使用new关键字实例化对象然后调用该对象所属类提供的方法来实现相应的功能#xff0c;比如我们现在有个主类叫Web类这个类中能实现各种方法#xff0c;比如用户注册、发送邮件等功能#xff0c;代码如下#xff1a; 1 /*2 * web功能实现类3 */4 public c… Java中我们一般会使用new关键字实例化对象然后调用该对象所属类提供的方法来实现相应的功能比如我们现在有个主类叫Web类这个类中能实现各种方法比如用户注册、发送邮件等功能代码如下 1 /*2 * web功能实现类3 */4 public class Web {5 6 public static void main(String[] args) {7 //每次有新功能都需要重新加载8 if(UserReg.equals(args[0])) {9 UserReg ur new UserReg();
10 ur.action();
11 }
12 if(SendEmail.equals(args[0])) {
13 SendEmail se new SendEmail();
14 se.action();
15 }
16
17
18 }
19
20 } 上面的代码简单的通过命令行的参数进行功能的调用当然扩展到web的url参数原理也完全一样通过代码可以看到我们需要调用某一个功能则必须实例化该功能所在的对象并且每当添加一个新功能时必须再写一个if语句进行添加并不能动态扩展假设当我们只有UserReg类时SendEmail类正在开发中那么这两个功能都是无法使用的因为如果实例化一个不存在的类时编译器会报错代码根本无法通过编译。这些所说的就是Java的静态加载静态加载的含义就是在程序的编译阶段进行加载当出现任何类不存在或者方法不存在的错误时编译都不通过这就是Java中的静态加载 那么与静态加载相对应的动态加载的含义就是在程序运行时真正的执行代码编译过程不进行任何检查这样就避免了上面的问题实现方式就是通过类的反射我们改进上面的执行类为动态加载的代码如下 1 /*2 * web功能实现类3 * 动态加载举例4 */5 public class Web {6 7 public static void main(String[] args) {8 try {9 Class? w Class.forName(net.zengzhiying.dynamicloading. args[0]);
10 IWeb i (IWeb) w.newInstance();
11 i.action();
12 } catch (ClassNotFoundException e) {
13 e.printStackTrace();
14 } catch (InstantiationException e) {
15 e.printStackTrace();
16 } catch (IllegalAccessException e) {
17 e.printStackTrace();
18 }
19 }
20
21 } 上面代码就是通过forName方法进行反射从而动态加载类w就是对应类的类类型同时也是Class的对象所以从某种意义上来说万事万物皆是对象类也是对象类对象和类的对象是严格区分的类对象也就是类类型那么使用类类型的newInstance方法可以创建该类类型的类的对象另外为了解决每次实例化对象类都不同的问题这里使用的父接口来统一声明我们需要任何功能只需要实现IWeb接口即可不同功能模块由不同的程序员实现也是没问题的或者使用父类或者抽象类来统一声明子类中进行方法的重写或实现也可以总之这个地方就是利用的多态的思想来实现IWeb接口代码如下 1 public interface IWeb {
2 public void action();
3 } 那么我们现在实现其中的模块 UserReg.java 1 public class UserReg implements IWeb {
2
3 public void action() {
4 System.out.println(我实现了用户注册的功能);
5 }
6 } SendEmail.java 1 public class SendEmail implements IWeb {
2 public void action() {
3 System.out.println(我实现了发送电子邮件的功能);
4 }
5 } 以上这些代码通过编译是没有任何问题的那么执行的时候我们使用命令行执行来传参数eclipse不能直接执行效果如下 通过执行可以看到很容易的通过参数实现了不同的功能操作对于不存在的功能那么很显然会抛出异常因为编译阶段没有经过严格的验证所以抛出异常也是必然的实际开发中我们要进行恰当的异常处理这样就用动态加载实现了功能模块的无限扩展我们后来添加UserLogin用户登录模块或者添加UserLogout用户退出模块完全不必要修改Web主类中所有的代码只是都实现IWeb接口即可这种动态加载类的思想在框架底层应用中也是经常用到的。