这几天在看Java虚拟机规范,发现java编程语言规范目前还没有中文版,试着翻译一下,如果错误 欢迎批评指正。我会持续更新(beijin9152@163.com 转载请注明出处。谢谢)。
第一章 概述
java 是一种通用,并发,基于类且面向对象的编程语言。它设计的力求简单使得编程者可以清楚编写。java语言借鉴了c和c++但也有很大的区别,省略了cc++中一些复杂的概念并借鉴了其他语言的一些想法。java是为生产而设计的语言而不是为了研究,C. A. R. Hoare在他设计语言论文中建议避免使用新的、未经验证的特性出现在java语言中。
java语言是静态类型的健壮的语言,本规范严格区分编译期错误和运行期错误,编译期一般发生在把源代码编译为机器码的过程中,运行期包括加载和链接类文件到程序动态优化及实际执行期间。
java编程语言属于高级编程语言,因此一些机器码错做是不允许的。包括动态的内存管理、垃圾回收避免内存创建引发的安全问题(像c中free或c++中的delete)。高性能的垃圾回收机制可以支撑一些系统应用而不需要停止程序。程序中不包括任何非安全的构造,如数组操作检查,因为这种不安全的构造可能会引发一些不可预知的错误。
java源码一般编译为指令集和二进制文件。具体参考《java 虚拟机规范 javaSE 第八版》
1.1 规范组织结构
第二章 描述了语法及java语言语法中的符号等。
第三章 描述了java语言基于c c++的语法结构。java是基于Unicode编码的。只能在支持ASC||码的机器上编写Unicode字符。
第四章 描述了类型,值,变量。类型分为基本类型和引用类型。
基本类型在所有的机器和实现中都一致,包括2的补码,单精度双精度 IEEE 754标准浮点数,boolean 类型,Unicode的char类型,基本类型的值不共享状态。
引用类型包括类类型、接口类型和数组类型。引用类型是通过类或者数组动态创建实现的。可以有多个引用指向一个对象,所有对象(包括数组)支持Object类的方法。因为所有类继承自Object。预定义的String类支持Unicode字符串。有用于把基本类型值封装为对象的类。通常包装和解包装是编译器自动执行的(包装又称装箱,解包又称为拆箱)。类和接口可以声明为泛型的,也就是说他们可以作为其他引用类型的参数,之后就可以通过这种特定类型进行调用。
变量是类型化的存储位置,基本类型的变量存储的是基本类型的值。类类型可以存储空引用或者指向这个类或者该类的子类。接口类型可以存储空引用或者实现该接口的实例。数组类型可以存储空引用或者任何指向实例或数组的引用。
……
1.2 示例程序
给出的示例程序大多数都是像下面代码一样是可执行的
class Test {publicstaticvoidmain(String[] args) {for(inti =0; i < args.length; i++) System.out.print(i ==0? args[i] :" "+ args[i]); System.out.println(); }
在安装了OracleJDK的机器上,存储在Test.java的类可以使用下面的命令来编译和运行
javac Test.java
JavaTest Hello, world.
输出结果为:
Hello, world
1.3 约定
本规范中所提到的类和接口来自java API。即使我们使用N来代替类或接口,也是来自包java.lang 。
非标准的信息 说明规范的信息用小号缩进排版
如:
java语言中的类型一般依赖于符号替换,如[F1:=T1,…,Fn:=Tn] Fi代表Ti,1<=i<=n.
1.4 预定义类与接口
如前文所述,本规范经常引用Java SE中的一些api类,特别是和java密切相关的一些类包括Object,Class,ClassLoader,String,Thread及在java.lang.reflect包中的类和接口等。本规范约束这些类和接口,但没有提供完整的使用说明,读者最好参考java se的API文档。
因此,本规范并没有提及任何反射相关的内容。许多语言结构有类似的核心反射API(java.lang.reflect)和语言模型API(javax.lang.model)。但这里并不讨论这些。如我们说到创建对象的方法时一般不包括通过反射创建的对象,即使本规范未提到读者也应该明白这些机制。
1.5 反馈
本规范中如果有技术上的错误或者描述不清楚的欢迎读者发送邮件到 jls-jvms-spec-comments@openjdk.java.NET
有关java javac的编译行为的问题,特别是本规范中它的一致性等问题可以发送到:compiler-dev@openjdk.java.Net
1.6 参考
(这部分就不翻译了)
[1]: Apple Computer. Dylan Reference Manual. Apple Computer Inc., Cupertino, California. September29, 1995.
[2]: Bobrow, Daniel G., Linda G. DeMichiel, Richard P. Gabriel, Sonya E. Keene, Gregor Kiczales, and David A. Moon. Common Lisp Object System Specification, X3J13 Document
88-002R, June 1988; appears as Chapter 28 of Steele, Guy. Common Lisp: The Language, 2nd ed. Digital Press, 1990, ISBN 1-55558-041-6, 770-864.
[3]: Ellis, Margaret A., and Bjarne Stroustrup. The Annotated C++ Reference Manual. Addison-
Wesley, Reading, Massachusetts, 1990, reprinted with corrections October 1992, ISBN0-201-514591.
[4]: Goldberg, Adele and Robson, David. Smalltalk-80: The Language. Addison-Wesley, Reading,
Massachusetts, 1989, ISBN 0-201-13688-0.
[5]: Harbison, Samuel. Modula-3. Prentice Hall, Englewood Cliffs, New Jersey, 1992, ISBN0-13-596396.
[6]: Hoare, C. A. R. Hints on Programming Language Design. Stanford University Computer
Science Department Technical Report No. CS-73-403, December 1973. Reprinted in
SIGACT/SIGPLAN Symposium on Principles of Programming Languages. Association
for Computing Machinery, New York, October 1973.
[7]: IEEE Standard for Binary Floating-Point Arithmetic. ANSI/IEEE Std. 754-1985. Available
from Global Engineering Documents, 15 Inverness Way East, Englewood, Colorado
80112-5704 USA; 800-854-7179.
[8]: Kernighan, Brian W., and Dennis M. Ritchie. The C Programming Language, 2nd ed. Prentice
Hall, Englewood Cliffs, New Jersey, 1988, ISBN 0-13-110362-8.
[9]: Madsen, Ole Lehrmann, Birger Møller-Pedersen, and Kristen Nygaard. Object-Oriented
Programming in the Beta Programming Language. Addison-Wesley, Reading,
Massachusetts, 1993, ISBN 0-201-62430-3.
[10]: Mitchell, James G., William Maybury, and Richard Sweet. The Mesa Programming Language,
Version 5.0. Xerox PARC, Palo Alto, California, CSL 79-3, April 1979.
[11]: Stroustrup, Bjarne. The C++ Progamming Language, 2nd ed. Addison-Wesley, Reading,
Massachusetts, 1991, reprinted with corrections January 1994, ISBN 0-201-53992-6.
[12]: Unicode Consortium, The. The Unicode Standard, Version 6.2.0. Mountain View, California,
2012, ISBN 978-1-936213-07-8.