Java的静态加载和动态加载区别
2017-04-05 23:28
267 查看
一、首先是说java的静态加载:
1.创建了几个类,“老师”、“学生”、“职员”,每个人群有个属性方法,代码如下:
另外的两个类就不列举了,差不多的意思。
2.在main中引用,代码如下:
运行后,控制台的输入输出如下图:
接下来说动态加载
1.首先定义一个接口,接口代码如下:
2.让原先的每个类都实现这个接口,实现接口后类代码如下:
3.原先main中的run方法修改后如下:
最后控制台的运行效果和之前的一样,如下图
总结:
动态加载编译的class文件和成员比静态的要快一步,而且更有利于拓展,假如拓展别的人群属性,静态加载的弊端就马上呈现了,拓展起来很麻烦。要定义类、方法、还在调用的地方增加代码。
1.创建了几个类,“老师”、“学生”、“职员”,每个人群有个属性方法,代码如下:
public class Student { public void belongNature() { System.out.println("student 在读书……"); } }
另外的两个类就不列举了,差不多的意思。
2.在main中引用,代码如下:
public class JingLoad { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); System.out.println("请输入人群,获取属性……"); while(true){ String action=sc.nextLine(); if("exit".equals(action)){ return; } if(action.length()>0){ run(action); } } } static void run(String action){ switch (action) { case "Officer": // Officer的静态加载,先编译,在加载其class文件 //这就是静态加载,编译后加载方法,各成员到方法区,堆栈中去 Officer officer=new Officer(); officer.belongNature(); break; case "Student": Student student=new Student(); student.belongNature(); break; case "Teacher": Teacher teacher=new Teacher(); teacher.belongNature(); break; default: break; } } }
运行后,控制台的输入输出如下图:
接下来说动态加载
1.首先定义一个接口,接口代码如下:
public interface attribute { abstract void belongNature(); }
2.让原先的每个类都实现这个接口,实现接口后类代码如下:
public class Student implements attribute { @Override public void belongNature() { System.out.println("student 在读书……"); } }
3.原先main中的run方法修改后如下:
package load_kind; import java.util.Scanner; public class JingLoad { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); System.out.println("请输入人群,获取属性……"); while(true){ String action=sc.nextLine(); if("exit".equals(action)){ return; } if(action.length()>0){ run(action); } } } static void run(String action){ try{ //开始实现静态加载 Class clazz=Class.forName("load_kind."+action); //如下多态像是面向接口编程 attribute instance=(attribute)clazz.newInstance(); instance.belongNature(); }catch(Exception e){ e.printStackTrace(); }
最后控制台的运行效果和之前的一样,如下图
总结:
动态加载编译的class文件和成员比静态的要快一步,而且更有利于拓展,假如拓展别的人群属性,静态加载的弊端就马上呈现了,拓展起来很麻烦。要定义类、方法、还在调用的地方增加代码。
相关文章推荐
- Java静态代码块和静态方法的区别/类加载顺序
- java 动态初始化和静态初始化的区别
- java中的动态加载类与静态加载
- java经典讲解-静态代理和动态代理的区别
- Java 静态加载类与动态加载类(初步认识Java的反射)
- java面试笔试题:JSP中动态INCLUDE与静态INCLUDE的区别?
- 创建DLL文件 以及 动态加载和静态加载 以及两者之间的区别
- java中静态资源和动态资源的区别
- java梳理-静态代理和动态代理有什么区别
- java反射学习笔记(2)----java中的静态加载类和动态加载类
- java面试笔试题:JSP中动态INCLUDE与静态INCLUDE的区别
- JAVA动态加载类和静态加载类
- Java静态多态性和动态多态性有何区别
- java动态包含和静态包含的区别 ?
- JAVA类的静态加载和动态加载以及NoClassDefFoundError和ClassNotFoundException
- Java动态代理与静态代理的定义与区别??
- Java反射之静态加载和动态加载举例小记
- java 静态代码块 动态代码块 加载时间
- java中静态与非静态的区别和加载时他们执行情况详解
- JAVA静态加载和动态加载解释