《Java8学习笔记》读书笔记(二)

[toc]

第1章 Java平台概论

1.1 Java不止是语言

从1995年至今,Java已经过20个年头,经过这些年的演进,Java已不仅是程序语言,也代表了解决问题的平台,更代表了原厂、各个厂商、社群、开发者与用户沟通的成果。

1.1.1 前世今生

1. Java的诞生
Java最早是Sun公司绿色项目Green Project中撰写Star7应用程序的程序语言,当时名称不是Java,而是取名Oak。
绿色项目始于1990年12月,由Patrick Naughton、Mike Sheridan与James Gosling(默然说话:呀,我最崇敬的人物:Java他爹)主持,目的是希望构筑出下一波计算机应用趋势并加以掌握,他们认为下一波计算机应用趋势会集中在消费性数字产品的使用上。(默然说话:在1990年预测到20年后的今天计算机将如何被使用,实在是有点不可思议,同时也是一种悲哀。因为在当时,由于互联网的不发达,今天的一切都是无法进行的,这就造成你所预言的技术无法在现实中被大量使用。英雄无用武之地,不是么?
1993年第一个万维网浏览器Mosaic诞生(默然说话:如果我没弄错,它应该是现在非常流行的火狐浏览器的前身,包括谷歌浏览器,苹果浏览器都有它的身影),James Gosling认为互联网与Java的一些特性不谋而合,利用Java Applet在浏览器上展现多媒体是一件非常酷的事情,于是绿色项目小组仿照Mosaic使用Java语言开发出了浏览器WebRunner(原名BladeRunner,(默然说话:大家可以查下Blade这个单词是啥意思,实在是太刺激了),后来改名为HotJava,虽然只是一个展示性产品,但它却立即吸引了许多人的注意。
1995年5月23日(这一天被公认为Java的诞生日),正式将Oak改名为Java,Java Development Kits(JDK全名)1.0a2版本正式对外发表。1996年之后各主流浏览器(默然说话:其实就2个,IE和NN,而NN已经倒闭了,历史呀,说起来都是泪。)都正式支持Java,从此Java在互联网上逐渐风行起来。虽然Star7死了,绿色项目也死了,可Java却奇迹般的依托互联网活了下来。
2. 版本演进
Java得到了Sun、微软、IBM等大公司的支持。1998年Sun与微软分裂,自己发布了Java 2 Platform,简称J2SE1.2,而微软继续了J#。Sun公司的J2SE开发者版本一开始就简称为JDK,到如今仍然叫这个名字。
而微软的J#似乎成了阑尾,因为微软公司重点放在了C#上,所以后来就是Sun公司和IBM公司有各自独立实现的版本。
J2SE约以2年为周期推出重大版本更新,1998年12月4日发表1.2,2000年5月8日发表1.3,2002年2月13日发表1.4。
04年9月29日发表的1.5不再称为1.5,产品名称也不再称为J2SE,这是为了彰显这个版本与之前版本有极大不同,如语法上的简化、泛型、枚举、注解等重大功能的添加均使其具有划时代的意义(默然说话:其实就是抄袭C#较为成功吧,因为这些东西C#4.0中已经有了完整的实现,且已经发布了一段时间了),所以更名为Java SE 5.0(默然说话:额滴神呀,不是1.5,而是5.0!这可是小数点的变化!你们知道这意味着什么?知道么?真的知道么!
3. 江山易主
Java SE 6之后,Java开发人员足足等了四年多,天残版1.7才出现。这不禁让人想问:Java怎么了?
关键问题是Sun营收低迷不振,严重影响了新版本的推动,在2010年年中与IBM密谈并购失败之后,Oracle宣布并购Sun,Java的蓝色,也开始变成了Oracle的红色。
在2010年底JCP终于通过了Java SE 7与Java SE 8的发布路线图,于2011年7月28日发布了7.
到2014年3月18日,Java SE 8发布。

1.1.2 三大平台

在Java发展的过程中,由于Java的应用领域越来越广,并逐渐扩及至各级应用软件的开发,Sun公司在1999年6月美国旧金山的Java One大会上,公布了新的Java体系架构,该架构根据不同级别的应用开发区分了不同的应用版本:J2SE(Java 2 Platform, Standard Edition)、J2EE(Java 2 Platform, Enterprise Edition)与J2ME(Java 2 Platform, Micro Edition)。
J2SE、J2EE与J2MEj当时的名称,由于Java SE 5(默然说话:原书写的是Java SE 6之后,这明显是不对的,因为这段历史我是经历者,我亲眼在网站上看到,从1.5开始,下载页面的名称从原来的J2SE 1.5更改为Java SE 5,帮助文档也同样做了更名)后Java不再带有2。J2SE、J2EE和J2ME分别被更名为Java SE、Java EE和Java ME。
1. Java SE
Java是各应用平台的基础,想要学习其他的平台应用,必先了解Java SE以奠定基础,Java SE也正是本书主要的介绍对象。
Java SE可以分为四个主要的部分:JVM、JRE、JDK与Java语言。
为了能够运行Java撰写好的程序,必须有Java虚拟机(Java Virtual Machine,JVM)。JVM包括在Java执行环境(JRE)中,所以为了要运行Java程序,必须安装JRE。如果要开发Java程序,必须取得JDK,JDK包括JRE及开发过程中需要的一些工具程序,像Javac、java等(关于JRE及JDK的安装与使用,会在第2章说明)。
Java语言只是Java SE的一部分,除了语言之外,Java最重要的就是提供庞大且强大的标准API,提供字符串处理、数据输入/输出、网络套件、用户窗口接口等功能,可以使用这些API作为基础来进行程序开发,无须重复开发功能相同的组件。事实上,在熟悉Java语言之后,更多的时候,都是在学习如何使用Java SE提供的API来组成应用程序。
2. Java EE
Java EE以Java SE为基础,适于开发基于Web的分布式应用程序,整个Java EE的体系是相当庞大的,像JSP、Servlet、EJB等服务或技术都是需要一本书来进行说明的,不过有一点可以确定,就是必须先奠定良好的Java SE基础,再来学习Java EE的开发
3. Java ME
Java ME是Java平台中最小的一个,上的是作为小型数字设备上开发及部署应用程序的平台(默然说话:感觉这个版本基本上算是完蛋了,因为现在手机开发已经被本地平台所取代,如Android自己的SDK,Objective-C)。

1.1.3 JCP与JSR

Java不仅是程序语言,还是标准规范。
Java由Sun创造,为了让对Java感兴趣的厂商、组织、开发者与用户参与定义Java未来的功能与特性,Sun公司于1998年成立了JCP(Java社区执行委员会),这是一个开放性国际组织,目的是让Java演进成为全世界数以百计代表成员公开监督的过程。
任何想要提议加入Java的功能或特性,必须以JSR(Java规范请求)正式文件的方式提交,JSR必须经过JCP投票通过,方可成为最终标准文件,有兴趣的厂商或组织可以根据JSR实现产品。
若JSR获得通过,被决定加入Java中,则必须做出免费且开放源代码的参考实现,称为RI(引用实现),并提供TCK(技术兼容性测试工具),方便于其他想根据JSR实现产品的厂商或组织参考与测试兼容性。
现在无论Java SE、Java EE还是Java ME,都是业界共同制定的标准,每个标准背后代表了业界所面临的一些问题,他们期待使用Java来解决问题,认为应该有某些组件、特性、API等,来解决这些问题,因而制定JSR作为正式标准规范文件,不同的技术解决方案标准规范会有一个编号。
Java SE 8的主要规范是在JSR337文件之中,而Java SE 8平台中的特定技术,则规范于特定的JSR文件中,若对这些文件有兴趣,可以参考以下网址:
http://jcp.org/en/jsr/detail?id=337
提示:JSR对于Java初学者而言过于艰涩,但jSR文件规范了相关技术应用的功能,将来有能力时,可以试着自行阅读JSR,这有助于了解相关技术规范的更多细节。

1.1.4 Oracle JDK与OpenJDK

2006年的JavaOne大会上,Sun宣告对Java开放源代码,从JDK 7开始有了OpenJDK,并于2009年4月15日正式发布OpenJDK。Oracle时代发布的JDK7正式版本,指定了OpenJDK7为官方参考实现。
1. Oracle JDK 7与OpenJDK7
与同为开放源代码的Sun JDK不同的是,Sun JDK采用JRL,而OpenJDK7采用GPL,前者源代码可用于个人研究使用,但禁止任何商业用途,后者则允许商业上的使用,因此,OpenJDK7必须删掉许多在两个授权间有冲突的程序代码,也不包括一些部署工具以及软件套件等。
2. Open JDK7与OpenJDK6
在OpenJDK官方网站,也可以看到OpenJDK6的版本,OpenJDK6并不是Sun JDK6的分支,而是将OpenJDK7中JDK7的特性删掉,使之符合JDK6的规范,因而OpenJDK6实际上是OpenJDK7的分支,OpenJDK6可以通过TCK兼容性测试。
Oracle从2012年7月以来,就打算结束对JDK6的支持,在2013年2月时宣布JDK6Update 43时,宣布这是最后一个免费更新版本(实际后来还有Update 45),希望大家赶快升级至JDK7.
1.1.5 建议的学习路径
在Java的官方网站提供有一份Java技术观念图的文件,这是份PDF,可以在以下网址下载:

http://www.oracle.com/technetwork/topics/newtojava/intro-142494.html
以下是基于经验与教学建议的学习路径。
第一章 深入了解JVM/JRE/JDK
第二章 理解封装、继承、多态
第三章 掌握常用Java SE API架构
第四章 学习容器的观念
第五章 研究开放源代码项目
第六章 学习设计模式与重构
第七章 熟悉相关开发工具

1.2 JVM/JRE/JDK

1.2.1 什么是JVM

Java Virtual Machine(JVM)会架构在Solaris、Linux、Windows各种操作系统平台之上。许多Java书都会告诉你,JVM让Java可以跨平台,但是跨平台是怎么一回事?
对于计算机而言,我们要知道它只认识一种语言,就是0、1序列组成的机器指令。当使用C/C++等高级语言撰写程序时,其实这些语言为了方便人类理解,是以英文的文法来进行编写的,计算机是直接看不懂的,所以需要一个翻译将它们翻译成0、1序列。担任翻译员工作的就是编译程序(Compiler)。
而要知道的是,计算机只要有一个小型号的变化,0、1序列就会不一样。这样一来,某个指令在Windows上是0101,在Linux下却可能是1010,因此必须使用不同的编译程序为不同平台编译出可执行的机器码,这样一来,编译好的代码只能在一个指定的平台下运行,如果需要在另一个平台上运行,必须重新进行编译(默然说话:这叫可移植,但不是跨平台)。
而Java采用了另一种方式。编译器编译Java代码时并不直接编译为0、1序列,而是翻译为一种称为“字节码”的中间形式。然后再由JVM在运行时将字节码编译为0、1序列进行执行。
Java源代码扩展名为.java,经过编译程序翻译为扩展名为.class。如果想要执行class文件,必须安装JVM,JVM会将字节码翻译为对应平台的机器码。编写Java程序时,对JVM的重要认识就是:
对Java程序而言,只认识一种系统就够了,这个系统就是JVM,而字节码文件(后缀为.class的文件)就是JVM的可执行文件。
理论上Java程序并不用理会真正执行于哪个平台,只要知道如何执行于JVM就可以了。至于JVM实际上如何与底层平台沟通,则是JVM自己的事。由于JVM实际上就是Java程序的执行环境,所以JVM负责了Java程序的各种资源管理。

1.2.2 区分JRE与JDK

Java Runtime Environment就是Java执行环境,简称JRE,包括Java SE API与JVM。只要使用Java SE API中的链接库,在安装有JRE的计算机上就可以直接运行,无须额外在程序中再包装链接库,而可以由JRE直接提供。
如果要在.java中撰写Java程序,使用编译程序编译为.class,像编译程序这样的工具程序是由JDK提供的,全称Java Development Kit。
JDK包括了javac、appletviewer、javadoc等工具程序,对于要开发Java程序的人,必须安装JDK,这样才编译Java程序或使用这些工具,JDK同时还包括了JRE,所以还能执行Java程序。总起来:JDK包括了Java程序、工具程序和JRE,JRE包括部署技术、Java SE API和JVM。
Java JDK的确很不友好,因为JDK的安装很简单,但要使用却是很麻烦的事情,你需要对系统进行很多的设置,如果是一个对电脑也只能算是初通的初学者来进行学习,会在一开始就遇到很多困难,但是当你能克服这些困难完成配置之后,你会发现你学会了很多意外的知识,这就是Java的哲学:如果不是对编程酷爱,请不要来碰我,这会造成你太大的困扰,如果你除了激情之外,还有对困难的无视与一往直前,请拥抱我,我会给你真心的回报!

1.2.3 下载、安装JDK

要下载JDK,请链接到(Java SE Download)以下网址:
http://www.oracle.com/technetwork/java/javase/downloads/index.html

如果你要下载的是Java SE 8中的JDK,按照以往惯例,发布JDK之后,每隔二到三个月会针对用户反馈的bug或安全问题进行修正,并发布一个修正版JDK。一般你所下载的页面上应该显示为类似Java SE Development 8uN,其中N是JDK更新版本号。
在Java SE Development Kit 7u40之后,7uN中的N是表示JDK是发布以来第N个修正版,但是Oracle改变了这个规则,详情可参考(Java SE Change in Version Numbering Scheme)以下网址:
http://www.oracle.com/technetwork/java/javase/overview/jdk-version-number-scheme-1918258.html

在下载页面还要注意到一个问题,就是最前面有个单选的按钮,你要选择Accept License Agreement单选按钮,接着选择对应操作系统版本的JDK。以Windows x64为例,单击jdk-8u11-windows-x64.exe就可以进行下载。

安装建议选择全部安装吧。

具体配置第2章讲。

1.2.4 认识JDK安装内容

那么你到底安装了哪些东西呢?
Public JRE是给Java程序执行的平台,JDK本身也附带JRE,位于JDK安装的文件夹的jre文件夹下,通常称为Private JRE。
Private JRE和Public JRE其实内容是相同的,只是安装Public JRE或自行下载JRE安装时会注册Java Plugin、Web Start等浏览器或桌面客户端必要的组件,方便需要JRE的桌面应用程序使用。
在JDK的安装目录下还可以看bin文件夹,它里面存放的就是Development Tools选择,各种工具程序如javac,java等都在这个文件夹里。jre文件夹就是Private JRE存放的位置,它是开发Java程序时测试之用。另外有2个压缩包:src.zip与javafx-src.zip,它们是Java SE API的源代码。里面存放着所有.java的文件。
.class文件存放在jre文件夹里的lib文件夹中。其中有个rt.jar的文件。JAR(Java Archive,默然说话:我通常读作“驾儿包”)文件是zip格式的,可直接使用解压软件打开,里面就会看到很多编译好的.class文档。

1.3 重点复习

Java根据应用领域不同,区分为JavaSE、JavaEE与JavaME三大平台。Java SE是各应用平台的基础,分为四个主要的部分:JVM、JRE、JDK与Java语言。JDK包括Java语言和JRE与开发工具,JRE包括Java SE API与JVM。
JCP是个开放性国际组织,目的是让Java演进由Sun非正式地主导,成为全世界数以百计代表成员公开监督的过程。任何想要提议加入Java的功能或特性,必须以JSR正式文件的方式提交,JSR必须经过JCP执行委员会投票通过,方可成为最终标准文件,有兴趣的广商或组织可以根据JSR实现产品。
若JSR成为最终文件后,必须根据JSR成果做出免费且开放源代码的参考实现,称为RI(Reference Implementation),并提供TCK(Technology Compatibility Kit)作为技术兼容性测试工具箱,方便其他根据JSR实现产品的厂商或组织参考与测试兼容性。
只有通过TCK测试的实现,才可以使用Java商标。
从JDK7b10开始有了OpenJDK,Oracle指定了OpenJDK7为官方参考实现。
OpenJDK6并不是SunJDK6的分支,而是将OpenJDK7中JDK7的特性删掉,使之符合JDK6的规范,因而OpenJDK6实际上是OpenJDK7的分支。
对Java程序而言,JVM就是Java的唯一一种操作系统,字节码(Btye Code)文件就是JVM的可执行文件。
JDK本身附有一个JRE,相对于Public JRE这个名称,JDK自己的JRE通常称为Private JRE,只要安装JDK,一定就有Private JRE。安装Public JRE或自行下载JRE安装,会注册Java Plugin、Web Start等浏览器或桌面客户端必要的组件,方便需要JRE的桌面应用程序使用。

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

推荐阅读更多精彩内容