Java卡虚拟机规范V2.2.1中文版_第1页
Java卡虚拟机规范V2.2.1中文版_第2页
Java卡虚拟机规范V2.2.1中文版_第3页
Java卡虚拟机规范V2.2.1中文版_第4页
Java卡虚拟机规范V2.2.1中文版_第5页
已阅读5页,还剩177页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java卡虚拟机规范(中文译本)第2.2.1版北京明宇科技有限公司2004年06月14日Java卡虚拟机规范 V2.2.1修改记录版本日期修改者修改内容0.12004/06/14新建Java卡虚拟机规范 V2.2.1目录1.介绍11.1.动机11.2.Java卡虚拟机11.3.Java语言安全31.4.Java卡运行环境安全32.Java虚拟机子集42.1.为什么需要一个子集42.2.Java卡语言子集42.2.1.不支持项目.不支持的特性.关键字.不支持的类型.类52.2.2.支持的项目.特性.关

2、键字.类型.类72.2.3.可选支持项.整数数据类型.对象删除机制72.2.4.Java卡虚拟机的限制.包.类.对象.方法.Switch Statements.类初始化92.2.5.多选择Applet限制92.2.6.Java卡远程方法调用限制.远程类和远程接口.远程接口的访问控制.参数和返回值102.3.Java卡虚拟机子集102.3.1.class文件子集.cl

3、ass文件中不支持项.class文件中支持项112.3.2.字节码子集.不支持的字节码.支持的字节码.字节码的静态制约132.3.3.异常.未捕获和不可捕获的异常.被检测的异常.运行时异常.错误163.Java卡虚拟机结构173.1.数据类型和值173.2.字173.3.运行时数据区173.4.上下文173.5.框架183.6.对象的表现183.7.特定的初始化方法183.8.异常183.9.二进制文件格式183.10.指令集综述193.10.1.类型

4、和Java卡虚拟机194.二进制表现214.1.Java卡文件格式214.1.1.Export文件格式214.1.2.CAP文件格式214.1.3.Jar文件容器224.2.基于AID的命名224.2.1.AID格式224.2.2.AID用法224.3.基于Token的连接234.3.1.外部可见项234.3.2.私有Token234.3.3.export文件与转换244.3.4.引用(外部和内部)244.3.5.安装和连接244.3.6.Token分配244.3.7.Token详细.包.类和接口.静态域.静态方法和构造器

5、.实例域2.虚方法2.接口方法274.4.二进制兼容性274.5.包版本284.5.1.分配284.5.2.连接285.Export文件格式295.1.Export文件的名字295.2.Jar文件中的限制295.3.所有权295.4.表现层次295.5.Export文件305.6.常量池315.6.1.CONSTANT_Package315.6.2.CONSTANT_Classref335.6.3.CONSTANT_Integer335.6.4.CONSTANT_Utf8345.7.类和接口345.8.域365.9.方法385.10.属性395

6、.10.1.ConstantValue属性406.CAP文件格式416.1.组件模型416.1.1.Jar文件中的限制426.1.2.定义新的组件436.2.安装436.3.Header组件446.4.Directory组件466.5.Applet组件486.6.Import组件506.7.Constant Pool组件506.7.1.CONSTANT_Classref526.7.2.CONSTANT_InstanceFieldref、CONSTANT_VirtualMethodref、CONSTANT_SuperMethodref536.7.3.CONSTANT_StaticFieldref

7、、CONSTANT_StaticMethodref546.8.Class组件566.8.1.type_erface_info、class_erface_info和class_info共有项60.interface_info项6.class_info项6.implemented_interface_info6.remote_interface_info656.9.Method组件676.9.1.exception_handler_info696.9.2.met

8、hod_info706.10.Static Field组件726.11.Reference Location组件756.12.Export组件766.13.Descriptor组件786.13.1.class_descriptor_info796.13.2.field_descriptor_info816.13.3.method_descriptor_info826.13.4.type_descriptor_info846.14.Debug组件846.14.1.class_debug_info结构8.field_debug_info8.method_debu

9、g_info结构897.Java卡虚拟机指令集937.1.假设:“必须”的意思937.2.保留的操作码937.3.虚拟机错误937.4.安全异常947.5.Java卡虚拟机指令集947.5.1.aaload967.5.2.aastore967.5.3.aconst_null987.5.4.aload987.5.5.aload_<n>987.5.6.anewarray997.5.7.areturn997.5.8.arraylength1007.5.9.astore1007.5.10.astore_<n>1017.5.11.athrow1017.5.12.baload102

10、7.5.13.bastore1027.5.14.bipush1037.5.15.bspush1037.5.16.checkcast1047.5.17.dup1057.5.18.dup_x1067.5.19.dup21067.5.20.getfield_<t>1077.5.21.getfield_<t>_this1087.5.22.getfield_<t>_w1097.5.23.getstatic_<t>1107.5.24.goto1107.5.25.goto_w1117.5.26.i2b1117.5.27.i2s1127.5.28.iadd112

11、7.5.29.iaload1137.5.30.iand1137.5.31.iastore1147.5.32.icmp1147.5.33.iconst_<i>1157.5.34.idiv1157.5.35.if_acmp<cond>1167.5.36.if_acmp<cond>_w1167.5.37.if_scmp<cond>1177.5.38.if_scmp<cond>_w1177.5.39.if<cond>1187.5.40.if<cond>_w1197.5.41.ifnonnull1207.5.42.ifn

12、onnull_w1207.5.43.ifnull1217.5.44.ifnull_w1217.5.45.iinc1217.5.46.iinc_w1227.5.47.iipush1227.5.48.iload1237.5.49.iload_<n>1237.5.50.ilookupswitch1247.5.51.imul1257.5.52.ineg1257.5.53.instanceof1267.5.54.invokeinterface1277.5.55.invokespecial1287.5.56.invokestatic1297.5.57.invokevirtual1307.5.5

13、8.ior1317.5.59.irem1317.5.60.ireturn1327.5.61.ishl1327.5.62.ishr1327.5.63.istore1337.5.64.istore_<n>1337.5.65.isub1347.5.66.itableswitch1347.5.67.iushr1357.5.68.ixor1367.5.69.jsr1367.5.70.new1377.5.71.newarray1377.5.72.nop1387.5.73.pop1387.5.74.pop21397.5.75.putfield_<t>1397.5.76.putfiel

14、d_<t>_this1407.5.77.putfield_<t>_w1417.5.78.putstatic_<t>1427.5.79.ret1437.5.80.return1447.5.81.s2b1447.5.82.s2i1457.5.83.sadd1457.5.84.saload1457.5.85.sand1467.5.86.sastore1467.5.87.sconst_<s>1477.5.88.sdiv1477.5.89.sinc1487.5.90.sinc_w1487.5.91.sipush1497.5.92.sload1497.5.9

15、3.sload_<n>1497.5.94.slookupswitch1507.5.95.smul1517.5.96.sneg1517.5.97.sor1527.5.98.srem1527.5.99.sreturn1527.5.100.sshl1537.5.101.sshr1537.5.102.sspush1547.5.103.sstore1547.5.104.sstore_<n>1557.5.105.ssub1557.5.106.stableswitch1557.5.107.sushr1567.5.108.swap_x1577.5.109.sxor1578.指令集表15

16、99.Gloassary164图目录图 1:Java卡API包转换2图 2:Java卡API包安装2图 3:AID格式22图 4:包标识符与AID的对应23图 5:二进制兼容性例子27图 6:指令格式描述示例95表目录表 1:不支持的关键字5表 2:被支持的关键字6表 3:不支持的Java 常量池tag11表 4:支持的Java 常量池tag12表 5:不支持的字节码12表 6:支持的字节码13表 7:对java检测异常的支持15表 8:对java运行时异常的支持15表 9:对java错误的支持16表 10:在Java Card虚拟机指令集中的类型支持20表 11:存储类型和计算类型20表 1

17、2:token值域、类型和范围25表 13:实例域的token26表 14:Export文件常量池tag31表 15:Export文件包的flags32表 16:Export文件类访问和修饰符标志35表 17:Export文件域访问和修饰符标志37表 18:Export文件方法访问和修饰符标志39表 19:CAP文件组件tag42表 20:CAP文件组件文件名42表 21:参考组件安装顺序43表 22:CAP文件包的flags45表 23:CAP文件constant pool的tag51表 24:类型描述符的值58表 25:被编码的引用类型p1.c159表 26:被编码的字节数组类型59表 2

18、7:被编码的引用数组类型p1.c159表 28:被编码的方法的标记()V59表 29:被编码的方法标记(Lp1.c1;)S59表 30:CAP文件接口和类标志61表 31:CAP文件方法标志71表 32:静态域映像的段72表 33:静态域长度73表 34:数组类型74表 35:1字节refrence location例子76表 36:CAP文件类描述符标志80表 37:CAP文件域描述符标志81表 38:基本类型描述符的值82表 39:CAP文件方法描述符标志83表 40:类访问和修饰符标志86表 41:域访问和修饰符标志89表 42:方法修饰符标志90表 43:数组值104表 44:数组值1

19、26表 45:数组值138表 46:按操作码值组织的指令159表 47:按操作码助记符组织的指令1611711. 介绍1.1. 动机Java卡技术允许用Java语言编写的程序运行在智能卡和其它小型的、资源有限的设备上。开发者能够使用标准的软件开发工具和环境建立并测试程序,然后将这些程序转换成一种能够安装到Java卡技术支持的设备上的格式。Java卡平台的应用软件叫做Applet,更准确的说是Java卡Applet或卡Applet(不同于浏览器中的Applet)。当Java卡技术允许用Java语言编写的程序运行在智能卡上时,这些小型的设备不能够得到足够的电源来支持Java平台的全部功能。因此,J

20、ava卡平台只支持一部分精挑细选的、定制的Java平台特性的一个子集。这个子集提供了一些特性,这些特性可以很好的适应为小型设备所编写的程序,并保持了Java编程语言的面向对象的能力。定义一个Java卡虚拟机的一个简单的途径是描述Java虚拟机的特性的一个子集,这个子集必须支持源码在所有支持Java卡技术的设备上的可移植性。将这个子集规范与Java虚拟机规范中的信息结合起来,智能卡商能够构造他们自己的基于Java卡技术的实现(Java卡的实现)。虽然那个途径是可行的,但是它有一个严重的缺点。最终的平台将失去Java卡Applet的二进制码可移植性这个重要特性。这个定义Java平台的标准允许Jav

21、a程序的二进制码在所有的Java平台实现上具有可移植性。Java程序的“写一次,可以在任何地方运行”的性质也许是这个平台的最重要的特点。建立Java卡平台的部分动机就是为智能卡工业带来这种二进制的可移植性。在这个世界中有上百万或者上亿的智能卡具有不同的处理器和配置,支持软件分发的多种二进制格式的花费是巨大的。Java卡平台虚拟机规范版本2.2.1是提供二进制可移植性的关键。想了解这个规范是做什么的,一个方法是将之与Java平台中的相似内容进行比较。Java虚拟机规范定义了一个虚拟机,它是加载Java的class文件并用特定的语义集执行它们的一个引擎。class文件是Java结构的一个核心部分,

22、并且它是Java平台的二进制兼容性的标准。Java卡平台虚拟机规范版本2.2.1也定义了一种文件格式,它是Java卡平台二进制兼容性的标准:CAP文件格式,它是软件加载到实现了Java卡虚拟机的设备上的格式。1.2. Java卡虚拟机Java Card虚拟机这个角色在Java Card平台软件制造、开发的上下文中很好理解。有几个组件组成了java卡系统,包括Java Card虚拟机、Java Card平台的Converter(Java卡Converter)、一个终端安装工具和一个运行在设备上的安装程序,如图 1和图 2所示。图 1:Java卡API包转换图 2:Java卡API包安装Java卡

23、applet的开发与任何其它的Java程序一样:开发者写一个或多个Java类,用Java编译器编译源码,产生一个或多个class文件。Applet在一个使用模拟工具模拟设备环境的工作站上运行、测试和调试。然后,当applet准备被下载到设备上时,使用Java卡Converter将包含了applet的class文件转换成CAP(converted applet)文件。Java卡Converter将组成Java包的所有class文件作为输入。包含一个或多个javacard.framework.Applet类的直接或间接的非抽象子类的包被称为applet包。否则这个包被称作库包。Java卡Conve

24、rter也将一个或多个export文件作为输入。一个export文件包含了将被转换的类所引入的其它包的内容的名字和链接信息。当一个applet包或库包被转换时,Converter同时也为那个包产生一个export文件。转换后,CAP文件被拷贝到卡终端上,如一台有读卡器外设的台式计算机。然后终端上的安装工具装载CAP文件,并将它传送到支持Java卡技术的设备上。设备上的安装程序接收CAP文件的内容,并准备将被Java Card虚拟机运行的applet。虚拟机本身不需要下载或处理CAP文件;它只需要执行被安装程序下载到设备上的CAP文件中的applet代码。Java Card虚拟机和安装程序之间的

25、功能划分是为了保持虚拟机和安装程序都比较小。安装程序可能被实现为一个Java程序,并在Java卡虚拟机之上运行。因为Java Card平台的指令(Java卡指令)比典型的机器码要更紧凑,所以这可以减小安装器的尺寸。这种模块化使不同的安装器可以和一个单一的Java Card虚拟机的实现结合使用。1.3. Java语言安全Java虚拟机的一个基本特征是由class文件验证器提供部分的强安全性。许多实现Java卡平台的设备可能太小以至于不支持在设备本身上的CAP文件的验证。这种考虑导致了一个允许在设备上进行验证但不能依赖于它的设计。那些在CAP文件中的仅被验证所需要的数据与那些应用执行所需的数据分别

26、打包。这使得在一个实现中,安全被如何管理具有相当的灵活性。在支持Java Card技术的设备上,提供语言级别的安全有几种选择。理论上最简单的(方法)是当CAP文件被下载到设备上时或下载到设备上后验证CAP文件的内容。这种选择仅对最大的设备是可行的。但是,即使在比较小的设备上,支持一些验证的子集也是可以的。其它的选择依赖于以下一项或多项的组合:安装终端的物理安全,来自CAP文件的源头的加密增强信任链,和对CAP文件内容的预下载验证。Java Card平台标准关于CAP文件安装和安全策略描述得尽可能少。因为智能卡必须在多种有不同安全需求的系统中充当安全处理器,因而有必要提供可满足智能卡发行者和用户

27、需求的较大灵活性。1.4. Java卡运行环境安全Java Card平台的标准运行时环境是Java Card运行时环境。Java Card RE包括一个Java Card虚拟机实现和一些Java Card API类。一方面Java Card虚拟机有确保Java语言级安全的职责,另一方面Java Card RE增加另外的运行时安全需求给实现了Java Card RE的设备,这导致对Java Card虚拟机一些额外特征的需要。在这份文档中,这些额外的特征被指定为Java Card RE特有的。Java Card RE所利用的基本的运行时安全特征是通过称为应用防火墙的东西,它被用来加强applet之

28、间的隔离。应用防火墙能够阻止一个应用创建的对象被另一个应用访问。包括阻止非授权访问类实例的域和方法,以及数组的长度和内容。applet的隔离是一个重要的安全特征,但是它要求在需要交互的情形下,允许applet共享对象。Java Card RE通过共享接口对象的概念实现对这种共享的允许。这些对象提供了applet使其对象可为其它applet所用的唯一途径。对于使用共享接口对象的更多信息,可以参见Java Card平台应用编程接口2.2.1中关于javacard.framework.Shareable的接口描述。一些关于防火墙特征相关的描述将用到shareable接口(的概念)。应用防火墙也保护属

29、于Java Card RE本身的对象不被非授权使用。Java Card RE可以使用没有反映在Java Card API中的机制使其对象被applet所用。有关Java Card RE相关的隔离和共享特征的完整描述可以在Java Card平台运行时环境规范2.2.1中找到。2. Java虚拟机子集本章描述了Java虚拟机的子集和被Java Card平台2.2.1支持的语言。2.1. 为什么需要一个子集最理想的情况是:对智能卡的编程如果能够完全使用Java编程语言。但是Java虚拟机的完整实现即便是对于当今最先进的有限资源设备而言,也是太大了。典型的资源受限设备有1.2KRAM,16K非易失内存

30、(EEPROM 或flash)和32KROM。实现字符串处理的代码,单精度和双精度浮点算法,和线程管理对于这样设备的ROM而言太大了。即使它是够用的,那么没有了留给类库和应用代码的空间。RAM资源也是非常有限。唯一可行的选择是:将Java Card技术作为Java平台的一个子集来实现。2.2. Java卡语言子集为Java Card平台所写的应用使用Java编程语言。它们使用Java编译器来编译。Java Card技术使用Java语言子集,理解Java Card平台需要熟悉Java平台。在这一章中所讨论的内容不是基于语言规范的级别,关于Java编程语言的完整的文档,参见Java 语言规范。2.

31、2.1. 不支持项目本节所列出的条目是Java编程语言和平台的元素,但它们在Java Card平台下不被支持。. 不支持的特性动态类下载Java Card平台不支持动态类下载,Java Card平台的实现不能动态地下载类。类或者在生产的过程中被掩模到卡内,或者在发卡后通过安装过程下载。在卡上执行的程序仅参照已存在于卡上的类,因为没有办法在应用代码正常执行的过程中下载类。安全管理器Java Card平台的安全管理与Java平台的有很大不同。在Java平台上,有安全管理器类(java.lang.SecurityManager)来负责实现安全特征。在Java Card平台,语言安全策略

32、由虚拟机完成。没有安全管理器类来制定是否允许操作的策略决策。FinalizationFinalization也不被支持。finalize()将无法被Java Card虚拟机自动调用。线程Java Card虚拟机不支持控制的多线程。Java Card平台的程序(“Java Card 程序”)不能用Java编程语言中的类Thread或任何线程相关的关键字。CloneJava Card平台不支持对象克隆。Java Card API类Object没有实现clone()方法,也不提供Cloneable接口。Java包中的访问控制Java Card平台语言子集支持在Java语言中定义的包访问控制。但是不支

33、持以下各项:l 如果类实现了具有包访问可见性的方法,子类不能覆盖这个方法,同时将方法的访问可见性修改为public或protected。l 如果一个public和protected型的域是一个对包可视类的引用,则这个域不能被公有类包含。l 公有类不能包含一个返回类型为包可视类的引用型的public或protected方法。l 公有类的一个public或protected方法不包含类型为包可视类的引用型的形参。l 被公有类扩展的包可视类不能定义任何public或protected方法或域。l 一个被公有类实现的包可视接口不能定义任何域。l 一个包可视接口不能被具有公有访问可见性的接口扩展。2.2

34、.1.2. 关键字以下关键字指出与native方法、线程、浮点、内存管理相关(的内容)不被支持。表 1:不支持的关键字nativesynchronized transientvolatilestrictfp. 不支持的类型Java Card平台不支持类型char、double、float和long。也不支持超过一维的数组。. 类总的来说,Java Card平台不支持Java核心API的类。一些来自java.lang包的类被支持(见节类),但是其它的都不支持。例如:不被支持的类有String、Thread(以及所有线程相关的类)、例如Boolean,In

35、teger和class等封装类。系统类java.lang.System不被支持。Java Card技术提供javacard.framework.JCSystem类,它提供到系统行为的接口。2.2.2. 支持的项目如果一项语言特征没有被明确表述为不支持,那么是被支持子集的一部分。主要的支持特征在本节中列出。. 特性包为Java Card平台所写的软件遵循Java平台包的标准规则。Java Card API类被写成Java源文件,这些源文件包括包的指定。包机制用于识别和控制对类,静态域和静态方法的访问。除了在“Java包访问控制”中声明的(节不支持的特性),在Java

36、Card平台中的包一如其在Java平台的使用方式。动态对象创建Java Card平台的程序支持动态创建对象,包括类的实例和数组。其实现方式,和通常方式一样,使用new操作符。对象被从堆中分配。Java Card虚拟机不必有垃圾收集对象。任何被虚拟机分配的对象可能即便其不再被使用,仍继续存在并消耗资源。关于支持可选对象删除机制的更多信息参见节对象删除机制。虚方法因为基于Java Card卡技术的对象(“Java Card对象”)是Java编程语言对象,在为Java Card平台所写的程序中调用对象的虚方法与在为Java平台所写的程序中调用是完全一样的。继承是被支持的,包括super

37、关键字的使用。接口Java Card API类可以按照Java编程语言来定义和实现接口。在接口类调用方法的工作方式和预想的一样。类型检查和instanceof操作符也可与接口正常工作。异常Java Card程序可以如Java程序一样来定义、抛出和捕获异常。类Throwable和它相关的子类被支持。一些Exception和Error的子类被忽略,因为这些异常不会在Java Card平台上发生。关于错误和异常的定义详见节2.3.3异常。. 关键字下列关键字被支持。其用法同于Java编程语言一样。表 2:被支持的关键字abstractdefaultifprivatethisboolea

38、ndoimplementsprotectedthrowbreakelseimportpublicthrowsbyteextendsinstanceofreturntrycasefinalintshortvoidcatchfinallyinterfacestaticwhileclassfornewsupercontinuegotopackageswitch. 类型Java编程语言类型boolean、byte、short和int被支持。对象(类实例和一维数组)也被支持。数组可以包含所支持的基本数据类型、对象和其它数组。一些Java Card实现可能不支持int数据类型的使用。(参考节

39、整数数据类型)。. 类java.lang包中的多数类在Java Card平台上不被支持。以下来自java.lang的类以有限的方式在Card上被支持。Object如同在java编程语言中,Java Card API类继承于java.lang.object,Object的多数方法在Java Card API中不可获得,但是类自身存在是为了给类的层次结构提供一个根。Throwable类Throwable和它的子类都被支持。Throwable的多数方法在Java Card API中不可获得,但是类本身存在是为了给所有的异常提供一个共有的祖先。2.2.3. 可选支持项该节描

40、述Java Card平台的可选特征。可选特征在Java Card平台兼容的实现中不要求被支持。然而,如果实现包括了对一个可选的特征的支持,那么它必须被完全支持,并且就如同本文档中所定义的。. 整数数据类型关键字int和32位integer数据类型在Java Card实现中不必被支持。不支持int数据类型的Java Card虚拟机将拒绝使用int数据类型或32位立即数的程序。无论输入值是什么,算术表达式在Java Card虚拟机上产生的结果必须与在Java虚拟机上产生的相同。不能支持int数据类型的Java Card虚拟机必须拒绝那些可能产生不同结果的表达式。. 对象

41、删除机制Java Card技术,版本2.2.1提供一个可选的,对象删除机制。被设计运行在这些实现上的应用可以通过调用合适的API来使用这些机制,参见Java Card平台应用编程接口2.2.1。但是,这一机制仅适合对证书、密钥等大对象作原子修改。所以应用编程者应该在对象分配上比较审慎。2.2.4. Java卡虚拟机的限制资源有限硬件的限制性阻止Java Card虚拟机支持某Java平台的特征的全部功能。尽管讨论中的特征(可选特征,如:int支持)将被支持,但是特定虚拟机可能限制操作的范围还是小于Java平台的。(The features in question are supported, b

42、ut a particular virtual machine may limit the range of operation to less than that of the Java platform.)为了确保应用代码的可移植性,本节为对这些语言特征的部分支持,建立了最小需求级别。这里所列出的制约从应用编程者的角度来看是最大值。没有超出这些最大值的Java包可以被转换为基于Java Card技术的CAP文件(“Java Card CAP文件”),并且可以被移植到所有的Java Card实现上。从Java Card虚拟机实现者的角度,这里列出的每一个最大值表明使应用可移植的支持的最小级别

43、。. 包包引用一个包可以最多可以引用128个包。包名包的全名可以包括最多255个字符。如果包括一个或多个表达成多字节UTF-8格式的字符,包名的大小还需要进一步被限制。. 类包中的类一个包可以包含最多255个类和接口。接口一个类可以实现最多15个接口,包括被超类实现的接口。一个接口可以从最多14个超接口继承。静态域在applet包中的一个类可以有最多256个public或protected的静态非final域。类库包中的一个类可以有最多255个public或protected的静态nonfinal域。对于在类中声明的静态final域(常量)的个数没有限制。静态方法在

44、applet包中的一个类可以有最多256个public或protected的静态方法。类库包中的一个类可以有最多255个public或protected的静态方法。. 对象方法一个类可以实现最大128个public或protected的实例方法,以及最大128个有包可视属性的实例方法。这些限制包括继承的方法。类实例类实例可以包含最多255个域,其中int数据类型被按照占用两个域来计算。这个限制包括继承域。数组数组可以包含最大32767个域。. 方法在一个方法中最多使用的变量个数为255。这个限制包括局部变量、方法参数和在实例方法调用中,指向被调用方法对象的引用(也就

45、是this)。int数据类型被当作占用两个局部变量来计。一个方法可以有最多32767个Java Card虚拟机字节码。基于Java Card技术的字节码个数可能不同于那个方法的实现在Java虚拟机中Java字节码的个数。与一个方法相关的操作栈的最大深度是255个16位单元。. Switch StatementsJava Card虚拟机的switch指令的格式限制是switch语句的case最大值为65536。这个限制远大于对方法最大长度的限制(节方法)。. 类初始化因为没有执行<clinit>方法的基本机制,Java Card虚拟机包含对类

46、初始化的有限支持。对<clinit>方法的支持限于附加了以下制约条件的静态域值的初始化。l applet包的静态域只可以被初始化成基本的编译时常量值,或基本的编译时常量的数组。l 用户库中的静态域只可以被初始化成编译时的基本常量值。l 只有在当前类中声明的静态域可以在<clinit>方法中被初始化基本的常量数据类型包括boolean、byte、short和int。在静态域初始化上遵守这些的语言约束的给定的Java源文件,期望Java编译器应该:l 将常数内联到字节码中,该字节码引用了在声明语句中被初始化的静态final基本域。l 只产生以下字节码:n 将值装载入栈:ic

47、onst_m1,0-5,b|sipush,ldc,ldc_w,aconst_nulln 创建一个数组:newarray(byte|short|boolean|int)n 在栈里复制数据项:dupn 将值存储到数组或静态域:b|i|sastore,putstaticn 从方法返回:return2.2.5. 多选择Applet限制实现javacard.framework.Multiselectable接口的applet被称为多选applet。有关多选的更多细节,请参见Java Card平台运行时环境规范2.2.1。一个包中所有applet要么都是多选的,要么皆非多选。2.2.6. Java卡远程方

48、法调用限制本节定义了被Java Card平台RMI(“Java Card RMI”)所支持的RMI系统子集。. 远程类和远程接口一个类或者它的超类实现了远程接口,则这个类是远程类。远程接口是满足以下要求的接口:l 接口名是java.rmi.Remote或从java.rmi.Remote直接或间接扩展的接口l 远程接口或其超类接口中的每一个方法的声明都在其throws语句中包含异常java.rmi.RemoteException(或它的超类之一)l 在远程方法声明中,如果远程对象被声明为一个返回类型,那么它应被声明为远程接口,而不是该接口的实现类。此外,Java Card RMI在

49、定义远程方法时,引入额外的约束条件。这些约束是Java Card平台语言子集和其他特征约束的结果。更多信息,参见节远程接口的访问控制和节参数和返回值。. 远程接口的访问控制Java RMI系统支持用Java语言中定义的包访问控制。但是,Java Card RMI不支持包可视远程接口。. 参数和返回值远程方法必须仅包含以下类型的参数:l 任何被Java Card技术支持的基本类型(boolean,byte,short,int);l 任何被Java Card技术支持的基本类型的一维数组(boolean, byte,short,int);远程方

50、法的返回类型必须仅包含以下类型之一:l 任何被Java Card技术支持的基本类型(boolean,byte,short,int);l 任何被Java Card技术支持的基本类型的一维数组(boolean, byte,short,int);l 任何远程接口类型l void类型2.3. Java卡虚拟机子集Java Card技术使用Java虚拟机的子集,理解Java Card虚拟机要求熟悉Java虚拟机。本节中讨论的内容不是在虚拟机规范的水平上进行描述的。有关Java虚拟机的完整文档,请参见Java 虚拟机规范。2.3.1. class文件子集Java Card虚拟机的操作可以以标准Java平台

51、class文件来定义。既然Java Card虚拟机仅支持Java虚拟机行为的一个子集,它也仅支持标准class文件格式的一个子集。. class文件中不支持项域描述符域描述符可能不包括BaseType字符C,D,F或J 有关基本类型:BaseType CharacterTypeBaseType CharacterTypeBbyteCcharIintDdoubleSshortFfloatZbooleanJlong。多于一维的数组定义的ArrayType描述符不能使用。常量池有以下tag值的常量池表条目不被支持表 3:不支持的Java 常量池tag常量类型值CONSTANT_Stri

52、ng8CONSTANT_Float4CONSTANT_Long5CONSTANT_Double6域在field_info结构中,访问标记ACC_VOLATILE和ACC_TRANSIENT不被支持。方法在method_info结构中,访问标记ACC_SYNCHRONIZED,ACC_STRICT,和ACC_NATIVE不被支持。. class文件中支持项ClassFileClassFile结构中的所有项都被支持域描述符域描述符可能包含BaseType字符B,I,S,和Z1,以及任何ObjectType。一维数组的ArrayType描述符也可以使用。方法描述符支持所有格式的方法描述

53、符。常量池支持tag值为以下各项的常量池条目。表 4:支持的Java 常量池tag常量类型值CONSTANT_Class7CONSTANT_Fieldref9CONSTANT_Methodref10CONSTANT_InterfaceMethodref11CONSTANT_Integer3CONSTANT_NameAndType12CONSTANT_Utf81域在field_info结构中,支持的访问标记有ACC_PUBLIC,ACC_PRIVATE,ACC_PROTECTED,ACC_STATIC和ACC_FINAL。field_info结构中的其余组件将被完全支持。方法在method_in

54、fo结构中,支持的访问标记有ACC_PUBLIC,ACC_PRIVATE,ACC_PROTECTED,ACC_STATIC,ACC_FINAL和ACC_ABSTRACT。method_info中的其余组件将完全被支持。属性attribute_info结构被支持。Code,ConstantValue,Exceptions,LocalVariableTable,Synthetic,InnerClasses和Deprecated属性被支持。2.3.2. 字节码子集以下章节给出了Java Card平台支持或不支持的字节码的详细信息。更多细节,参见7 Java卡虚拟机指令集。. 不支持的字节码表 5:不支持的字节码lconst_<l> fconst_<f> dconst_<d>ldc2_w2lload fload dload lload_<n>fload_<n> dload_<n> laload

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论