第一章 Java语言概述

0 阅读1分钟

第一章 Java语言概述

  • 📄 一、Java 语言的发展简史1
  • 📄 二、Java 语言的发展前景2
  • 📄 三、Java 语言的技术体系平台3
  • 📄 四、Java 语言的特点4
  • 📄 五、Java 语言的核心机制:JVM5
  • 📄 六、Java 语言的开发环境和运行环境6
  • 📄 七、JDK 的下载、安装与配置环境变量7
  • 📄 八、Java 程序开发步骤8
  • 📄 九、HelloWorld 小结9

Footnotes

  1. 一、Java 语言的发展简史

    1、起步阶段

    Java 语言是由詹姆斯·高斯林(James Gosling)和其 Green Team 小组成员共同开发的。

    1991 年,Sun 公司的工程师小组想要设计一种语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些设备的处理能力和内存都很有限,并且不同的厂商会选择不同的中央处理器(CPU),因此这种语言的关键是代码短小、紧凑且与平台无关(即不能与任何特定的体系结构捆绑在一起)。

    詹姆斯·高斯林(James Gosling)团队率先创造了这个语言,并命名为“Oak"(起名的原因是他非常喜欢自己办公室外的橡树)。后因智能化家电的市场需求没有预期的高,Sun 公司放弃了该项计划。

    随着 20 世纪 90 年代互联网的发展,Sun 公司发现该语言在互联网上应用的前景,于是改造了 Oak,于 1995 年 5 月以 Java 的名称正式发布。(Java 是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。)

    2、发展阶段

    发行版本发行时间备注
    Java 1.01996.01.23Sun 公司发布了 Java 的第一个开发工具包
    Java 1.11997.02.19JavaOne 会议召开,创当时全球同类会议规模之最。
    Java 1.21998.12.08Java 拆分成:J2SE(标准版)、J2EE(企业版)、J2ME(小型版)
    Java 1.32000.05.08
    Java1.42004.02.06
    Java 5.02004.09.30① 版本号从 1.4 直接更新至 5.0;② 平台更名为 JavaSE、JavaEE、JavaME
    Java 6.02006.12.112009.04.20 Oracle 宣布收购 SUN 公司
    2009.04.20Oracle 公司收购 SUN,交易价格 74 亿美元。
    Java 7.02011.07.02
    Java 8.02014.03.18此版本是继 Java 5.0 以来变化最大的版本。是长期支持版本(LTS)
    Java 9.02017.09.22① 此版本开始,每半年更新一次;②Java 9.0 开始不再支持 windows 32 位系统
    Java 10.02018.03.21
    Java 11.02018.09.25JDK 安装包取消独立 JRE 安装包,是长期支持版本(LTS)
    Java 12.02019.03.19
    ......
    Java17.02021.09发布 Java 17.0,版本号也称为 21.9,是长期支持版本
    ......
    Java19.02022.09发布 Java19.0,版本号也称为 22.9。
  2. 二、Java 语言的发展前景

    在国内市场,Java 语言无论是在企业级应用,还是在面向大众的服务方面都取得了很大进展,在中国的电信、金融等关键性业务中发挥着举足轻重的作用。目前,社会向着更加信息化、更加智能化的方向发展,Java 语言的应用范围也在不断扩大。Java 语言可以进行面向对象的应用开发、可视化、动态画面设计、系统调试、数据库操作等,在互联网技术行列中占有非常重要的地位。

    1、5G 时代

    麦肯锡曾经预测,到 2020 年,物联网市场仅仅就基于信息通信技术(ICT)支出这一块的产值就达到 5810 亿美元,复合年增长率(CAGR)在 7%~15%。所以无论是跨国公司、小型企业、政府组织还是私营企业,都希望可以利用物联网创造更多的价值。而高速无线网络,尤其是 5G 技术,将为整个物联网带来新的可能性。

    物联网是将许多日常设备以某种方式计算机化并连接到互联网的形式,它是各种不同技术(如数据科学、传感器、自动化和云计算)的集群。互操作性是物联网应用的关键因素。

    由于 Java 具有很好的互操作性,因此是复杂物联网项目的优秀选择。Java 的多功能性和灵活性,以及跨平台性,使得它可以一次编写就处处运行,所以物联网的开发人员一般倾向于使用 Java 语言进行开发,认为它是物联网开发的理想选择。

    2、云计算时代

    Java 在 Web、移动设备及云计算方面的前景广阔,随着云计算及移动领域的扩张,更多的企业在考虑将其应用部署在 Java 上。无论是本地主机还是公共云,Java 都是目前最合适的选择。

    3、人工智能时代

    IT 界有人认为,在大数据和人工智能时代中 Java 的影响力在下滑。但事实证明 Java 依然屹立不倒。实际上 Java 也可以被认为是 AI 开发的一个很好的选择,人工智能与搜索算法,以及人工神经网络和遗传编程有很大关系。同时,Java 在分布式微服务系统开发下的优势,为人工智能和大数据后端管理提供了强大地支持。

  3. 三、Java 语言的技术体系平台

    1998 年,Sun 公司根据应用的领域不同,把 Java 技术划归为三个平台,当时分别称为 J2SE、J2EE 和 J2ME,2006 年改名为 Java SE、Java EE 和 Java ME。

    1、Java SE

    Java SE 是 Java 平台标准版(Java Platform, Standard Edition)的简称,允许用户在桌面和服务器上开发和部署 Java 应用程序。Java 提供了当今应用程序所需要的丰富的用户界面、性能,具有通用性、可移植性和安全性。同时,Java SE 为 Java EE 提供了基础。 我们主要介绍的就是 Java SE 的技术。

    2、Java EE

    Java EE 是 Java 平台企业版(Java Platform, Enterprise Edition)的简称,用于开发便于组装、健壮、可扩展、安全的服务器端 Java 应用。

    Java EE 建立在 Java SE 之上,具有 Web 服务、组件模型,以及通信 API 等特性。这些为面向服务的架构(SOA),以及开发 Web 2.0 应用提供了支持。

    Java EE 是 Java 主流的平台方向,目前企业中绝大多数电商系统都是使用 Java 编写的。

    3、Java ME

    Java ME 是 Java 微版(Java Platform, Micro Edition)的简称,是一个技术和规范的集合,它为移动设备(消费类产品、嵌入式设备、高级移动设备等)提供了基于 Java 环境的开发与应用平台。

    Java ME 在早期的诺基亚塞班手机系统中有很多应用,而现在随着使用 iOS 和 Android 操作系统的智能手机的兴起,Java ME 渐渐退出了手机端应用开发的历史舞台。

  4. 四、Java 语言的特点

    Java 语言的语法比较简单(相对 C/C++ 而言),对于初学者来说是一门极容易入门的语言。Java 语言在设计上有着绝对的优势,开发人员可以尽快从语言本身的复杂性中解脱出来,将更多的精力投入软件自身的业务功能中。

    Java 语言最重要的一点是符合工程学的需求,由于现代软件都是协同开发,因此具有代码可维护性、编译时检查、较为高效的运行效率、跨平台能力、丰富而强大的开发、测试、项目管理工具配合等特性都使 Java 成了企业应用软件开发的首选,也得到很多互联网公司的青睐。Java 语言的成功更取决于它本身的语言特点。下面将会对 Java 语言的特点进行详细的介绍。

    1、平台无关性

    Java 语言的一个显著特点就是平台无关性。

    首先了解下什么是平台。例如,个人计算机用的 Windows 系统、手机用的 Android 系统、大型网站用的 Linux 系统,这些系统都可以理解为平台。

    平台无关性代表的就是同一个 Java 程序可以在不同的平台上运行,即一次编写就可以处处运行(Write Once,Run Anywhere)。这是因为 Java 程序不是直接运行在操作系统上的,而是运行在 Java 虚拟机中的。

    2、面向对象性

    Java 语言是一门面向对象的语言,关注的是具有功能的对象。

    面向对象的世界观认为世界是由各种各样具有自己的运动规律和内部状态的对象组成的,不同对象之间的相互作用和通信构成了完整的现实世界。面向对象的编程就是模拟现实世界,把现实世界中的事物类别和实体对象抽象成 Java 中的类和对象。例如,人有姓名、年龄、性别等属性,也有跑步、骑自行车、吃饭等行为。如果要编写一个关于人的系统,可以把人的属性和行为看作一个整体并封装为一个 Java 类,而具体的某个人对应 Java 类的一个实例对象,这就是面向对象开发的概念。

    相较于面向过程,面向对象更易维护、复用、扩展,可以设计出低耦合的系统,使系统更加灵活。

    3、支持分布式

    Java 语言支持基于网络的多主机协作。

    Java 语言的创始人团队很敏锐地嗅到了时代的发展趋势之一就是网络化,迅速将 Java 语言改造成网络编程语言,才让 Java 语言大放异彩。Java 语言支持 Internet 应用的开发,java.net 包提供了相应的类库用于网络应用编程。Java 语言的远程方法调用(RMI)机制也是开发分布式应用的重要手段。

    4、支持多线程

    现在的程序都要求能实现多线程,一方面是为了能更好地利用 CPU 资源,另一方面是程序应该体现“多角色”,如“生产者消费者模型”。JVM 被设计成采用轻量级进程(Light Weight Process, LWP)实现与操作系统的内核线程形成相互对应的映射关系。使用 JVM 就可以实现 Java 内部的多线程,并提供了相应的语法来进行编码。其实调用 Java 的多线程就是调用内核线程来执行的,所以说 Java 天生是支持多线程的语言。

    java.lang 包提供了 Thread 线程类来支持多线程编程,Java 的线程支持包括一组同步原语。这组同步原语是基于监督程序和条件变量风范,由 C.A.R.Hoare 开发并广泛使用的同步化方案,如 synchronized、volatile 等关键字的使用。从 JDK 1.5 开始又增加了 java.util.concurrent 包,该包提供了大量高级工具,可以帮助开发人员编写高效、易维护、结构清晰的 Java 多线程程序。

    Java 开发团队正在设计新型轻量级用户线程——fibers,其轻量化程度高于内核提供的线程,从而可以更高效地使用 CPU 等系统资源。

    5、健壮性

    Java 语言原来是用于编写消费类家用电子产品软件的语言,所以它被设计成可以编写高可靠和稳健的程序。Java 会检查程序在编译、运行时的错误,并消除错误。Java 被设计为强类型语言,类型检查能帮助用户检查出许多在开发早期出现的错误。Java 要求以显式的方法声明,它不支持 C 语言风格的隐式声明。这些严格的要求可以保证编译程序能捕捉调用错误。

    异常处理是 Java 可以使得程序更稳健的一个重要途径。异常是某种类似于错误的异常条件出现的信号。使用 try/catch 语句,程序员可以处理代码中错误的逻辑,这就减少了错误处理和代码恢复的工作量。

    6、安全性

    Java 通常被用在网络环境中,为此 Java 提供了一个安全机制以防恶意代码的攻击,类加载器的双亲委托工作模式、加载过程中对字节码的校验、分配不同的命名空间以防替代本地的同名类等设计都保证了 Java 程序的安全性。

    Java 的存储分配模型也是它防御恶意代码的主要方法之一。学过 C 语言的开发人员对内存的管理都很头痛。Java 语言删除了类似 C 语言中的指针和内存释放等语法,由 JVM 自动分配内存,并且提供了强大的垃圾回收机制,人们在使用 Java 语言时不需要过多考虑内存情况,可以把精力更多专注在业务开发上。

  5. 五、Java 语言的核心机制:JVM

    JVM(Java Virtual Machine ,Java 虚拟机):是一个虚拟的计算机,是 Java 程序的运行环境。JVM 具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。

    Java 运行时分层示意图

    功能 1:实现 Java 程序的跨平台性

    编写的 Java 代码,都运行在 JVM 之上。正是因为有了 JVM,才使得 Java 程序具备了跨平台性。

    JVM 的跨平台性

    使用 JVM 前后对比:

    使用 JVM 前后对比图

    功能 2:自动内存管理(内存分配、内存回收)

    • Java 程序在运行过程中,涉及到运算的 数据的分配存储 等都由 JVM 来完成

    • Java 消除了程序员回收无用内存空间的职责。提供了一种系统级线程跟踪存储空间的分配情况,在内存空间达到相应阈值时,检查并释放可被释放的存储器空间。

    • GC 的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上 减少了 因为没有释放空间而导致的 内存泄漏

    面试题:

    Java 程序还会出现内存溢出和内存泄漏问题吗? Yes!

  6. 六、Java 语言的开发环境和运行环境

    在了解了 Java 跨平台的原理之后,那我们该怎么搭建 Java 的开发环境和运行环境呢?为了能够快速开发 Java 程序,Java 除了提供 JVM,还提供了 JDK 和 JRE。JDK 包含 JRE,JRE 包含 JVM。

    Java SE 平台分层框架总览

    JDK、JRE、JVM 关系图

    1、JDK(Java Development Kits):Java 开发工具包

    JDK 是 Sun 公司提供的一套用于开发 Java 应用程序的开发工具包,JDK 提供给 Java 开发人员使用,其中包括 Java 的开发工具,也包括 JRE。所以,安装了 JDK,就不用再单独安装 JRE 了。JDK 的开发工具包括编译工具(javac.exe)、打包工具(jar.exe)等。

    2、JRE(Java Runtime Environment):Java 运行环境

    JRE 包括 JVM 和 Java 程序所需的核心类库等,如果想要运行一个开发好的 Java 程序,那么计算机中只需要安装 JRE 即可。

    3、JVM(Java Virtual Machine):Java 虚拟机

    JVM 即 Java 虚拟机,负责解释执行字节码指令集。

  7. 七、JDK 的下载、安装与配置环境变量

    1、下载网址

    Oracle 公司官网:www.oracle.com

    2、JDK 的安装

    安装路径不要有中文或者空格等特殊符号。

    3、配置环境变量

    (1)理解 Path 环境变量

    • 什么是 path 环境变量? 操作系统执行命令时,所要搜寻的路径。
    • 为什么配置 path? 开发 Java 程序,需要使用 JDK 提供的开发工具(比如 javac.exe、java.exe 等命令),而这些工具在 JDK 的安装目录的 bin 目录下,如果不配置环境变量,那么这些命令只可以在该目录下执行。在实际开发中,不能仅限于在 JDK 的 bin 目录下使用 javac 等开发工具,将 JDK 的 bin 目录路径添加到 path 环境变量中,就可以在任意目录下都可以使用 javac 等开发工具。

    (2)理解 JAVA_HOME 变量

    • 什么是 JAVA_HOME? 顾名思义,即 JDK 的根目录路径,不是 bin 目录。
    • 为什么配置 JAVA_HOME? 希望其他软件能够共用 JDK 目录中的开发工具、JRE 运行环境、源代码等。
    • 如何配置 JAVA_HOME? 在环境变量的系统变量下新建一个变量,将其命名为 JAVA_HOME,它的值为 JDK 根目录路径

    (3)Path+JAVA_HOME

    既然 JAVA_HOME 代表 JDK 根目录,那么 JAVA_HOME+\bin 就是 JDK 的 Path 环境变量,具体值为:%JAVA_HOME%\bin

    JAVA_HOME 前后的 % 表示使用 JAVA_HOME 变量中储存的路径,而不是使用 JAVA_HOME 这个单词。

    (4)JDK8 配置环境变量示例

    配置环境变量示例图

    步骤
    1. 打开桌面上的计算机,进入后在左侧找到 计算机​,单击鼠标 右键​,选择 属性

    2. 选择 高级系统设置

    3. 高级​ 选项卡,单击 环境变量

    4. 系统变量 中,单击 新建 ,创建新的环境变量

    5. 变量名输入 JAVA_HOME,变量值输入 D:\develop_tools\jdk\jdk1.8.0_271 ,单击 确定

    6. 选中 Path​ 环境变量,双击​ 或者 点击编辑

    7. 在变量值的最前面,键入 %JAVA_HOME%\bin​ 注意:强烈建议将 %JAVA\_HOME%\bin​ 声明在 path 环境变量中所有变量的最前面!

    8. 环境变量配置完成,重启 DOS 命令行,在任意目录下输入 javac​ 或 java​ 命令或 java -version​,运行成功

    注意:

    有的书籍、论坛、视频上还提到配置 classpath,用于指名 class 文件识别的路径。其实是没必要的,反而建议大家如果配置了 classpath 环境变量,要删除。对于初学者反而不友好。

    (5)JDK17 配置环境变量:自动配置

    在安装完 JDK17 之后,理应按 JDK8 的方式配置 path 环境变量。但是, JDK17 在安装之后,会自动进行环境变量的配置。​​

    建议:

    将 JDK17 安装的路径,设置为 JAVA_HOME,将 %JAVA_HOME%\bin 上移到首位。 配置 JDK17 环境变量 配置 JDK17 环境变量

  8. 八、Java 程序开发步骤

    JDK 安装完毕,我们就可以开发第一个 Java 程序了,习惯性的称为:HelloWorld。

    Java 程序开发三步骤:编写编译运行

    • 将 Java 代码编写到扩展名为 .java 的源文件中
    • 通过 javac 命令对该 java 文件进行编译,生成一个或多个字节码文件
    • 通过 java 命令对生成的 class 文件进行运行

    Java 程序开发步骤

    1、编写

    1. 先新建一个文本文件,文件名为 HelloWorld,后缀名为 .java

    2. 用记事本或 editplus 等文本编辑器打开(虽然记事本也可以,但是没有关键字颜色标识,不利于初学者学习)

    3. 在文件中输入如下代码,并且保存:

      public class HelloWorld { 
       public static void main(String[] args) { 
        System.out.println("HelloWorld!"); 
        } 
      }
      

    【注意】

    • 每个字母和符号必须与示例代码一模一样,包括大小写在内。
    • 不要隐藏文件扩展名

    第一个 HelloWord 源程序就编写完成了,但是这个文件是程序员编写的,JVM 是看不懂的,也就不能运行,因此我们必须将编写好的 Java源文件 编译成 JVM 可以看懂的 字节码文件 ,也就是 .class 文件。

    2、编译

    在 HelloWorld.java 目录的地址栏中输入“cmd”命令,打开命令行窗口,在 DOS 命令行中,进入 D:\JavaSE\chapter01 目录,使用 javac 命令进行编译。

    使用文件资源管理器打开 D:\JavaSE\chapter01 目录,然后在地址栏输入 cmd。

    地址栏输入 cmd

    命令:javac 源文件名.java

    举例:javac HelloWorld.java

    编译举例

    编译成功后,命令行没有任何提示。打开 D:\JavaSE\chapter01 目录,发现产生了一个新的文件 HelloChina.class,该文件就是编译后的文件,是 Java 的可运行文件,称为字节码文件,有了字节码文件,就可以运行程序了。

    3、运行

    在 DOS 命令行中,在字节码文件目录下,使用 java 命令进行运行。

    命令:java 主类名字

    举例:java HelloWorld

  9. 九、HelloWorld 小结

    1、Java 程序的结构与格式

    结构: 类{ 方法{ 语句; } }

    格式:

    • 每一级缩进一个 Tab 键

    • {}的左半部分在行尾,右半部分单独一行,与和它成对的 { 的行首对齐

    • 必要的空格:变量类型、变量、赋值符号、变量值之间填充相应空格,更美观。比如: int num = 10;

    • 大小写:Java 语言严格区分大小写

    • 标点符号使用问题

      • 不能用中文符号,要英文半角的标点符号
      • 括号要成对出现

    2、HelloWorld 程序代码剖析

    HelloWorld 剖析

    ①:代表一个类 ②:代表一个方法 ③:代表一个 Java 语句

    3、两种常见的输出语句

    • 换行输出语句:输出内容,完毕后进行换行,格式如下:

      System.out.println(输出内容);
      
    • 直接输出语句:输出内容,完毕后不做任何处理,格式如下:

      System.out.print(输出内容);
      

    注意:

    换行输出语句,括号内可以什么都不写,只做换行处理 直接输出语句,括号内什么都不写的话,编译报错

    4、源文件名与类名

    • 源文件名是否必须与类名一致?public 呢?

      • 如果这个类不是 public,那么源文件名可以和类名不一致。但是不便于代码维护。
      • 如果这个类是 public,那么要求源文件名必须与类名一致。否则编译报错。
      • 建议:不管是否是 public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。
    • 一个源文件中是否可以有多个类?public 呢?

      • 一个源文件中可以有多个类,编译后会生成多个.class 字节码文件。
      • 一个源文件只能有一个 public 的类。