Java语言概述、环境搭建及新增功能介绍

1、概述

Java语言是一门非常纯粹的面向对象编程语言,它吸收了C++语言的各种优点,又摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
计算机高级语言按程序的执行方式可以分为编译型和解释型两种。

  • 编译型语言是指使用专门的编译器,针对特定平台(操作系统)将某种高级语言的源代码一次性“翻译”成可被该平台硬件执行的机器码(包括机器指令和操作数)并包装成该平台所能识别的可执行性程序的格式,这个转换过程称为编译(Compile)。
  • 解释型语言是指使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行的语言。解释型语言相当于把编译型语言中的编译和解释过程混合到一起同时完成。
分类 优点 缺点 该类型语言列举
编译型语言 由于是将源代码一次性编译成对应平台的机器码,因此执行效率较高,并且可以脱离开发环境,在特定平台上独立运行 若要移植,则需要针对特定平台进行修改或重新编译 像C、C++、Objective-C、Swift、Kotlin等高级语言都属于编译型语言
解释型语言 跨平台比较容易,只需提供特定平台的解释器即可 每次执行都需要进行一次编译,因此运行效率较低,并且不能脱离解释器独立运行 像JavaScript、Ruby、Python等语言属于解释型语言

Java语言是一种特殊的高级语言,它既具有解释型语言的特征,也具有编译型语言的特征,因为Java程序要经过先编译后解释两个步骤。至于半编译型语言(像Visual Basic)这里不再赘述。
由于Java是一种纯粹的面向对象的程序设计语言,因此Java程序必须以类(class)的形式存在,类是Java程序的最小程序单位。Java程序不允许可执行性语句、方法等成分独立存在,所有的程序部分都必须放在类定义里。

2、Java程序的运行机制与JVM

Java语言经过编译,并不会生成特定平台的机器码,而是生成一种与平台无关的字节码(即*.class文件,此时并不能执行),然后再通过Java解释器来解释执行。正如上所说,Java既是编译型语言,也是解释型语言。
Java语言里负责解释执行字节码文件的是Java虚拟机,即JVM(Java Virtual Machine)。JVM是一个抽象的计算机,具有指令集并使用不同的存储区域,它不仅负责执行指令,还要管理数据、内存和寄存器。
可以认为JVM分为向上和向下两个部分,所有平台上的JVM向上提供给Java字节码程序接口完全相同,但向下适应不同平台的接口则互不相同。
总结:Oracle公司负责制定Java虚拟机规范,在技术上规定了JVM的统一标准,最终实现了Java程序的平台无关性。

3、发展历程简述

  • 1995年,Sun公司发布了Java语言。
  • 为了开发复杂的应用程序,于是开发了一个开发类库,Sun于1996年年初发布了JDK1.0,JDK1.0包括两部分:运行环境和开发环境。
    • 运行环境(JRE):包括核心API、集成API、用户界面API、发布技术、Java虚拟机(JVM)5个部分;
    • 开发环境(JDK):包括编译Java程序的编译器(即javac命令)。
  • 1997年2月18日,Sun公司发布了JDK1.1,JDK1.1增加了JIT(即时编译)编译器。
  • 1998年12月,Sun发布了历史上最重要的JDK版本:JDK1.2,随之而来的还有JSP/Servelet、EJB等规范,并将Java分为J2EE、J2SE和J2ME三个版本。
  • 2002年2月,Sun发布了历史上最为成熟的版本:JDK1.4,并且于此期间涌现出了大量基于Java语言的开源框架:Struts、WebWork、Hibernate、Spring等,并且大量的企业应用服务器也开始涌现。
  • 2004年10月,Sun发布了JDK1.5,并将JDK1.5改名为Java SE 5.0,J2SE和J2ME也相应地改为Java EE和Java ME。并且JDK1.5增加了泛型、增强型for语句、可变数量的形参、注释(Annotations)、自动拆箱和装箱等功能。同时,还推出了EJB3.0规范及自己的MVC框架。
  • 2006年12月Sun公司发布了JDK1.6(也成为Java SE 6)。
  • 2007年11月,Google推出了一款基于Linux平台的开源手机操作系统:Android。Android平台使用了Dalvik虚拟机来运行.dex文件,Dalvik虚拟机的作用类似于JVM虚拟机(但其并未遵守JVM规范),并且Android使用Java语言来开发应用程序。
  • 2009年4月20日,Sun公司被Oracle收购,并获得其两项软件资产:Java和Solaris。
  • 2011年7月28日,Oracle公司发布了Java SE 7,该版本引入了二进制整数、支持字符串的switch语句、菱形语法、多异常捕捉、自动关闭资源的try语句等新特性。
  • 2014年3月18日,Oracle发布了Java SE 8,新增了全新的Lambda表达式、流式编程等大量新特性。
  • 2017年9月22日,Oracle发布了Java SE 9,这次版本升级强化了Java的模块化系统,让庞大的Java语言更轻量化,而且采用了更高效、更智能的G1垃圾回收器,并在核心类库上进行了大量更新,可以进一步简化编程。

4、JDK的下载、安装及环境搭建

由于Oracle为Java SE和Java EE分别提供了JDK(Java SE Development Kit)和Java EE SDK(Software Development Kit)两个开发包,学习初期,我们要学习Java SE的相关知识,则下载标准的JDK即可,若想继续学习Java EE相关内容,则需要下载安装Java EE SDK,并且安装Java EE SDK就包含JDK了。
JDK包含JRE,JRE包含JVM。

下载地址(中文界面):https://www.oracle.com/technetwork/cn/java/javase/downloads/index-jsp-138363-zhs.html

说明:本来想下载一个Java SE 9,登录官网后发现没有了,只有最新的10版本,并且从9版本开始,Windows版本只提供64位可供下载(下面仅说明一下安装要点)。

  • 要点1:仅安装开发工具和源代码即可,可以不安装公共JRE;
    • 解释:公共的JRE是一个独立的JRE系统,会单独安装在系统其它路径下,公共的JRE会向IE等浏览器和系统中注册Java运行时环境。通过这种方式,系统中任何应用程序都可以使用公共的JRE。由于现在在网页上执行Applet的机会越来越少,而且完全可以选择使用JDK目录下的JRE来运行Java程序,因此没有太大必要安装公共JRE。
  • 要点2:最好设置自定义的安装路径(默认路径为C:\Program Files\Java\jdk-10.0.2\,由于Program Files存在空格(当然最好也不要存在汉字),可能会导致一些未知的问题,因此建议直接安装在根路径下)。
    在这里插入图片描述
  • 要点3:在系统变量中,直接Path变量后追加C:\Java\jdk-10.0.2\bin即可,这里还设置了JAVA_HOME环境变量(设置Path变量时,%JAVA_HOME%代表JDK安装目录),可以如下图进行设置。
    在这里插入图片描述
  • 要点4:如果使用1.4以前版本的JDK,常常需要设置CLASSPATH,但是1.5以上版本完全不用设置CLASSPATH。
    • 解释:由于在使用1.4版本以前的JDK执行Java程序时需要CLASSPATH来告诉JRE要到当前路径下(.代表当前目录,还有lib目录中的dt.jartools.jar也需要添加)搜索Java类。

5、JDK目录结构及重大更新

目录结构如下图所示:
在这里插入图片描述

5.1、重大更新-模块化系统

模块化系统是JDK 9的重大更新。很多时候,一个基于Java的软件并不会用到Java的全部功能,因此该软件不需要加载全部的Java功能,而模块化系统则允许发布Java软件系统时根据需要只加载必要的模块。为此,JDK专门引入一种新的JMOD格式,它近似于JAR格式,但JMOD格式更强大,它可以包含本地代码和配置文件。比如用WinRAR打开java.base.jmod文件,将会看到如下所示的文件结构(最下面的截图)。
在这里插入图片描述
java.base.jmod是JDK的最基础模块,该模块包含了Java的lang、util、math等模块,这些都是Java最核心的功能,是其他所有模块的基础。

5.2、在命令行窗口编译和运行Java程序

  • 编译Java程序命令:javac -d destdir srcFile,其中-d destdir用以指定编译生成的字节码文件的存放路径,而srcFile是Java源文件所在位置(这个位置可以为绝对路径,也可以是相对路径)。
    • 例如:javac -d . HelloWorld.java.代表当前路径,若省略-d选项,则生成的字节码文件将会默认放在当前路径下。
  • 运行Java程序命令:java Java类名

5.3、JDK 9新增的jshell工具

JDK 9工具的一大改进就是提供了jshell工具,它是一个REPL(Real-Eval-Print Loop)工具,该工具是一个交互式的命令行界面,可用于执行Java语言的变量声明、语句和表达式,而且可以立即看到执行结果。因此可以使用该工具来快速学习Java或测试Java的新API。
启动jshell非常简单,只要在命令行窗口输入jshell命令,即可进入jshell交互模式(注:jshell位于JDK安装目录的bin路径下,因此从命令行窗口进入该模式的前提是已配置好Path环境变量)。
首先输入jshell进入jshell交互模式,然后分别输入/help intro/help,查看介绍与帮助。
在这里插入图片描述
下面简单做个演示,哈哈,以后就可以在命令行窗口进行新特性或新API的测试啦O(∩_∩)O
在这里插入图片描述

5.4、Java 9的G1垃圾回收器

传统的C/C++等编程语言,需要程序员负责回收已经分配的内存,若分配出去的内存得不到及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪,这种现象被称为内存泄漏。
Java程序的内存分配和回收都是由JRE在后台自动进行的,JRE会负责回收那些不再使用的内存,这种机制被称为垃圾回收(Garbage Collection,GC)。
通常JRE会提供一个后台线程来进行检测和控制,一般都是在CPU空闲或内存不足时自动进行垃圾回收,而程序员无法精确控制垃圾回收的时间和顺序等(即便是调用Runtime对象的gc()System.gc()等方法,也不能精确地控制垃圾回收的执行)。
2011年7月发布的Java 7提供了G1回收器代替原有的并行标记/清除垃圾回收器(简称CMS)。并在Java 8中删除了HotSpot JVM中的永生代内存(PermGen)。
2017年9月发布的Java 9彻底删除了传统的CMS垃圾回收器,而默认采用低暂停(low-pause)的G1垃圾回收器,并为G1垃圾回收器自动确定了几个重要的参数设置,从而保证G1垃圾回收器的可用性、确定性和性能。

以上内容参考《疯狂Java讲义第四版》所做的总结

猜你喜欢

转载自blog.csdn.net/chaixingsi/article/details/82821592