无标题文章


http://docs.oracle.com/javase/specs/jls/se8/html/index.html

第一章 http://docs.oracle.com/javase/specs/jls/se8/html/jls-1.html

Java编程语言是一个通用的、并发的、基于类的、面向对象的语言。其设计初衷是成为一门足够简单的语言,使许多编程者能够流利地掌握。java编程语言与C和C++相关,但组织方式非常不同,包含了许多被C和C++所忽略的方面,以及一点来自其他语言的想法。它的目标是成为一门产品式语言(production language),而不是一种研究型语言(research language),因此,就如C. A. R. Hoare在他关于语言设计的经典论文中所建议的那样,该设计避免加入未经测试的新特征。

Java编程语言是强类型并且是静态类型的。本规范清楚界定了编译时错误,即那些能够并且必须在编译时期被检测到,并在运行时发生的错误。编译时通常包括将程序翻译成独立于机器的字节码形式的过程。运行时活动包括:①对执行执行程序时所需的类的加载(loading)和链接(linking),②非强制的机器码生成,③对程序的动态优化,以及④程序的实际执行过程。

java编程语言是一门相对高级的语言,这是因为机器表示的细节并不能通过该语言可见。它包括自动存储管理,典型的做法是利用垃圾收集器,来避免显式存储单元分配(explicit deallocation)(例如C中的free和C++中的delete)所带来的安全问题。高性能垃圾回收的实现在支持系统编程和实际应用中达到有限的暂停(bounded plauses)。该语言并不包括任何不安全结构(unsafe constructs),例如不进行下标检查的数组访问操作,因为这类不安全结构可能导致程序出现不明行为。

Java编程语言通常被编译为字节码指令集,其二进制形式在The Java Virtual Machine Specification, Java SE 8 Edition中给出了定义。

1.1 规范组织结构

第二章描述文法和用于表示该语言的词法和句法语法的符号;

第三章基于C和C++,描述Java编程语言的词法结构。该语言用Unicode字符集编写。它支持在只支持ASCII的系统上写Unicode字符。(It supports the writing of Unicode characters on systems that support only ASCII.)

第四章描述类型、值和变量。类型分为原始类型(primitive types)和引用类型(reference types)。

原始类型定义为在所有机器和所有实现中均相同的类型,有各种不同大小,包括2的取补整数、单精度或双精度IEEE 754标准浮点数字、一个布尔类型、以及一个Unicode字符char类型。初始类型的值并不共享状态。

The primitive types are defined to be the same on all machines and in all implementations, and are various sizes of two's-complement integers, single- and double-precision IEEE 754 standard floating-point numbers, aboolean type, and a Unicode character char type. Values of the primitive types do not share state.

引用类型包括类类型(class types),接口类型(interface types),以及数组类型(array types)。引用类型通过动态创建类型或数组的实例对象来实现。每个对象可以存在多个引用。所有对象(包括数组)都支持类Object中的方法,Object类是类型体系中(唯一的)根节点。预定义的String类支持Unicode字符的字符串。类通过在对象中绑定元素类型而存在。

变量是带类型的存储地址。一个原始类型的变量存储了该原始类型的一个值。一个类类型变量可存储一个null引用或一个该类或该类的子类的对象的引用。一个接口类型变量可存储一个null引用或任意一个任意实现了该接口的类的实例的引用。一个数组类型的变量可存储一个null引用或一个任意数组的引用。一个Object类类型的变量可存储一个null引用或一个任意对象的引用,无论是类的实例还是数组。

第五章介绍转换(conversions)和数值提升(numeric promotions)。转换改变编译时类型,并且有时改变表达式的值。这些转换包括原始类型和引用类型之间的装箱(boxing)和拆箱(unboxing)转换。数值提升用于将一个数值操作的操作数转换为一个能够执行操作的通用类型。该语言中没有漏洞(loopholes);在运行时会检查引用类型的转换(casts on reference types)以确保类型安全。

第六章描述声明和命名,以及如何确定名字的意义(指示)。该语言并不要求成员必须在使用前声明其类型。声明顺序仅在局部变量、局部类,以及类或接口的字段的初始化顺序中有意义。

Java编程语言提供对名字范围的控制,并支持对包成员的外部访问的限制。这有助于在编写大型程序的过程中,根据作者以及对其进行扩展的人来区一个分类的实现。此处将介绍推荐的命名规范,该规范使得程序变得更可读。

第七章介绍了程序的结构,即组织成包(package),类似于Modula中的模块(modules)。包中的成员为类、接口和子包。包被分成编译单元(compilation units)。编译单元包含类型声明,并且能够从其他包导入类型来为他们赋以简称。包有着层次化的命名空间,并且互联网域命名系统(Internet domain name system)通常能用于形成唯一的包名。

第八章介绍类。类的成员包括类、接口、字段(变量)和方法。类变量在每个类中存在一次。类方法的操作无需引用特定对象。实例变量在该类的实例对象中动态创建。实例方法被类的实例所调用;在执行过程中,这种实例成为当前对象this,支持面向对象编程风格。

类支持单实现继承(single implementation inheritance),即每个类的实现派生自一个父类,并且最根本上来自Object类。一个类类型的变量可饮用该类型的实例,或该类型任意子类的实例,这样就允许将新类型以多态的方式(polymorphically)用在已存在的方法上。

类通过synchronized方法支持并发编程。方法对其运行过程中会出现的异常中已被检查的异常进行声明。对象可以声明finalize方法,该方法在该对象被垃圾收集器丢弃前被调用,允许该对象清除其状态。

该语言既不声明独立于类的实现的“headers”,又不分离类型和类层次。

枚举类型(enums),是类的一种特殊形式,支持以类型安全的方式对少量值及其维护的定义。不像其他语言中的枚举(enumerations),枚举类型是对象,并且可以有他们自己的方法。

第九章介绍接口类型,它声明了一系列抽象方法、成员类型,以及常量。不相关的类可以实现同一个接口类型。一个接口类型的变量可包含任意实现了该接口的对象的引用。支持多接口继承。

注释类型(annotation types)是专门用于注释声明的接口。这类注释并不允许以任意形式影响Java编程语言程序的语义。然而,他们为各种工具提供了有用的入口。

第十章介绍数组。数组访问包括边界检查。数组是动态创建的对象,并且可被赋值于类型Object的变量。该语言支持数组的数组,而不是多维数组。

第11章介绍异常(exceptions),它们是不可恢复的(nonresuming),并且被充分整合入了语言的语义和并发机制。有三种类型的异常:①已检查的异常(checked exceptions)、②运行时异常(run-time exceptions)、和③错误(errors)。编译器确保已检查的异常被恰当地处理,这是通过要求一个方法或构造器只有对一个已检查异常进行声明后才能产生该已检查异常。这提供了编译时检查该异常处理器是否存在,并且为编程提供了大大的帮助。大部分用户定义的异常应该为已检查异常。Java虚拟机检测到的程序中的非法操作将导致运行时异常,例如NullPointerException. 错误来自于Java虚拟机检测到的失败(failures),例如OutOfMemoryError。大多数简单程序并不试图处理错误。

第12章介绍程序执行过程中发生的活动。一个程序通常以表达被编译的类和接口的二进制文件的形式存储。这些二进制文件可被加载进Java虚拟机,链接到其他类和接口,以及被初始化。

在初始化后,类方法和类变量就可被使用了。一些类可被实例化为创建该类类型的新对象。类实例的对象也包含该类的各超类的对象,并且对象的创建包括了这些超类实例的递归创建。

当一个对象不再被引用,它可能被被垃圾收集器回收。若一个对象声明了一个终结器(finalizer),该终结器将在该对象被回收前执行,以给该对象最后的机会来进行资源清理,否则这些资源将不会被释放。一个不再被需要的类将被卸载(unloaded)。

第13章介绍二进制兼容性(binary compatibility),说明类型改变所带来的影响,即使用改变后但尚未被重新编译的类型。若开发人员定义的类型将被广泛分布,并且通常借助互联网,连续出现在一系列版本中,那么就需要考虑二进制兼容性。好的程序开发环境,无论一个类型是否被改变,都自动重新编译依赖代码,因此大部分程序员不需要考虑这些细节。

第14章介绍块(blocks)和语句(statements),它们均基于C和C++。该语言没有goto语句,但包含break和continue语句。不像C,Java编程语言要求boolean(或Boolean)表达式在控制流语句中,并且不隐式第转换类型为boolean(除非通过拆箱),这是为了在编译时抓取更多错误。一个synchronized语句提供了基本的对象层监视器锁定(monitor locking)。一个try语句可包含catch和finally从句来避免非本地控制转移(non-local control transfers)。

第15章介绍表达式。本文充分指定了表达式计算(表面上)的顺序,为了增加决定论和可移植性(for increased determinism and portability)。过载的(overloaded)方法和构造器,通过从可用的候选中选择最具体的方法或构造器的方式,在编译时期被确定(resolved)。

第16章介绍该语言确保局部变量先定义后使用的具体方法。当所有其他变量都自动初始化为初始值时,Java编程语言并不自动初始化局部变量,这是为了避免掩盖程序错误。

第17章介绍线程和锁的语义,它们均基于最初在Mesa编程语言中引入的基于监视器的并发。Java编程语言指定了一个内存模型用于共享内存多处理器,该处理器支持高性能实现。

第18章介绍一系列推理算法,这些算法可用于测试泛型方法的适用性,以及判断泛型方法调用时的类型。

第19章介绍该语言的句法文法。

译者注:

Modula:一种模块化语言;

Mesa:一种编程语言‘’

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,636评论 0 9
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,152评论 0 4
  • http://blog.csdn.net/david21984/article/details/57451917 ...
    紫色冰雨阅读 503评论 0 0
  • 先连接再纠正,是正面管教的一个关键的态度。 拥抱,看似简单,却是一个很有力量的工具。 在正面管教的课堂,我们会讲解...
    周荣_e353阅读 803评论 0 2
  • 你说 你喜欢南方的城市 因为你 来自那里 你说 你喜欢生活在海边 因为你 向往蓝天 你说 你喜欢悠闲和旅行 因为你...
    剪秋风阅读 172评论 0 3