第一章 Java 概述
第一章 Java 概述
学习目标
- 理解 Java 语言的跨平台实现原理
- 理解 JDK/JRE/JVM 的组成和作用
- 能够参照笔记配置环境变量
- 能够编写 HelloWorld 程序编译并执行
1、计算机语言概述
1.1、 计算机语言是什么?
计算机语言(Computer Language)指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是,指令通过一种语言传达给机器。为了使电子计算机进行各种工作,就需要有一套用以编写计算机程序的数字、字符和语法规则,由这些字符和语法规则组成计算机各种指令(或各种语句)。这些就是计算机能接受的语言。
1.2、 计算机的语言发展
第一代:机器语言
- 1946年2月14日,世界上第一台计算机ENAC诞生,使用的是最原始的穿孔卡片。这种卡片上使用的语言是只有专家才能理解的语言,它是用二进制代码表示的语言,与人类语言差别极大,这种语言就称为机器语言。机器语言是第一代计算机语言。这种语言本质上是计算机能识别的唯一语言,人类很难理解。以后的语言就是在这个的基础上简化而来。虽然后来发展的语言能让人类直接理解但最终送入计算机的还是这种机器语言。
第二代:汇编语言
- 计算机语言发展到第二代,出现了汇编语言。汇编语言用助记符代替了操作码,用地址符号或标号代替地址码。这样就用符号代替了机器语言的二进制码。汇编语言也称为符号语言。汇编语言是面向机器的,能直接与存储器、接口电路打交道,也能申请中断,因此汇编语言程序能直接管理和控制硬件设备。程序设计人员必须对计算机有相当深入的了解,才能使用汇编语言编制程序。汇编语言缺乏通用性,程序不易移植。不同计算机的汇编语言之间是不能通用的,因为它们各自都有适合于自己机型特点的汇编语言。但是,掌握了一种计算机的汇编语言,有助于学习其他计算机的汇编语言。比起机器语言,汇编大大进步了。尽管还是复杂,用起来容易出错,但在计算机语言发展史上是机器语言向更高级的语言进化的桥梁。
第三代:高级语言
- 当计算机语言发展到第三代时,就进入了“面向人类”的高级语言。高级语言是一种接近于人们使用习惯的程序设计语言。它允许用英文写计算程序,程序中的符号和算式也与日常用的数学式子差不多。高级语言发展于20世纪50年代中叶到70年代,流行的高级语言已经开始固化在计算机内存里了,比如 Basic语言。现在,计算机语言仍然在不断的发展,种类也相当多,比如 FORTRAN语言, COBOL语言,C语言,C++,C#, PASCAL,Java,Python等等。高级语言接近于自然语言和数学语言,容易为人们掌握;独立于机器,有一定的通用性;计算机不能直接识别和执行用高级语言编写的程序,需要使用编译器或者解释器,转换为机器语言才能被识别和执行;用高级语言编写的程序大大提高了编写效率。
- 汇编语言与机器语言一一对应,每条机器指令都有与之对应的汇编指令
- 把高级语言变成计算机可以识别的二进制语言的过程称为编译
2、Java 语言概述
2.1、Java语言的发展历史
Java之父是詹姆斯.高斯林(James Gosling)。
1996年发布JDK1.0版。我们将学习的版本为 Java 8,这个版本更加稳定,大家对于能找到的bug基本上都找出来了,而最新版本可能会发生意向不到的 Bug。
为 Java 取名的是 Sun 公司的马克 奥颇门(Mark Opperman)。马克 奥颇门是在一家咖啡店与同事品尝咖啡时得到灵感的。Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。国外的许多咖啡店用Java来命名或宣传,以彰显其咖啡的品质。Java 语言中的许多库类名称,多与咖啡有关,如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans (对象豆)等等。Java 使 Sun 市值大升,一度超过2千亿美元。所有的网络巨头公司为之一振,IBM、HP、微软为 Java 配置了专门的开发团队,全球几百万软件工程师眷顾于 Java,着迷于 Java。1982年 Sun 公司成立。1986年 Sun 公司上市。1995年 Sun 公司推出著名的 Java 编程语言。Sun 公司的位置非常像微机争霸战中的苹果公司。它有自己成套的硬件和操作系统,但是它缺乏应用软件。2001年 “9.11”以前,Sun公司市值超过1000亿美元。
2.2、Java 语言的特点
(1)优点
- 面向对象:Java语言支持封装、继承、多态,面向对象编程,让程序更好达到高内聚,低耦合的标准。
- 支持分布式:Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
- 健壮型:Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。
- 安全性高:Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查。
- 跨平台性:Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。
(2)缺点
- 语法过于复杂,严谨,对程序员的约束比较多,与python和php等相比入门相对较难。但是一旦学会了,就业岗位需求量大,而且薪资待遇节节攀升。
- 一般适用于大型网站开发,整个架构会比较重,对于初创公司开发和维护人员的成本比较高(即薪资高),选择用Java语言开发网站或应用系统的需要一定的经济实力。
2.3、Java 的应用领域
- 安卓 Apps
- 如果你想知道 Java 应用在哪里,你离答案并不远。打开你的安卓手机或者任何的 App,它们完全是用有着谷歌 AndroidAPI 的 Java 编程语言编写的,这个 API 和 JDK 非常相似。前几年安卓刚开始起步而到今日已经很多 Java 程序员是安卓 App 的开发者。
- 网站应用
- Java 同样也在电子商务和网站开发上有着广泛的运用。你可以运用很多架构,这些架构是用SpringMVC,Struts2.0 和类似的框架开发出来的。 甚至简单的 Servlet,JSP 和 Struts 在各种政府项目也是备受欢迎,许多政府,医疗,保险,教育,国防和其他部门的网站都是建立在Java 之上的。
- 软件工具
- 很多有用的软件和开发工具都是运用 Java 编写和开发的,例如 Ecilpse,InetelliJIdea 和NetbansIDE。我认为这些都是最经常使用的用 Java 编写的桌面应用程序。Swing 曾经在图形用户界面的客户端开发非常流行,它们大多数应用在金融服务领域以及投资银行。虽然现在JavaFx 正在逐渐地流行起来,但仍然无法替代 Swing,而且 C# 已经在大部分金融领域中代替了 Swing。
- 嵌入式领域
- Java 在嵌入式领域也有很大的应用。你只需要130KB就能够使用 Java 技术(在一块小的芯片或者传感器上),这显示了这个平台是多么的可靠。Java 最初是为了嵌入式设备而设计的。事实上,这也是 Java 最初的一项“立即编写,随处运行”主旨的一部分。
- 大数据技术
- Hadoop 和其他的大数据技术也在不同程度使用着 Java,例如 Apache 的基于 Java 的 Hbase,以及 ElasticSearch。 但是 Java 并没有占领整个领域,还有其他的大数据技术例如 MongoDB就是使用 C++ 编写的.如果 Hadoop 和 ElasticSearch 逐渐发展,那么 Java 就能有潜力在大数据技术领域上得到更大的发展空间。
3、Java 的跨平台原理
首先我们得知道这里的”平台“指的是什么。所谓的平台,其实就是指计算机操作系统,比如windows、linux、mac系统。而跨平台是指在一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。通俗地说,我们开发出来一个软件,可以同时在windows、linux、mac等系统中运行,这就是”跨平台“!
Java语言具有”跨平台“的特性,是相对于其他编程语言来说的。这是因为Java语言编写出的应用程序,只需要编写一次代码,就可以在不同的系统上运行。而其他的一些高级语言,比如C语言写出的代码,如果想在不同的平台上运行,需要编译成针对不同系统平台的目标代码。比如在Windows系统中编译的C语言程序,在Linux下是不能运行的,需要重新编译成Linux下的目标程序。反之,在Linux下编译的C语言程序,在Windows下也不能运行。
以上就是C语言针对不同平台的编译过程,换一个平台就得编译一次,所以C语言是无法实现跨平台的!但 Java 却可以实现跨平台,它是怎么做到的呢?
Java 语言编写的程序的编译并不会生成特定平台的机器码,而是生成一种与平台无关的字节码,也就是 class 字节码文件。当然,这种字节码不是可执行性的,必须使用 Java 解释器来解释执行,Java 解释器实际上就是特定系统平台下的一个应用程序,只要实现了这个解释器程序,Java 字节码就能通过该解释器在该平台下运行,这是 Java 之所以可以实现跨平台的根本原因所在!
根据不同的平台开发相应的字节码解释器程序,在各个平台上安装这个解释器后,我们的 Java 源代码只需要编译一次,生成字节码文件,然后交给各个平台的解释器就可以直接运行程序。通过解释器, Java 程序可以实现一次编译处处运行。
3.1、Java 的运行机制
由 Java 跨平台的原理可知,Java 程序的运行需要经过两个步骤:
- 将 Java 源代码通过编译器编译成 class 字节码
- 将 class 字节码通过解释器运行起来
3.2、JDK、JRE 和 JVM
- JVM(Java Virtual Machine ):Java 虚拟机(JVM,Java Virtual Machine)是由软件技术模拟出计算机运行的一个虚拟的计算机,我们在之前所说的 Java 解释器就是 JVM 的核心模块,它负责解释执行字节码指令集。也就是说,只要一台机器可以运行Java的虚拟机,那么就能运行 Java 语言编写的程序。而不同的平台,需要安装不同的 Java 虚拟机程序。那么我们编写完 Java 程序之后,需要先将 .java 的源文件编译为 .class 的字节码文件,然后在 Java 虚拟机中来执行这些字节码文件。简而言之,我们编写的 Java 代码,都运行在 JVM 之上。
- **JRE ** (Java Runtime Environment) :是Java程序的运行时环境,包含
JVM
和运行时所需要的核心类库
。 - JDK (Java Development’s Kit):是Java程序开发工具包,包含
JRE
和开发人员使用的工具。
我们想要运行一个已有的 Java 程序,那么只需安装JRE
即可。
我们想要开发一个全新的 Java 程序,那么必须安装JDK
,其内部包含JRE
。
它们之间的关系为:
4、开发环境搭建
4.1、JDK 的下载与安装
进入下载网址:Java Downloads | Oracle 中国
找到 java8 版本
选择 Windows 操作系统,点击下载 64 位安装器
下载需要注册登录,注册一个 Oracle 账号登录之后即可下载
下载完成后点击安装
- 点击公共 JRE 选项,取消安装独立的 JRE,点击此功能将不可用
- 点回开发工具选项,更改安装目录,如
D:\develop\Java\jdk-1.8.0\
- 然后一直点击下一步完成安装
4.3、配置环境变量
环境变量信息中记录了一系列程序所在的路径,当我们为 JDK 的各种程序工具所在的路径配置到环境变量之中,计算机就可以通过查找环境变量中的程序路径,使我们可以在任何地方使用 JDK 工具,如 javac 编译器以及 java 解释器等。而这些工具都在 bin 目录中,所以我们需要将 bin 目录的路径配置到环境变量之中。
- 打开资源管理器,右键点击右侧菜单栏的计算机图标,点击属性
- 在面板中找到“高级系统设置”,点击进入
- 点击环境变量
- 编辑系统变量中的 path 属性
- 将 bin 目录的完整路径新增进 path 属性中
5、第一个 Java 程序
JDK 安装完成,我们可以开始编写我们的 Java 程序啦!根据 Java 的运行机制,我们开发 Java 程序的基本步骤为:
- 编写源代码
- 将源代码编译为字节码文件
- 将字节码文件解释运行
5.1、编写 Java 源代码
高级编程语言的源代码都可以用简单的文本编辑器进行编写,你可以使用简单的记事本,也可以使用 Notepad++ 或者 VSCode 这些可以进行代码颜色标识的编辑器,后者会更利于你的学习。
- 我们为源代码新建一个目录,如
D:\gckjCode\javaSE\day01
- 在目录中我们新建一个文本文件,将文件名修改为
HelloWorld.java
,注意 Java 源代码文件的扩展名为.java
。 - 我们可以通过 VSCode 打开文件,进行如下编辑:
1 | public class HelloWorld { |
代码简要释义
这一段代码的作用是,在命令行窗口中打印输出一句话Hello World!
。
1 | public class HelloWorld { |
上面的代码对于我们初学者来说,可以先简单的理解为 Java 代码的容器,所有代码都必须装在这里面。其中class
这个单词我们称为类,后面所跟的 HelloWorld
被称为类名,用于给它所包含的代码命名,类似文章的标题一样。
1 | public static void main(String[] args) { |
这段代码我们称之为 main 方法,它基本是 Java 程序的固定写法,它用于告诉计算机程序从其中的第一行代码开始运行,简单来说,main 方法是计算机执行 Java 代码的入口。至于为何需要这样写,先暂且不论,记住其作用以及写法,后续章节会慢慢展开。
1 | System.out.println("Hello World"); |
这一行代码的作用是在命令行窗口中打印输出一句话Hello World!
,我们可以在括号的双引号之中写入任何我们想要输出的文字并打印到命令行窗口中。
所以,对于 Java 程序编写的格式为:
1 | public class 类名 { |
注意:
- Java 是需要区分大小写的,比如 main 和 Main 是完全不同的!
- 当我们保存文件时,文件名必须要与类名一致!虽然有些情况下可以不一致,但通常建议要一致,因为这样通常不会出错。
5.2、编译 class 字节码文件
- 在 Java 源代码目录中的地址栏上输入
cmd
打开命令行控制窗口 - 输入
javac HelloWorld.java
命令,通过 javac.exe 编译器程序对 Java 源代码进行编译 - 编译成功时,DOS 命令会换行并且什么都不发生,否则会输出一些编译错误信息
- 例如,当我们将 main 方法删除再编译,编译会失败并在窗口中提示缺少 main 方法
- 编译成功后,在源代码相同的目录中会生成一个由源代码编译而成的 class 字节码文件
5.3、解释运行 Java 程序
- 对于生成的 class 字节码文件,我们需要再通过解释器(JVM - Java虚拟机)进行逐行解释运行。
- 在 cmd 中输入命令
java HelloWorld
,即可运行程序,在命令行中打印出"Hello World!"
这句话。 - 需要特别注意的是,命令中的
HelloWorld
是不需要带扩展名.class
的,如果加上扩展名反而无法运行程序。
6、章节小结
- Java 程序的基本结构
1 | public class 类名 { |
- 编译 Java 源代码:
javac 源代码文件名.java
- 解释运行 class 字节码文件:
java 文件名
,不要加.class
扩展名 - 一些注意事项
- Java 区分大小写
- 文件名与类名要一致