`
wang吖
  • 浏览: 235243 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

类加载-JAVA动态性-学习笔记2(转载)

    博客分类:
  • Jvm
 
阅读更多

类加载学习 
隐式动态性 
也就是说当自己的程序用到NEW关键字时,就会载入需要载入的类.... 

  显示的动态性 
1. 一个是由java.lang.Class 的forName()方法 
2.是由java.lang.ClassLoader 的loadClass()方法 


写例子让自己理解下; 

Java代码  收藏代码
  1. interface Assembly{  
  2.     public void start();  
  3. }  
  4. public class Main{  
  5.     public static void main (String[] args) throws Exception{  
  6.         Class c=Class.forName(args[0]);  
  7.         Object o=c.newInstance();  
  8.         Assembly a=(Assembly) o;  
  9.         a.start();  
  10.     }  
  11. }  
  12. class A implements Assembly{  
  13.      public void start(){  
  14.          System.out.println("class a 使用");  
  15.      }  
  16. }  
  17. class B implements Assembly{  
  18.     public void start(){  
  19.         System.out.println("class b 使用");  
  20.     }  
  21. }  
  22. class C implements Assembly{  
  23.     public void start(){  
  24.         System.out.println("class c 使用");  
  25.     }  
  26. }  



动态载入,用到哪个类的时候就载入哪个类. 

执行 java -verbose:class Main 

Java代码  收藏代码
  1. [Loaded Main from file:/C:/wang/]  
  2. [Loaded java.lang.IndexOutOfBoundsException from shared objects file]  
  3. [Loaded java.lang.ArrayIndexOutOfBoundsException from shared objects file]  
  4. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0  
  5.         at Main.main(Main.java:6)  
  6. [Loaded java.lang.Shutdown from shared objects file]  
  7. [Loaded java.lang.Shutdown$Lock from shared objects file]  



抛出异常了,界限异常..  没有输入命令行参数...... 

接着 java -verbose:class Main A 

Java代码  收藏代码
  1. [Loaded java.security.cert.Certificate from shared objects file]  
  2. [Loaded Main from file:/C:/wang/]  
  3. [Loaded Assembly from file:/C:/wang/]  
  4. [Loaded A from file:/C:/wang/]  
  5. class a 使用  
  6. [Loaded java.lang.Shutdown from shared objects file]  
  7. [Loaded java.lang.Shutdown$Lock from shared objects file]  



先载入主类.. 接口... 
载入A类,即可以在不修改主类的情况下增加新的功能..(我没把类分开写.....) 

如果写个类D继承了类A ...  会如何.. 

Java代码  收藏代码
  1. class D extends A implements Assembly{  
  2.     public void start(){  
  3.         System.out.println("class d extends a implements assembly 使用して");  
  4.     }  
  5. }  


接着: java -verbose:class Main D 

Java代码  收藏代码
  1. [Loaded Main from file:/C:/wang/]  
  2. [Loaded Assembly from file:/C:/wang/]  
  3. [Loaded A from file:/C:/wang/]  
  4. [Loaded D from file:/C:/wang/]  
  5. class d extends a implements assembly 使用して  
  6. [Loaded java.lang.Shutdown from shared objects file]  
  7. [Loaded java.lang.Shutdown$Lock from shared objects file]  



哦. 是先载入了父类的文件,再载入了子类..... 

如果D->C->B->A 依此继承.... 

Java代码  收藏代码
  1. [Loaded Main from file:/C:/wang/]  
  2. [Loaded Assembly from file:/C:/wang/]  
  3. [Loaded A from file:/C:/wang/]  
  4. [Loaded B from file:/C:/wang/]  
  5. [Loaded C from file:/C:/wang/]  
  6. [Loaded D from file:/C:/wang/]  
  7. class d extends a implements assembly 使用して  
  8. [Loaded java.lang.Shutdown from shared objects file]  
  9. [Loaded java.lang.Shutdown$Lock from shared objects file]  



就按循序载入....

分享到:
评论

相关推荐

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》适合java的初中级读者,以及广大java应用开发人员。 作译者 林信良(网名:良葛格) 学历:台湾大学电机工程学系 经历:台湾升阳教育训练技术顾问、专业讲师,oracle授权训练中心讲师 ...

    Java学习笔记

    类加载器 ClassLoader 字节码校验器 解释执行器 (翻译)逐行的解释执行代码 2.安全 健壮 3.面向对象 面向过程: 程序:函数+变量 (算法+数据结构) 面向对象: 如:SmallTalk 程序:对象和对象相互之间的“通讯” ...

    若依RuoYi框架剖析笔记,该笔记是在学习江南一点雨所录课程再结合自己的理解所写

    15、动态菜单加载思路 16、Vue3中的数据加载 17、Promise 18、Vue3和Vue2的差异 19、Vue3中自定义插件 20、Vue3自定义指令 21、Vite 22、工作流workflow 23、流程图绘制 24、Flowable 源码编译 25、流程定义与流程...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    记录各种学习笔记(算法、Java、数据库、并发......).zip

    动态性:Java可以通过反射、注解等机制实现在运行时动态加载类和修改行为,增加了程序的灵活性。 综上所述,Java凭借其强大的特性和广泛的适用范围,在企业级应用、互联网服务、移动开发等领域均扮演着举足轻重的...

    关于学习笔记整理,包括Linux、Java、数据结构和算法,和一些IT工具的使用.zip

    动态性:Java可以通过反射、注解等机制实现在运行时动态加载类和修改行为,增加了程序的灵活性。 综上所述,Java凭借其强大的特性和广泛的适用范围,在企业级应用、互联网服务、移动开发等领域均扮演着举足轻重的...

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    mybatis学习笔记

    8.2 第二步:使用java类生成mapper文件: 72 8.3 第三步:拷贝生成的mapper文件到工程中指定的目录中 73 8.3.1 Mapper.xml 73 8.3.2 Mapper.java 73 8.3.3 第四步Mapper接口测试 73 8.4 逆向工程注意事项 74 8.4.1 ...

    swing界面设计之JTree

    (十七) Swing 学习笔记 108 Swing API 包括18个公共包: 108 例程1.1 HelloWorldSwing.java 109 例程2.2 HelloWorldJFrame.java 110 (十八) 动态加载文件树的java程序 111 FileSystemTree.java源代码 112 //内部类 ...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    深入理解计算机系统(英文版)

    本书的最大优点是帮助读者理解概念,让读者很清楚地在脑海中构造一个层次型的计算机系统,从最低层数据在内存中的表示(如我们一直陌生的浮点数表示),到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库...

    CSAPP(深入理解计算机系统)

    本书的最大优点是帮助读者理解概念,让读者很清楚地在脑海中构造一个层次型的计算机系统,从最低层数据在内存中的表示(如我们一直陌生的浮点数表示),到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库...

Global site tag (gtag.js) - Google Analytics