什么是java
Java技术既是一种编程语言,也是一种平台。
java发展历史
20世纪90年代,硬件领域出现了单片式计算机系统,因为价格便宜一出现就引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品(电视机顶盒、移动电话等)的智能化程度。Sun公司为了抢占市场先机,就在1991年成立了一个Green项目小组,James Gosling、Patrick Lencioni等人组成的项目小组就在加利福尼亚州的一个小工作室里研究开发新技术。
该项目组最开始是选择采用c++来编写程序,但是对于硬件资源极其匮乏的单片式系统来说,c++太复杂了。而且由于消费电子产品所采用的嵌入式处理器芯片种类繁杂,如何让编写的程序跨平台运行也是一个难题。为了解决难题,他们着眼于语言的开发,一种面向对象的开发语言OaK因此诞生。
1995年Sun公司给OaK注册商标的时候发现OaK已经被人使用了,于是更名为java。
1995年5月23日,Sun公司正式发布了Java和HotJava浏览器。
1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0)。这是java发展的一个里程碑,标志着java成了一项独立的开发工具。同年10月,Sun公司发布了java的第一个即时编译器(JIT)。
1997年2月,JDK 1.1发布。
1998年12月8日第二代java平台企业版javaEE发布。1999年6月,Sun公司发布了第二代java平台的三个版本:J2ME、J2SE、J2EE。
1999年4月27日,HotSpot虚拟机发布。HotSpot虚拟机发布时是作为JDK 1.2的附加程序提供的,后来它成为了JDK 1.3及之后所有版本的Sun JDK的默认虚拟机。
2000年5月,JDK1.3,JDK1.4和J2SE 1.3相继发布。
2001年9月24日,J2EE 1.3发布。
2002年2月26日,J2SE 1.4发布。
2004年9月30日,J2SE 1.5发布,成为java发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0。
2005年6月,发布了Java SE 6.0。Java的各种版本改名,J2EE改为了Java EE,J2SE改成了Java SE,J2ME改成了Java ME。
2006年11月13日,Sun公司宣布将java技术作为免费软件对外开放。Sun公司正式发布有关java平台的第一批源代码以及java迷你版的可执行源代码。
2007年3月起全世界的开发人员都可以对java源代码进行修改。
2009年,Sun公司被Oracle收购。
2011年7月,Java 7发布。
2014年3月,Java 8发布。
2017年9月,Java 9发布。
2018年3月,Java 10发布,之后每隔半年发布一个新版本。2021年3月,Java 16发布。
Java语言特性
java之所以被开发出来,其实是为了达到五个目的:
- 应当使用面向对象程序设计方法学
- 应当运行同一程序在不同的计算机平台执行
- 应当包括内建的对计算机网络的支持
- 应当被设计成安全地执行远端代码
- 应当易于使用,并借鉴以前那些面向对象语言(比如c++)的长处
java语言有着以下一些特性:
- 简单易用
- 面向对象
- 多线程
- 分布式
- 安全性
- 体系结构中立
- 可移植性
- 健壮性
- 动态性
- 高性能
- 解释型
简单易用是Java的一个设计目标,Java语言就像是C++的一个"纯净"版本,它摒弃很多C++的复杂特性,比如指针运算、结构、操作符重载、虚基类等等,所以Java会相对简单易上手。
使用面向对象程序方法学是Java被设计出来所要达成的目标之一。面向对象是程序设计方法的一种,与之对应的是面向过程。面向对象的设计理念涉及到了软件开发行业的各个方面,比如面向对象分析(OOA)、面向对象设计(OOD)、以及面向对象编程(OOP)。这里说的面向对象编程指的是面向对象的编程实现。
Java是支持多线程的,Java的API中也提供了用户对于多线程开发的包。
Java语言是分布式的,它支持网络应用的开发,在Java的API中也提供有支持网络应用开发的包。
Java适用于分布式环境,为了满足这个目标,Java从一开始就被设计成能够防范各种攻击,如运行时堆栈溢出(蠕虫和病毒常用的攻击手段)、破坏自己的进程空间之外的内存、未经授权读写文件等。
Java的一个口号是"Compile Once,Run Anywhere"(一次编译,到处执行),说的正是Java的体系结构中立以及可移植性,或者说是平台无关性。Java程序是先经过Java编译器(javac.exe)编译成为字节码文件,然后再通过Java虚拟机(JVM)执行这些字节码文件。Java实现平台无关性的关键就在JVM上,通过不同的系统采用不同的JVM来实现平台无关性。
Java是一门强类型的语言,它摒弃了C++的指针、提供了自动垃圾回收机制、异常处理机制以及安全性检查等,健壮性是有保障的。
Java的动态性是说Java的动态加载和绑定。在C++中,当你向类中添加新方法或新的实例变量时,任何引用该类的类都需要重新编译。Java解决了这个问题。Java编译器不会将引用编译成数值,而是将引用作为信息传递给字节码验证程序和解释程序(字节码验证程序也是确保Java程序安全的一道防线),Java解释器到最后才会进行名称解析。
Java采用的是先编译后解释的运行模式,中间还需要通过字节码的验证程序进行验证,按理说它的性能应该不高啊?但其实还是要看和谁比。下图是Java和别的一些语言的比较,可以看到Java是一门高性能的语言,尤其是现在Java采用了即时(JIT)编译器,即便是和C++比也差不了多少了。
关于Java的语言特性可以参考James Gosling和Henry McGilton撰写的白皮书《The Java Language Environment》。