当前位置: 首页 > 知识库问答 >
问题:

Java类加载器俄罗斯娃娃

逑彬炳
2023-03-14

是否有可能在Java中创建一个加载(或更恰当地重新加载)自己的类加载器?

它最初可以由默认的类加载器加载。我想象一个Java系统能够在运行时通过编译和加载循环进行自我修改。如果是这样,您可以创建许多从您的俄罗斯玩偶加载器继承的对象,以动态更新其逻辑。

共有1个答案

景承教
2023-03-14

您可以在另一个 ClassLoader 中重新加载其限定名称不以 java 开头的每个类的代码,但这不会重新加载该类。相反,它会创建一个具有相同限定名称但定义不同的 ClassLoader 的新类

请参阅 Java® 虚拟机规范 §5.3。创建和加载

类加载器L可以通过直接定义它或委托给另一个类加载器来创建C。如果L直接创建C,我们说L定义了C,或者等效地说,LC的定义加载器。
...
在运行时,类或接口不仅由其名称决定,而是由一对决定:它的二进制名称(§4.2.1)和它的定义类加载器。

因此,当您使用不同的类加载器实例定义一个与现有类具有相同限定名称的类时,实际上是在创建一个新的运行时类。当然,该类可以扩展类加载器,并可用于再次定义具有相同限定名称的新类。

这些新类是否具有相同的字节码,是修改版本还是完全不相关的,都无关紧要。

这与大多数支持重新加载模块的框架的工作方式很接近。他们创建了一个新的类加载器(但不是旧类的子类),它将“重新加载”模块的所有类,包括未更改的类,因为从技术上讲,它创建了一个新的不相关类的动物园,这些类必须相互链接。
然后旧类必须超出范围,这需要一些小心。只有当其所有类都未使用时,类加载器才能被垃圾收集。一个类的单个实例可以阻止其类加载器和所有定义的类被垃圾收集......

 类似资料:
  • 本章实现一个俄罗斯方块游戏。 简介 俄罗斯方块游戏是有史以来最受欢迎的电脑游戏之一。最初的游戏是由俄罗斯程序员 Alexey Pajitnov 在1985年设计并编写的。从那时起,《俄罗斯方块》便以多种形式出现在几乎所有平台上。 俄罗斯方块被称为掉落方块拼图游戏。在这款游戏中,我们有7种不同的形状,叫做砖块(tetrminoes):S形、Z形、T形、L形、线形、反向L形和方形。每个形状都是由四个正

  • 本章我们要制作一个俄罗斯方块游戏。 Tetris 译注:称呼:方块是由四个小方格组成的 俄罗斯方块游戏是世界上最流行的游戏之一。是由一名叫Alexey Pajitnov的俄罗斯程序员在1985年制作的,从那时起,这个游戏就风靡了各个游戏平台。 俄罗斯方块归类为下落块迷宫游戏。游戏有7个基本形状:S、Z、T、L、反向L、直线、方块,每个形状都由4个方块组成,方块最终都会落到屏幕底部。所以玩家通过控制

  • 趣味俄罗斯方块 功能结构图 业务流程图 游戏欢迎界面 代码实现 #include <stdio.h> #include <time.h> #include <windows.h> #include <conio.h> /*******宏 定 义*******/ #define FrameX 13 //游戏窗口左上角的X轴坐标 #define FrameY 3

  • 本章我们要制作一个俄罗斯方块游戏。 Tetris 译注:称呼:方块是由四个小方格组成的 俄罗斯方块游戏是世界上最流行的游戏之一。是由一名叫 Alexey Pajitnov 的俄罗斯程序员在 1985 年制作的,从那时起,这个游戏就风靡了各个游戏平台。 俄罗斯方块归类为下落块迷宫游戏。游戏有 7 个基本形状:S、Z、T、L、反向 L、直线、方块,每个形状都由 4 个方块组成,方块最终都会落到屏幕底部

  • 利用cocos2d-x实现俄罗斯方块游戏的简单功能。其中只实现了一种方块,有兴趣的话可以自己添加一些块。只能在Retina硬件模式下才能正常显示。 作者说:如果有好的建议亲记得联系我632272261@qq.com。 [Code4App.com]

  • 我想用这个方案来格式化俄罗斯农民乘法:问题是它不能处理更大的数字。 但当我的数字较大时,我的格式不匹配: 它应该是这样的: 他们是一种为变量设置格式的方法吗?我目前已经用-和M硬编码了它? 这是我当前的代码: }