`
wang吖
  • 浏览: 239940 次
  • 性别: 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学习笔记

    - **动态性**:运行时加载类、实例化对象等特性使Java程序具有高度灵活性。 #### 2. Java语言概述 - Java是一种跨平台的编程语言,最初是为了家电设备而设计。 - 作为一种面向对象的语言,Java的设计强调了封装、...

    黑马程序员------类加载器学习注意点

    类加载器的学习是深入理解Java运行机制的关键,尤其对于系统级开发和框架设计而言更是如此。本文将主要围绕“黑马程序员------类加载器学习注意点”展开,探讨一些关键知识点。 首先,我们需要理解类加载器的基本...

    java 类加载器学习笔记1

    类加载器的这种动态加载机制为Java提供了极高的灵活性,使得程序可以在运行时加载、替换或更新类。 类的生命周期包括以下几个关键阶段: 1. **加载**:加载阶段,类加载器根据类的全限定名称获取对应的二进制字节...

    java学习笔记markdown

    【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...

    java基础学习笔记

    ### Java基础学习笔记知识点 #### 一、Java学习路线概览 Java学习通常分为几个阶段,从基础到高级,逐步深化。以下是对给定文件中提到的学习路线的详细解析: ##### 第一阶段:Java基础 - **JAVASE**:Java标准版...

    个人笔记--JAVA基础

    ### 个人笔记--JAVA基础 #### 一、初识Java **1.1. Java语言是什么** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。它被设计为简单、面向对象、分布式、解释型、健壮、安全、与体系结构...

    (完整版)最全的java学习笔记(必看).pdf

    Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...

    Java学习笔记(源码)

    2. **面向对象编程**:Java是一种面向对象的语言,学习笔记会深入解释类、对象、封装、继承、多态等核心概念。了解如何定义和使用类,以及如何通过继承和多态来设计可复用和灵活的代码。 3. **异常处理**:Java的...

    个人Java学习过程中所有学习笔记

    这份"个人Java学习过程中所有学习笔记"包含了作者在学习Java时积累的宝贵经验,旨在帮助初学者或有经验的程序员巩固基础,提升技能。 笔记内容可能涵盖以下几个主要部分: 1. **Java基础**:这部分通常包括Java的...

    java面试题 学习笔记

    Java面试题及学习笔记概述 Java作为一种广泛应用的编程语言,其面试题库广泛且深入,涵盖了从基础语法到高级特性的各个层面。本篇将基于常见的Java面试问题,结合学习笔记,深入探讨Java的核心概念和技术。 一、...

    java语言反射与动态代理学习笔记2(动态代理部分)

    这篇学习笔记主要关注动态代理部分,虽然没有提供具体的压缩包文件内容,但根据标题和描述,我们可以深入探讨这两个概念。 **反射(Reflection)** 反射是Java语言的一个强大工具,它允许程序在运行时检查类、接口...

    java-SE-马士兵笔记word

    ### Java SE - 马士兵笔记精要 #### 第1章 Java概述 - **Java语言的特点**: - **面向对象**:Java是一种完全支持面向对象编程的语言。 - **平台无关性**:通过Java虚拟机(JVM),Java可以在任何安装了JVM的...

    阿里P8 架构师整理Java学习笔记.pdf

    ### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...

    java私塾学习笔记整理

    ### Java私塾学习笔记整理 #### 第一章:Java入门 **一、Java是什么?** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年推出。它旨在为跨平台开发提供一种通用的语言环境,使开发者能够在任何...

    Hibernate---我的Hibernate学习笔记.doc

    ### Hibernate—我的Hibernate学习笔记 #### 一、对象持久化的理论与实践 ##### 对象持久化概念 对象持久化指的是将内存中的对象状态保存至外部持久性存储设备(如硬盘),以便于日后需要时能够恢复其状态。这一...

    Java学习笔记

    ### Java学习笔记 #### Java的优势 1. **跨平台(平台=OS)可移植性** - **字节码文件**:Java程序被编译成字节码文件(`.class`),这些文件不包含任何特定于操作系统的内存布局信息。这意味着它们与操作系统和...

    非常详细javaSE学习笔记.rar

    这份“非常详细JavaSE学习笔记.rar”压缩包显然是一份全面的Java SE学习资源,包含了从基础知识到高级特性的全方位讲解。下面,我们将详细探讨这份笔记可能涵盖的关键知识点。 1. **Java起源与环境搭建**:笔记可能...

    java之jvm学习笔记五(实践写自己的类装载器)

    这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...

    java从0基础学习笔记

    本学习笔记将全面涵盖这些内容,帮助你构建坚实的Java编程基础。 1. **Java基本语法** - 变量:了解数据类型,如整型、浮点型、字符型、布尔型等,并学会声明和初始化变量。 - 运算符:掌握算术、比较、逻辑、位...

Global site tag (gtag.js) - Google Analytics