第1章 Java语言概述与开发环境
本章要点:
1、Java语言的发展简史
2、编译型语言和解释型语言
3、Java语言的编译、解释运行机制
4、通过JVM实现跨平台
5、安装JDK
6、设置PATH环境变量
7、编写、运行Java程序
8、Java程序的组织形式
9、Java程序的命名规则
10、初学者易犯的错误
11、掌握jshell工具用法
12、Java的垃圾回收机制
1.1 Java语言的发展简史
- 1990年末,Sun公司准备为下一代智能家电(电视机,微波炉,电话)编写一个通用的控制系统。该团队最初考虑使用c++语言,很多成员包括sun的首席科学家Bill Joy,发现c++语言在某些方面(复杂,系统资源极其有限,缺少垃圾回收系统等),于是Bill Joy决定开发一种新的语言,Oak。
- 1992年夏天,Green计划已经完成新平台的部分功能,包括Green操作系统,Oak的程序设计语言、类库等。同年11月,Green计划被转成“FirstPerson有限公司”,一个sun公司的全资子公司。该团队致力于创建一种高度互动的设备。
- 1994年夏天,互联网和浏览器的出现不仅给广大互联网的用户带来了福音,也给Oak语言带来了新的生机。Gosling立即意识到,这是一个机会,于是对Oak进行了小规模的改造。
- 1994年秋,小组中的Naughton和Jonathan payne 完成了第一个java语言的网页浏览器:WebRunner。sun公司实验室主任Bert Sutherland 和技术总监Eric Schmidt观看了该网页的演示并给予了高度的评价。当时Oak这个商标已经被注册了,于是改名为Java。
- 1995年初,sun公司发布Java语言,sun公司直接把java放到互联网上,免费给大家使用,甚至连源代码也不保密,也放在互联网公开。几个月后,java成了互联网上最热门的宝贝。各种各样的小程序层出不穷,java终于扬眉吐气,成为了一种广为人知的编程语言。
- 1996年底,Flash面世了,这是一种更加简单的动画设计软件:使用Flash几乎无须任何编程语言知识,就可以做出丰富多彩的动画。Flash逐渐蚕食了java在网页上的应用。
- 1997年2月18日,sun公司发布了JDK1.1,增加了即时编译器JIT。
- 1995年java诞生到1998年年底,java语言虽然成为了互联网上广泛使用的编程语言,但它没有找到一个准确的定位。
- 1998年12月,Sun发布了java历史上最重要的JDK版本:JDK1.2。并将java分成了J2EE(提供了企业应用开发相关的完整解决方案)、J2SE(整个java技术的核心和基础)、J2ME(主要用于控制移动设备和信息家电等有限存储的设备)三个版本。
- 2002年2月,Sun发布了JDK历史上最为成熟的版本,JDK1.4。
- 2004年10月,Sun发布了万众期待的JDK1.5。JDK1.5增加了诸如泛型,增强的for语句、可变数量的形参,注释,自动拆箱和装箱等。
- 2006年12月,Sun发布了JDK1.6。
- 2009年4月20日,oracle宣布将以每股9.5美元的价格收购Sun。oracle通过收购Sun获得了两项资产:java和Solaris。
- 2007年11月,Google宣布推出一款基于Linux平台的开源手机操作系统:Android。Android使用java语言来开发应用程序。Android平台的流行,让java语言获得了在客户端程序上大展拳脚的机会。
- 2011年7月28日,oracle发布了java SE 7-这次版本升级经过将近5年时间。引入二进制整数,支持字符串的switch语句等。
- 2014年3月18日,oracle发布了java SE 8。
- 2017年9月22日,oracle发布了java SE 9,此次版本升级强化了java的模块化系统,让Java语言更轻量化,而且采用了更高效、更智能的G1垃圾回收器,并在核心类库上进行了大量的更新,可以进一步简化编程。
1.2 Java程序运行机制
Java语言是一种特殊的高级语言,它既有解释型语言的特征,又具有编译型语言的特征。因为Java语言经过先编译后解释两个步骤。
1.2.1 高级语言的运行机制
- 计算机高级语言按程序的执行方式分为:编译型和解释型两种。
- 编译型语言是指使用专门的编译器,针对特定平台将某种高级语言源代码一次性地编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的程序格式。(现有的C、C++、Objective-C、Swift、Kotlin等高级语言都属于编译型语言)
- 解释型语言是指使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行的语言。(现有的JavaScript、Ruby、Python等语言属于解释型语言)
- 还有一种伪编译型语言,如Visual Basic,属于半编译型语言。
1.2.2 Java程序的运行机制和JVM
Java语言里负责解释执行字节码文件的是Java虚拟机,即JVM(Java Virtual Machine)。JVM是运行Java字节码文件的虚拟计算机。
1.3 开发Java的准备
1.3.1 下载和安装Java 9的JDK
- JDK的全称是Java SE Development Kit,即Java标准版开发包。
- JRE的全称是Java Runtime Environment,即Java运行时环境。
- JRE包含JVM,是运行Java程序的核心虚拟机,而运行Java程序不仅需要核心虚拟机,还需要其他的类加载器、字节码校验器以及大量的基础类库。JRE除包含JVM之外,还包含运行Java程序的其他环境支持。
1.3.2 设置PATH环境变量
1.4 第一个Java程序
1.4.1 编辑Java源代码
程序代码如下:
public class HelloWorld{
//Java程序的入口方法,程序将从这里开始执行
public static void main(String [] args){
//向控制台打印一条语句
System.out.pringln("Hello World!");
}
}
1.4.2 编译Java程序
-
javac命令用法如下:
- javac -d destdir srcFile
-
javac -d . HelloWorld.java
.点号代表当前路径。
1.4.3 运行Java程序
-
命令用法如下:
- java Java类名
- java HelloWorld
1.4.4 根据CLASSPATH环境变量定位类
- 如果使用1.5以上版本的JDK,完全可以不用设置CLASSPATH环境变量。
- 如果使用1.4以前的版本的JDK,则需要在CLASSPATH环境变量中添加点(.),用以告诉JRE在当前路径下搜索Java类。(“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”,%JAVA_HOME%代表JDK的安装目录)
- JDK 9的lib目录已经不再包含dt.jar和tools.jar文件。
1.5 JAVA程序的基本规则
1.5.1 Java程序的组织形式
Java程序是一种纯粹的面向对象的程序设计语言,因此Java程序必须以类的形式存在,类(class)是Java程序的最小程序单位。Java程序不允许可执行性语句、方法等成分独立存在,所有的程序部分都必须放在类定义里。
1.5.2 Java源文件的命名规则
- Java程序源文件的扩展名必须是.java,不能是其他文件的扩展名。
- 一个java源文件可以包含多个类定义,但最多只能包含一个public类定义;如果java源文件里包含public类定义,则该源文件的文件名必须与这个public类的类名相同。
1.5.3 初学者容易犯的错误
1、CLASSPATH环境变量的问题
2、大小写问题:Java语言严格区分大小写。
3、路径里包含空格的问题。
4、main方法的问题,不能首字母大写。
1.6 JDK 9新增的jshell工具
java9引入了jshell这个交互性工具,让Java也可以像脚本语言一样来运行,可以从控制台启动 jshell ,在 jshell 中直接输入表达式并查看其执行结果。当需要测试一个方法的运行效果,或是快速的对表达式进行求值时,jshell 都非常实用。
1.7 Java 9的G1垃圾回收器
传统的C/C++等编程语言,需要程序员负责回收已经分配的内存,显示进行垃圾回收主要有以下两个缺点:(1)程序忘记回收无用内存,从而导致内存泄漏,导致系统性能下降。(2)程序错误地回收程序的核心类库内存,从而导致系统崩溃。
与C/C++等编程语言不同的是,Java语言不需要程序员直接控制内存的回收,都是由JRE在后台自动进行的,这种机制被称为垃圾回收(Garbage Collection,也称为GC)。垃圾回收是一种动态存储管理技术,它自动释放不再被程序引用的对象,按照特定的垃圾回收算法实现内存资源的自动回收功能。
垃圾回收除了清除不用的对象外,也可以清除内存记录碎片。
垃圾回收能自动释放内存空间,减轻编程的负担,这使得Java虚拟机具有两个显著的优点:(1)垃圾回收机制可以很好地提高编程效率;(2)垃圾回收机保护程序的完整性。
垃圾回收机制的一个潜在的缺点:是它的开销影响程序的性能以及垃圾回收算法不完整性。
2011年7月发布的Java 7提供了G1垃圾回收器代替了原来的并行标记/清除垃圾回收器(CMS)。
(看了网上很多博客介绍的关于G1垃圾回收的文章,没有搞太明白!)
1.8 何时开始使用IDE工具?
真是仁者见仁智者见智啊!各有各的说法,俗话说得好,杀猪杀屁股——各有各的杀法!按自己的方法来吧!先把最基本的学会。
1.9 本章小结
本章简单介绍了Java语言的发展历史,并详细介绍了Java语言的编译、解释运行机制,也大致讲了Java语言的垃圾回收机制。
本章的重点是如何搭建Java开发环境。