类加载学习
隐式动态性
也就是说当自己的程序用到NEW关键字时,就会载入需要载入的类....
显示的动态性
1. 一个是由java.lang.Class 的forName()方法
2.是由java.lang.ClassLoader 的loadClass()方法
写例子让自己理解下;
- interface Assembly{
- public void start();
- }
- public class Main{
- public static void main (String[] args) throws Exception{
- Class c=Class.forName(args[0]);
- Object o=c.newInstance();
- Assembly a=(Assembly) o;
- a.start();
- }
- }
- class A implements Assembly{
- public void start(){
- System.out.println("class a 使用");
- }
- }
- class B implements Assembly{
- public void start(){
- System.out.println("class b 使用");
- }
- }
- class C implements Assembly{
- public void start(){
- System.out.println("class c 使用");
- }
- }
动态载入,用到哪个类的时候就载入哪个类.
执行 java -verbose:class Main
- [Loaded Main from file:/C:/wang/]
- [Loaded java.lang.IndexOutOfBoundsException from shared objects file]
- [Loaded java.lang.ArrayIndexOutOfBoundsException from shared objects file]
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
- at Main.main(Main.java:6)
- [Loaded java.lang.Shutdown from shared objects file]
- [Loaded java.lang.Shutdown$Lock from shared objects file]
抛出异常了,界限异常.. 没有输入命令行参数......
接着 java -verbose:class Main A
- [Loaded java.security.cert.Certificate from shared objects file]
- [Loaded Main from file:/C:/wang/]
- [Loaded Assembly from file:/C:/wang/]
- [Loaded A from file:/C:/wang/]
- class a 使用
- [Loaded java.lang.Shutdown from shared objects file]
- [Loaded java.lang.Shutdown$Lock from shared objects file]
先载入主类.. 接口...
载入A类,即可以在不修改主类的情况下增加新的功能..(我没把类分开写.....)
如果写个类D继承了类A ... 会如何..
- class D extends A implements Assembly{
- public void start(){
- System.out.println("class d extends a implements assembly 使用して");
- }
- }
接着: java -verbose:class Main D
- [Loaded Main from file:/C:/wang/]
- [Loaded Assembly from file:/C:/wang/]
- [Loaded A from file:/C:/wang/]
- [Loaded D from file:/C:/wang/]
- class d extends a implements assembly 使用して
- [Loaded java.lang.Shutdown from shared objects file]
- [Loaded java.lang.Shutdown$Lock from shared objects file]
哦. 是先载入了父类的文件,再载入了子类.....
如果D->C->B->A 依此继承....
- [Loaded Main from file:/C:/wang/]
- [Loaded Assembly from file:/C:/wang/]
- [Loaded A from file:/C:/wang/]
- [Loaded B from file:/C:/wang/]
- [Loaded C from file:/C:/wang/]
- [Loaded D from file:/C:/wang/]
- class d extends a implements assembly 使用して
- [Loaded java.lang.Shutdown from shared objects file]
- [Loaded java.lang.Shutdown$Lock from shared objects file]
就按循序载入....
相关推荐
- **动态性**:运行时加载类、实例化对象等特性使Java程序具有高度灵活性。 #### 2. Java语言概述 - Java是一种跨平台的编程语言,最初是为了家电设备而设计。 - 作为一种面向对象的语言,Java的设计强调了封装、...
类加载器的学习是深入理解Java运行机制的关键,尤其对于系统级开发和框架设计而言更是如此。本文将主要围绕“黑马程序员------类加载器学习注意点”展开,探讨一些关键知识点。 首先,我们需要理解类加载器的基本...
类加载器的这种动态加载机制为Java提供了极高的灵活性,使得程序可以在运行时加载、替换或更新类。 类的生命周期包括以下几个关键阶段: 1. **加载**:加载阶段,类加载器根据类的全限定名称获取对应的二进制字节...
【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...
### Java基础学习笔记知识点 #### 一、Java学习路线概览 Java学习通常分为几个阶段,从基础到高级,逐步深化。以下是对给定文件中提到的学习路线的详细解析: ##### 第一阶段:Java基础 - **JAVASE**:Java标准版...
### 个人笔记--JAVA基础 #### 一、初识Java **1.1. Java语言是什么** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。它被设计为简单、面向对象、分布式、解释型、健壮、安全、与体系结构...
Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...
2. **面向对象编程**:Java是一种面向对象的语言,学习笔记会深入解释类、对象、封装、继承、多态等核心概念。了解如何定义和使用类,以及如何通过继承和多态来设计可复用和灵活的代码。 3. **异常处理**:Java的...
5. **动态性**:Java是动态的,它允许程序在运行时加载和使用新的类,这是C++等静态编译语言无法做到的。 6. **注释**:Java支持三种类型的注释:行内注释(//单行注释),多行注释(/* */)以及Javadoc注释(/** *...
这份"个人Java学习过程中所有学习笔记"包含了作者在学习Java时积累的宝贵经验,旨在帮助初学者或有经验的程序员巩固基础,提升技能。 笔记内容可能涵盖以下几个主要部分: 1. **Java基础**:这部分通常包括Java的...
Java面试题及学习笔记概述 Java作为一种广泛应用的编程语言,其面试题库广泛且深入,涵盖了从基础语法到高级特性的各个层面。本篇将基于常见的Java面试问题,结合学习笔记,深入探讨Java的核心概念和技术。 一、...
这篇学习笔记主要关注动态代理部分,虽然没有提供具体的压缩包文件内容,但根据标题和描述,我们可以深入探讨这两个概念。 **反射(Reflection)** 反射是Java语言的一个强大工具,它允许程序在运行时检查类、接口...
### Java SE - 马士兵笔记精要 #### 第1章 Java概述 - **Java语言的特点**: - **面向对象**:Java是一种完全支持面向对象编程的语言。 - **平台无关性**:通过Java虚拟机(JVM),Java可以在任何安装了JVM的...
### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...
### Java私塾学习笔记整理 #### 第一章:Java入门 **一、Java是什么?** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年推出。它旨在为跨平台开发提供一种通用的语言环境,使开发者能够在任何...
### Hibernate—我的Hibernate学习笔记 #### 一、对象持久化的理论与实践 ##### 对象持久化概念 对象持久化指的是将内存中的对象状态保存至外部持久性存储设备(如硬盘),以便于日后需要时能够恢复其状态。这一...
### Java学习笔记 #### Java的优势 1. **跨平台(平台=OS)可移植性** - **字节码文件**:Java程序被编译成字节码文件(`.class`),这些文件不包含任何特定于操作系统的内存布局信息。这意味着它们与操作系统和...
这份“非常详细JavaSE学习笔记.rar”压缩包显然是一份全面的Java SE学习资源,包含了从基础知识到高级特性的全方位讲解。下面,我们将详细探讨这份笔记可能涵盖的关键知识点。 1. **Java起源与环境搭建**:笔记可能...
这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...
本学习笔记将全面涵盖这些内容,帮助你构建坚实的Java编程基础。 1. **Java基本语法** - 变量:了解数据类型,如整型、浮点型、字符型、布尔型等,并学会声明和初始化变量。 - 运算符:掌握算术、比较、逻辑、位...