再回首,Java温故知新(一):Java概述
Java发展历程
Java的发展要追溯到1991年,Patrick Naughton(帕特里克·诺顿)和James Gosling(詹姆斯·高斯林)带领Sun公司的工程师打算为有线电视转换盒之类的消费产品设计一种小型语言,因为这些设备的处理能力和内存都有限,所以要求语言必须要小且能生成紧凑的代码。另外由于处理器的多样性,这种语言不能与任何体系结构有关联,这个项目就被命名为“Green”(参考国内许多软件绿色版)。提起平台无关性,Pascal之父Niklaus Wirth(尼古拉斯·沃斯)曾带领团队设计出一种为假想的机器生成中间代码的可移植语言,而这种假想的机器被称为虚拟机,Java虚拟机(JVM)就是由此而来。由于当时Sun公司的人都有Unix应用开发经验,所以语言是以C++为基础,Gosling将这种语言命名为Oak,随后发现Oak是一种已有的计算机语言的名字,于是将其改名为Java。
1992年Green项目组发布了第一个产品,主要特性为智能远程控制,然而没有一家公司对比感兴趣,包括Sun。而后Green项目组以First Person公司花费1993年整整一年以及1994年上半年的时间来寻找其技术的买家,然而一个也没有找到。1994年First Person公司解散,而工作还在Sun公司中继续进行,同时互联网业日渐壮大,Web的关键是把超文本界面转换到浏览器中,1994年大部分人都在使用Mosaic,Java的开发者为了炫耀Java语言超强的能力,开发了HotJava浏览器,HotJava具有执行网页中内嵌代码的能力,即所谓的applet,在1995年5月23日的SunWorld上,这一技术印证得到了展示,同时引发了对Java的狂热追逐并延续至今。
1996年年初,Sun发布了Java的第一个版本,但是这个版本并不能进行真正的应用开发,随后而来的Java1.1弥补了许多明显的缺陷,大大改进了反射能力,并为GUI编程增加了新的事件处理模型,但是仍具有很大的局限性。1998年JavaOne会议上,Java1.2版发布,取代了之前玩具式的GUI,并且图形工具箱更加精细而具有可伸缩性,此次更新推出了标准版、微型版和企业版,即Java2 SE、Java2 ME和Java2 EE。2000年发布的1.3版和2002年发布的1.4版只是对Java2版本进行BUG修正,扩展了标准类库,提高了系统性能,而在此期间,applet渐渐淡出了客户端的应用,Java成为服务器端应用的首选平台。
2004年Java 5.0(一开始命名为1.5,但是在JavaOne会议后版本号提升至5.0)发布,这是自1.1版以来第一个对Java做出重大改进的版本,此次更新添加了泛型类型、“for each”循环、自动装箱和元数据等。2006年年末,Java 6发布,但是此次更新仅仅改进了性能、增强了类库,并未对语言方面再进行改进。2009年,Sun被Oracle收购,因此Java的开发停滞了很长一段时间,直到2011年Oracle发布了Java 7,但是只是做了一些简单的改进,决定把重要改进留到java 8。
2014年Oracle发布了Java 8,此次更新的重点之一就是Lambda表达式,目的是使Java更易于为多核处理器编写代码;其次新加入的Nashorn引擎也使得Java程序可以和JavaScript代码互操作;加入了新的类库并改进GC和并发。由于版本升级带来的学习成本提升和语法变更导致的后期维护难度提升等因素,Java 8目前还未在实际开发中大范围的投入使用,而本人所入手的书籍也是以Java 7为基础进行讲解的,所以此次温故知新过程中不会过多的考虑Java 8。
在Java 8还未大范围投入使用的时候,Oracle已发布Java 9的开发计划,根据计划来看,Java 9将于2016年发布。Java 9的更新重点则会是Java 模块化、统一JVM日志、JSON API以及更加智能的编译器,同时还会扩展标准类库。
Java白皮书解读
就目前的使用情况来看,Java的确是一种优秀的程序设计语言,然而Java并不只是一种语言,Java是一个完整的平台,它包括了许多可重用的代码和一个可提供垃圾回收等服务的执行环境。Java的设计者们编写了Java“白皮书”并发布了一个简短的摘要,主要是用来解释设计的初衷,这里我们根据摘要中的11个关键词来了解下Java,因为我个人对这11个词的理解有限,所以这里我尽量使用简单的描述来解释清楚这些概念,有可能会有所纰漏,希望有大神可以指点一二。
1.简单性
简单在这里有两个含义,一个是易学,另一个是小。易学指的是容易上手,Java在设计之初为了更容易理解还是选择尽可能的接近C++,剔除了C++中很多难理解、易混淆的特性,而到现在为止Java对于初学者而言也是比较容易上手;在上面的发展历程中提到过,Java设计之初是为了在小型机器上运行的,所以当时的体积非常小,然而经过了这么多年的扩展,现在的类库已经非常大了,不过也有针对小型机器的Java ME版本。
2.面向对象
面向对象是一种程序设计技术,它将重点放在数据和对象的接口上,在过去的几十年里,面向对象已经证明了自身的价值,现在新诞生的语言也都是基于面向对象,而Java也是基于面向对象,且从本质上来讲,面向对象的能力和C++相当,仅将后者的多继承改为了更为简单的接口。
3.网络技能
网络编程时Java的强项,Java有强大的类库用于处理网络相关的内容,Java较之其他语言大幅度简化了类似于socket之类的网络编程,而远程方法调用机制则使得分布式对象可以进行通信。
4.健壮性
Java的健壮性主要是Java程序不会有内存分配的错误,相较于C++,Java投入了大量的精力进行早期问题检测和动态监测,而且Java的指针模型可以消除重写内存和损坏数据的可能。
5.安全性
安全性几乎是所有语言都会考虑的一个特性,Java在设计时是要适用于网络和分布式环境,所以在安全性方面下了很大功夫。从Java 1.0开始,sun公司就大力支持对于Java安全性的研究,在这20多年间,众多安全特性相继加入Java中,Java的安全机制也越发强大,但是大家都知道,任何系统都会有安全问题,只是多少的问题。
6.体系结构中立
这个关键词我们可以理解为硬件上的跨平台,上边提到Java设计之初考虑到了处理器的多样性,所以要求语言与处理器类型无关,通过Java虚拟机实现了硬件的跨平台,只要有Java运行时环境即可运行。
7.可移植性
这个特性就是平时所说的跨平台,Java和C++不同的是Java没有依赖具体实现的地方,基本数据大小等都做了明确的说明,例如int永远为32位,而在C++中有可能是16位,也有可能是32位。
8.解释型
Java解释器可以在任何移植了解释器的机器上执行java的字节码。这一特性并没有给java带来太多的好处,而且导致Java的早期开发工具速度非常慢,Java目前是使用即使编译器将字节码翻译成机器码。
9.高性能
Java的高性能这一特性主要来自于即时编译器,Java刚开始时的高性能主要是“适用性更强”,然而现在的即时编译器性能已经逐渐的超越传统编译器,可以包含更多的可用信息,而且可消除函数的调用。
10.多线程
多线程是Java成为服务器端主力开发语言的主要原因之一,Java可以便捷的进行多线程处理,而且还具备平台无关性,因为Java将多线程的实现交给了操作系统和底层的线程库来实现。
11.动态性
Java目前是允许程序员获得运行时对象的结构和行为,Java的动态性表现在java的库可以不断的添加新方法等,而且对现有程序不会有任何影响。
再回首,Java温故知新(一):Java概述的更多相关文章
- 再回首,Java温故知新——开篇说明
不知不觉在IT界从业2年了,两年时间足够一个人成长很多,当然也会改变很多事.在这两年时间里,随着对技术的深入了解,知识面的拓展以及工作难度的增大,渐渐的感觉自己技术方面根基不稳,多数问题也只是做到知其 ...
- 再回首,Java温故知新(十一):Java反射
最近继续回顾Java基础,进行到了Java反射这一部分,个人感觉这部分应该算是Java的高级特性了,在日常开发中使用的并不多,应用人员主要是工具构建人员,所以这次学习中以了解为主,Java反射主要应用 ...
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- 回首Java——再回首JDK
如果你是刚要被Java军训的新兵,可有几时对环境搭建而不知所措?又如若你是驰骋Java战场多年的老将,可曾拿起陪伴你许久的82年的JDK回味一番?今天我们就来道一道JDK,重新来认识认识这个既熟悉又陌 ...
- Java NIO:NIO概述
Java NIO:NIO概述 在上一篇博文中讲述了几种IO模型,现在我们开始进入Java NIO编程主题.NIO是Java 4里面提供的新的API,目的是用来解决传统IO的问题.本文下面分别从Java ...
- (转载)Java NIO:NIO概述(一)
Java NIO:NIO概述 在上一篇博文中讲述了几种IO模型,现在我们开始进入Java NIO编程主题.NIO是Java 4里面提供的新的API,目的是用来解决传统IO的问题.本文下面分别从Java ...
- Java NIO2:NIO概述
一.概述 从JDK1.4开始,Java提供了一系列改进的输入/输出处理的新特性,被统称为NIO(即New I/O).新增了许多用于处理输入输出的类,这些类都被放在java.nio包及子包下,并且对原j ...
- Java基础(Java概述、环境变量、注释、关键字、标识符、常量)
第1天 Java基础语法 今日内容介绍 u Java开发环境搭建 u HelloWorld案例 u 注释.关键字.标识符 u 数据(数据类型.常量) 第1章 Java开发环境搭建 1.1 Java概述 ...
- java基础(1):java概述、jdk的安装、环境变量的配置、helloworld案例
1. Java开发环境搭建 1.1 java概述 众所周知Java是一门编程语言,编程语言就是用来编写软件的.那么使用Java到底能用来编写什么软件呢?你所熟知的很多软件都可以用Java来编写,例如: ...
随机推荐
- Python深入学习笔记(二)
计数器Counter Counter类是自Python2.7起增加的,属于字典类的子类,是一个容器对象,主要用来统计散列对象,支持集合操作+.-.&.|,其中后两项分别返回两个Counter对 ...
- Git中从远程的分支获取最新的版本到本地
Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin mastergit l ...
- 2016021902 - linux解压缩命令
转载自:http://blog.csdn.net/luo86106/article/details/6946255 .gz 解压1:gunzip FileName.gz 解压2:gzip -d Fil ...
- JDK源码阅读(五)java.io.Serializable接口
package java.io; public interface Serializable { } (1)实现Serializable接口的类,将会被提示提供一个 serialVersionUID ...
- vc2010配置opencv2.4.4库(图文 转)
VC 2010下安装OpenCV2.4.4 说明: 安装平台:32位XP,VS2010: OpenCV 2.4.4不支持VC 6.0: 网上有很多用CMake编译OpenCV的安装教程,这 ...
- poj 3667 Hotel
昨天学习了线段树的延迟标记: 发现自己还有区间合并没有学: 抓紧时间学习一下: 代码: #include<cstdio> #include<algorithm> #define ...
- 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错
原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ...
- “ORA-12545: 因目标主机或对象不存在,连接失败”怎么办?
大概知道是因为主机名或者IP地址的原因引起的,但是不知道究竟,就去百度上查了查,然后就根据几种答案做出了以下就该: 1.E:\oracle\product\10.2.0\db_1\NETWORK\AD ...
- 数据结构之数组Array
数组Array 基本操作 Status InitArray(int dimm,...)//若维数dim和随后的各维长度合法,则构造相应的数组A,并返回OK Status DestroyArray() ...
- Y86处理器的各个阶段
0x00e:30f480000000 | irmovl $128,%esp 实现所有Y86指令所需要的计算分为6个基本阶段:取值.译码.执行.访存.写回和更新 ...