Java历史
Java语言的诞生
大概是1995年左右,Sun公司的詹姆斯·高斯林(James Gosling )带领团队开发Java语言。
一般来说詹姆斯·高斯林是公认的Java之父
Java在最开始名字叫做Oak(橡树),但是Oak作为商标已经被注册了,于是采用了Java这个名字
Java在英文中的原意是印度尼西亚的爪哇岛(Jawa),以盛产咖啡而闻名
Java的诞生可以说是应运而生,随着互联网的浪潮而兴起。它沿袭了C/C++的很多语法和概念,但是又简化、优化了很多地方。于是Java很快,在2000年左右就成为了最主流的编程语言,直至今天
Java语言的发展历程
1995年5月,在SunWorld大会上,宣布发布Java 1.0版本,并首次提出了著名的“Write Once,Run Anywhere”
1996年1月,JDK 1.0发布,Java语言有了第一个正式版本的运行环境,代表技术为:Java虚拟机(JVM)
1996年5月,Sun公司在旧金山召开了首届JavaOne大会,JavaOne是全世界Java程序员一年一度的交流盛会
1997年2月,JDK 1.1发布,Java语法有了一定的发展,代表语法是内部类,反射,JDBC等
1998年12月,Java迎来了革命性的1.2版本,Sun公司将Java技术体系拆分为了三个方向:
面向桌面应用开发的 J2SE(Java 2 Platform,Standard Edition)
面向企业级开发的 J2EE(Java 2 Platform,Enterprise Edition)
面向手机等移动终端开发的 J2ME(Java 2 Platform,Micro Edition)
J2SE 1.2的代表技术是集合(Collection)体系
2000年5月,J2SE 1.3版本发布,主要改进是升级了Java虚拟机,极大提升了Java执行效率
2002年2月,J2SE 1.4版本发布,1.4版本是Java真正走向商业成熟的一个版本
直到现在,仍然有些项目可以运行在1.4版本上
1.4的代表技术是异常,正则表达式,日志机制等
2002年同年,微软(Microsoft)公司发布了Java的竞品语言C#以及.net平台,极大的影响了Java的发展
2004年9月,J2SE 5.0版本发布,Sun公司摒弃了以往1.X的命名规则,主要原因是:
“1.5版本的改进是如此的大,以至于我们想用5.0称呼它”
微软的.net平台发布没多久,就从1.0直升到了2.0,Sun公司认为1.X命名方式过于保守
1.5版本的代表技术是泛型,自动装箱,注解,枚举,可变参数,增强for等
2006年11月,Sun公司由于经营不善,濒临倒闭,于当年的JavaOne大会上宣布开源Java
2006年12月,Java SE 6 发布。这一次Sun公司删除了版本号中的“.0”,重新命名Java技术体系的三个方向:
面向桌面应用开发的 Java SE(Java Standard Edition)
面向企业级开发的 Java EE(Java Enterprise Edition)
面向手机等移动终端开发的 Java ME(Java Micro Edition)
Java 6是Sun公司发布的最后一个Java版本,主要改进是提供了脚本支持,优化了性能
2009年4月,甲骨文(Oracle)公司收购Sun公司,一度辉煌市值超千亿美元的Sun公司湮灭在历史的尘埃中
吴军博士的《浪潮之巅》
2011年7月,Oracle公司发布Java SE 7,这是Oracle公司发布的第一个Java版本,是一个过渡版本
JDK版本分为过渡版本和长期版本
过渡版本主要作用是为了让开发者预览新特性,官方不会长期支持修复bug,不稳定
长期版本为官方长期关注,并修理bug的版本,稳定
2014年3月,Java SE 8发布,这是Oracle公司发布的第一个Java长期版本,为目前主流商用Java版本
2017年9月,Java SE 9发布,是一个过渡性版本
2018年3月,Java SE 10发布,是一个过渡版本
2018年9月,Java SE 11发布,这是Oracle公司发布的第二个Java长期版本
2019年3月,Java SE 12发布,过渡版本
2019年9月,Java SE 13发布,过渡版本
2020年3月,Java SE 14发布,过渡版本
2020年9月,Java SE 15发布,过渡版本
....
Java主要用途
Web应用
Web应用,说简单点就是通过浏览器(广义)访问的应用,是当前Java最主流的用途
Android开发
安卓开发已经逐渐式微,越来越少人使用Java开发Android
H5技术
桌面应用开发
桌面应用,简单来说,只需要单机就能使用的应用,就是桌面应用
普遍来说,桌面应用开发是C/C++的天下
但是某些特殊情况下,仍然需要使用Java开发桌面应用
JDK和JRE
JRE(Java Runtime Environment):Java运行时环境
-
JRE包括Java虚拟机、运行时核心类库等Java程序运行时必备的环境
-
JRE主要是给已经编写好的Java程序使用,也就是说操作系统中想要运行Java程序,必须要有JRE
JDK(Java Development Kit):Java开发者工具包
-
JDK包含JRE
-
除了JRE外,JDK还提供了Java开发者需要使用的工具,比如javac.exe,java.exe(Windows)
Java程序的运行原理
以Windows操作系统为例
Java语言的跨平台性
Write Once,Run Anywhere
Java语言最引以为傲,最显著的特性就是Java的跨平台性
-
Java的跨平台性是指Java语言编写的应用程序可以在不同的系统平台上运行
Java实现跨平台性依赖于Java虚拟机(Java Virtual Machine,简称JVM)
-
Java程序并不是直接执行在操作系统上的,而是执行在Java虚拟机中
-
每个操作系统平台都有自己独有的Java虚拟机
Java可以跨平台吗?JVM可以跨平台吗?
Java语言的编译型和解释型
Java语言是解释型语言?Java语言是编译型语言?
编译执行:通过编译器将源代码编译为机器码(机器能识别的代码指令),然后机器直接执行
解释执行:指由解释器直接执行,不需要编译成机器语言
拿做饭来比喻,源代码就像食材:
-
解释执行像吃火锅,一边煮一边吃,煮菜的人相当于解释器的地位(源代码一边解释,一边执行)
-
编译执行像炒菜吃,先把菜炒好再吃,炒菜的人相当于编译器的地位(源代码一次性编译,直接执行)
食材完全可以做火锅吃,也可以做菜吃,无论怎么吃都只是吃的一种方式罢了
同样的,无论解释执行还是编译执行,其实只是源代码的一种执行方式而已
回到我们的问题本身:
说Java是解释型语言,或编译型语言其实都是很荒谬的
这就像说萝卜必须做火锅吃,不能炒菜吃一样
正确的说法是Java某种特定实现是解释型的或者是编译型的
拿Java来说,编译得到.class文件的步骤无法忽视,某些JVM内部实现也不是解释执行的,而是编译
C语言是很多人根深蒂固的编译型语言,但实际上C语言也有它的解释器实现
所以,所谓的编译型和解释型并不是语言的特性,而是语言实现的特性
启示:
-
不要执拗于概念
-
很多概念随着时间和技术的发展,会变得不适用
-
学习技术要多思考,不要人云亦云
Java开发工具
开发Java可以使用的工具很多
记事本类:
Notepad(微软记事本)
Notepad++(弃用)
Sublime Text(主流)
集成开发环境(IDE):
Eclipse(开源免费,有些公司会使用)
MyEclipse(收费,曾经很火)
IDEA(收费,但是可以科学使用,目前最火热的)