当前位置:首页 > 虚拟机 > 正文

java 虚拟机的关键实现(java虚拟机教程图解)

反射在java底层是怎样实现的类加载器系统:
Java虚拟机有两个类加载器:启动类加载器和自定义类加载器。前者是jvm的一部分,后者是Java程序的一部分。另一个类加载器被放置了一个您不理解的名称。
类传输子系统包括来自Java和lang库的其他几个部分的类。例如,自定义类加载器必须派生自oader。ClassLoader上定义的方法为程序提供了访问类加载器机制的接口。
事实上,Java具有三个内置的类加载器。
1)BootstrapClassLoader这个加载器是用C++编写的,这对于一般开发来说是不常见的。
2)ExtensionClassLoader用于加载扩展类。通常,这对应于jre\lib\ext目录中的类。
3)AppClassLoader加载类路径中指定的类。最常的装载机。这也是Java的默认加载器。
加载工作流程:查找并加载类型的二进制数据。
链接:检查分析准备情况。
初始化:将类变量初始化为正确的初始值。
类的类加载器中的protectedfinalClassfindSystemClass(Stringname)。它接受一个字符串作为参数。
2.倒影是一面镜子。显示该类的字符。
程序中获取类对象有三种方式:
第一,编译时类名未知,但可以获取类名。类class的静态方法forname()获取类对象如下:classc=e("检索到的类名的全称包括所属的项目和包");
第二步是检索对象的类时。可以直接使用对象的getclass();方法来获取某个类的类对象,如下所示:
classc=ss();
第三种方法是,如果知道类名,则可以直接使用来获取该类的类对象。Masu。
示例:classc=;
3.反射加载过程:
除了系统类、扩展库、类路径的自定义加载之外.Java还支持动态扩展。这包括决定使用哪种类型。运行时,它们的加载和使用。Java程序可以通过反射的forName()方法或用户定义的loadClass()方法自动扩展。
供课堂使用。forName()有两种主要形式:
staticClass
forName(StringclassName)
Class或返回与接口关联的类对象。
staticClass
forName(Stringname,booleaninitialize,ClassLoaderloader)
使用指定的类加载器指定字符串名称的类或返回与接口关联的类对象。
三个参数说明如果initialize设置为true,则类型为:forName()方法在返回之前已连接并初始化。如果为false,则加载该类型并可以连接该类型,但不会显式初始化。如果loader为null,则将使用默认加载程序,或者您可以选择自定义加载程序。
两个forName()方法都返回对表示正在加载的类型的Class实例的引用。如果无法加载,则抛出ClassNotFoundException。
如果使用用户定义的加载器,则必须调用loadClass()方法。
Class
loadClass(Stringname)
加载具有指定
二进制名称的类。
protectedClass
loadClass(Stringname,booleanresolve)
加载具有指定
二进制名称的类。
这两个方法用于加载请求的新类型。如果没有找到,则抛出ClassNotFoundException。

支持java的手机一定实现了java虚拟机么?什么是Java
人们已经习惯使用Java这个术语来涵盖各种Java技术。Java技术包括Java编程语言、支持类库和Java虚拟机(JavaVirtualMachine,JVM)。
Java技术使用Java模型来实现Java程序的执行。典型的Java模型将使用多个层(也称为底层)。Java程序通过称为Java虚拟机的底层与硬件隔离。图1.1显示了Java模型。
图1.1Java模型
Java流行的原因有很多。首先,Java是一种跨平台语言。Java多平台功能的关键元素是对等方法,如图1.1所示。Peer方法提供应用程序接口(ApplicationProgramInterface,API)。
该接口的目标是提供从高级Java应用程序编程接口到低级操作系统子例程的映射。Peer方法提供了一种实现可移植操作系统接口的方法。
操作系统软件接口库提供了ANSIC、C++或FORTRAN中不可用的编程环境。该环境提供了程序的外观和感觉。比如C++程序员在Windows下编程,编程环境就像Windows编程环境。即可以调用微软基类。如果你是在UNIX下编程,编程环境就像UNIX环境一样,即必须调用X-Window库子程序。
Java的独特之处在于它能够提供可移植操作系统软件接口。例如,无论您使用哪种操作系统,用Java编写一个显示对话框的程序都是一样的。然而,Java的可移植性也可能受到库的跨平台支持的限制。在这种情况下,使用不可移植库的Java程序将不再是可移植的。例如,有人在Java中创建了一个指向C库子例程的链接。为了使Java具有可移植性,这些子例程必须在其他平台上可用。
将Java视为“一次编译,走遍世界”类型的语言是错误的。Java需要在每个平台上进行测试,有时还需要调试。在一个平台上运行良好的程序在另一个平台上运行失败是很常见的。
此外,Java以外的语言也可以使用Java技术。例如,可以实现非Java编译器来创建可以在Java虚拟机(JVM)上执行的Java字节码。
1.3Java模型与HTML模型的比较
我们已经知道Java是一种为嵌入式系统设计的语言。然而,Java过去并没有在嵌入式系统中得到广泛的应用。相反,人们相信Java可以用来补充甚至取代HTML模型。本节将描述HTML模型以及Java如何替换它。
我们可以在互联网上找到很多文件。数据结构存储在文件中并且必须被解码。可以生成的不同数据文件的数量没有限制。尽管可以计算文件格式的数量,但通常没有人计算,并且数量将以未知的速度增长。很少有工具可以统计不同文件格式的数量,而解码它们的工具就更少了。
图1.2描述了数据分发的网络模型。Web服务器通过超文本传输​​协议(HTTP)将网页传输到客户端。
浏览器使用包含特定格式代码的插件进行解码。不同的文件格式需要不同的插件或实用程序才能查看。因此,插件扩展了浏览器的功能。
使用Java技术的浏览器可以通过动态下载算法进行解码。这个过程需要一种即时运行程序的方法。为了阐明安全性,Java对即时下载程序施加了功能限制。安全管理器提供对即时下载的Java程序的功能的精确控制。
用Java模型替代HTML模型的基本前提是程序可以在不同平台上按需运行。但于Java缺乏统一的支持,Java模型无法取代HTML模型。当前的不利因素包括有关Java技术和知识产权的争论。
图1.2Internet
1.4总结
与C或C++不同,用Java编程时,编程环境感觉像Java。此外,C++没有Java那样的可移植应用程序编程接口(API)。如果你在Windows上用C++编程,编程环境就像Windows,所以你需要学习WindowsAPI。同样,如果您在Macintosh下使用C++进行编程,则编程环境的外观和运行方式将与Macintosh界面相同。
基于上面的讨论,有些人认为客户端Java是不可变的,HTML模型不太可能发生变化。但从2001年3月到2001年8月的短短五个月里,日本就有超过600万部用Java开发的手机售空。无线提供商(NTTDoCoMo、J-Phone和KDDI)已经提供互动服务。有人估计,2001年至2005年间,这些新设备上将部署超过7亿个Java虚拟机。也许这些具有JVM功能的新平台将使客户端Java能够长期生存。