本文主要介绍Java语言的JDK开发工具的配置与使用,同时了解相关的知识点。
声明:本系列博文为"爱校码.中国"原创博文,版权所有,未经授权,不得转载或抄袭,若发现将依法追责。
Java命令行工具是学习Java语言的前置条件,利用命令行工具,学习者可以利用任何文本编辑器编写Java程序的源代码,之后,使用命令行工具对之编译和运行。但首先要从www.oracle.com网站获取该命令行工具,安装到本地计算机上,正确的配置环境变量。
在介绍Java程序开发语言之前,由必要了解一下Java 的历史。Java在20世纪90年代诞生于Sun MicroSystem公司的一个控制电子设备的软件项目,负责该项目的是Sun MicroSystem的首席程序员James Gosling。在项目的开始,Gosling采用面向对象的编程语言C++进行开发,但在进行中发现很多问题都出自于C++的复杂性,尤其是指针错误和内存泄漏之类的程序错误,因此,Gosling决定创建一个能够克服C++程序语言缺陷的编程语言在该项目中代替之。Gosling沿用了C++的基本语法和面向对象的特点,剔除了基于指针的编程内容,命名这种新的编程语言为Oak。 后来,由于互联网的飞速发展,当时在浏览器中看到的页面都是静态的,Sun公司利用Oak可以创建动态页面,并对Oak进行了较大的改造,将其命名为Java,伴随互联网获得了大量的应用和发展,目前的主流浏览器都支持Java的运行。2009年4月20日Oracle公司以现金收购Sun MicroSystem公司,从此,Java由Oracle公司维护与继续开发。Java语言经历了一系列的版本变化:
Java语言是真正的基于面向对象的编程思想,虽然大部分语法与C++相似,但舍弃掉了其中面向过程的成分和指针的概念 。学习Java语言,首先从Java的开发工具和运行环境开始,分别为Java开发工具JDK(Java Development Kit
)和Java运行环境JRE(Java RunTime Envirment
)。
Java现在不仅是编程语言,还是一个开发平台,Java技术给程序员提供了许多工具:编译器、解释器、文档生成器和文件打包工具等等。同时Java还是一个程序发布平台,有两种主要的“发布环境”。首先Java运行时环境JRE包含了完整的类文件包;其次主流浏览器都提供了Java解释器和运行时环境。Java平台划分成Java SE
、Java EE
、Java ME Embedded
三个平台,针对不同的项目。
Java SE(Java Standard Edition),即Java标准版,允许在桌面和服务器上开发和部署Java应用程序。Java SE和组件技术提供了当今应用程序所需的丰富用户界面、性能、多功能性、可移植性和安全性。
Java EE(Java Enterprise Edition),即Java企业版,为开发和运行大型、多层、可靠和安全的企业应用程序提供了一个API和运行时环境,这些应用程序是可移植和可扩展的,并且易于与遗留应用程序和数据集成。
Java ME Embedded(Java Micro Edition Embedded),即嵌入式Java微型版,专为资源受限设备设计,如M2M(Mobile to Machine)无线模块、工业控制、智能电网基础设施、环境传感器和跟踪等。在这里提请注意:自从google公司推出了手机操作系统Android,它是基于Linux的开源手机平台,运行时由核心库和Dalvik虚拟机组成,其核心库为程序开发者提供了特有的函数功能和Java语言基本函数功能。因此,Android平台的应用使用Java语言进行开发, 编译为扩展名apk的Dalvik可执行格式(.dex),适合内存和处理器速度受限的系统。Android系统的应用程序开发,其应用程序框架提供了Android平台基本管理功能和组件重用机制,由 Android SDK实现,开发人员只要继承和扩展就能完成相应的手机功能应用。在嵌入式电子产品领域,Android的Java开发,有逐渐取代Java ME Embedded的趋势。
基于Android的程序开发,只是源程序语法上遵循Java语言的规范,其编译和运行则完全不同,当然,学习了Java语言程序设计,开发Android应用程序没有问题。
Java语言是一种与操作系统平台无关的编程语言,这是因为Java的运行环境JRE提供了一种称为Java虚拟机(Java Virtual Machine)的应用程序,简称JVM。Java程序是实际运行在JVM上,而JVM可以有各种操作系统的版本,例如有Windows版、Solaris版、macOS版及Linux版等操作系统的JVM,这样,Java程序只与JVM交互,而JVM屏蔽掉所有安装其上的操作系统的不同。Java程序面向JVM的统一接口,只需要编写一次代码,就可以在任意操作系统的JVM上运行。
JVM
是在真实的机器中用软件模拟实现的一种虚拟机器。Java源程序经过编译器编译为扩展名为.class的文件,JVM
运行的代码存储在其中,每个文件包含最多一个public类的代码。
Java程序是如何在JVM
上运行的呢?首先,Java程序通过JDK提供的编译程序将其编译为紧凑的字节代码(bytecode,class文件),然后通过JDK提供的运行程序将编译后的字节代码调入JVM
,由JVM
读取这些字节代码并解释运行。由于解释运行比较缓慢,Java 2 引入了Just In Time
编译器,简称JIT
编译器,JIT
内置于JVM
中。这样,Java程序编译后的字节代码,不同的部分执行运行时检查,JIT
编译器按部分读取字节代码,并将其编译成本地操作系统所在的机器语言,Java程序以更快的速度运行。
JVM
规范的定义为:一套指令系统(相当于CPU)、一组寄存器、类文件格式、运行时堆栈、垃圾回收堆、一个内存区、致命错误报告机制和高精度计时支持。
JVM
的代码格式由简洁、高效的字节码构成。由JVM
字节码表示的程序必须保持正确的类型约定。大部分类型检查在编译时完成。所有符合Java技术的解释器必须能够运行任何含有.class文件的程序,这些类文件符合Java虚拟机规范中指定的类文件格式。
高级语言设计时都允许程序在运行时动态分配内存。不过分配内存的过程因语言而异,涉及返回一个指向内存块起始地址的指针。若不再需要已经分配的内存块,程序或运行时环境应该释放该内存块。
在C语言、C++语言或其他高级语言的设计中,程序员负责创建和释放内存。但有时是一件很麻烦的事情,因为并不总是事先知道应在何时释放内存。当系统中没有剩余内存可供分配时,运行的程序因为没有释放内存而崩溃,该程序被称为具有内存泄漏。
Java语言的设计将程序员从释放内存的责任中解放出来。Java的运行时提供了一个系统级的线程负责跟踪每个内存块的分配。而在JVM的空闲周期中,垃圾回收(Garbage Collection,简称GC)线程检查并释放不被引用的对象占用的内存块。垃圾回收在Java程序运行的生命周期中自动进行,从而避免了内存泄漏。
以上这张图是New Relic公司发布的《2022 年Java生态系统状况报告》中的数据统计,LTS
是前面介绍的Java版本变化时的长期支持的版本,主要用于生产环境中,其中的Java 8 LTS与Java 11 LTS的使用比例最高,而后者超过了前者。与生产中的LTS版本相比,临时的、非LTS的Java版本使用率仍然非常低,只有2.7%的应用程序使用非LTS的Java版本。
Java 11 为什么有这么高的使用比例,原因是Java 8之后,垃圾收集器的使用发生了明显变化。考虑到Java 11及更高版本的G1收集器(G1:Garbage-First,是一款面向服务器的垃圾收集器,主要针对配备多核处理器及大容量内存的机器,以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征)有更新的默认值和更高的性能,出于对G1的喜爱,很多开发者选择放弃Java 8,而选择Java 11是可以预料的。
Java 应用程序环境的执行如下图所示:
编译意味着将Java源文件从编写他们所用的文本格式转换为一组字节码,这些字节码存储在.class文件中。组成Java程序的字节码在运行时被加载和检查,然后在一个解释器中运行。解释器具有两个功能:执行字节码与正确的调用底层硬件。
在有些Java的运行时环境中,一部分校验过的字节码被编译成本机操作系统代码并直接在硬件平台上执行,以使Java代码的运行速度接近C语言或C++语言的编译代码,如图所示:
在Java中,通过增加新的支持性能的技术以增强JVM,其中的一种技术被称做Java HotSpot虚拟机,它具备使Java语言程序和C语言、C++语言在编译后的代码运行的一样快!
JVM的任务主要有三个:加载代码、校验代码和执行代码。
加载代码由类加载器执行完成,类加载器加载Java程序所需的全部类。类加载器将本地文件系统的类命名空间与从网络源导入的类命名空间分隔开来,用于增强安全性。其总是优先加载本地类,所以能够防止任何“木马”程序。当全部类被加载后,可执行文件的内存结构因而可以确定,此时的“引用”被赋值为具体的内存地址,并且创建了查询表格。由于内存结构在运行时创建,Java解释器增加了保护,以防止对没有授权的受限代码区的访问。
Java代码在执行之前要经过测试,JVM将代码输入到一个字节码校验器,用于测试代码段格式并检查非法代码段,判断它们是否伪造指针,是否违反对象访问权限或是否试图改变对象类型。所有通过网络导入的类文件必须经过字节码校验器。字节码校验器对Java代码进行四次校验,确保代码符合JVM规范,并且没有违反系统完整性。如果完成四次校验未返回错误信息,则可以确保Java代码满足以下要求:类符合JVM规范的类文件格式;没有访问权限违例;代码未引起操作数堆栈上溢或下溢;所有操作代码的参数类型是正确的;无非法数据转换发生。
JDK 是整个Java平台的核心,包括了Java 运行时环境、Java 编译器和 Java基础的类库(Java API),以及相关的Java工具包。这些Java命令都是一组命令行工具,不论其他什么Java开发环境以及Java应用服务器的实质都是内置了某个版本的JDK。因此掌握 JDK是学好Java的第一步。无论是编程新手还是有经验的程序员,都很容易入门。
最主流的JDK是Oracle公司(Sun公司已被Oracle公司收购)发布的JDK,除了此之外,还有很多公司和组织都开发了自己的JDK,像IBM公司开发的JDK、BEA公司的Jrocket、、GNU组织开发的JDK以及Oracle发布的开源版本OpenJDK(以GPL V2协议的形式放出)等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Oracle JDK(Sun JDK)包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Oracle JDK(Sun JDK)好很多。虽然Oracle JDK(Sun JDK)也是开放源代码的,但它是以JRL协议放出, 它与OpenJDK在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。不管怎样,还是需要先把Oracle JDK(Sun JDK)学习掌握好。
在JDK中,有两个命令行命令经常使用,它们分别为javac
和java
。如图所示:
首先访问网站http://www.oracle.com,访问到Oracle公司的网站首页,在其上选择[Products]链接标题,链接到Oracle Products的页面,由于Oracle公司的产品比较多,定位到Hardware and Software标题栏,在标题栏内选择[Java]链接标题,链接到Java 的页面,在此页面上显示的是JDK的发布的最新版本。如果在该页面中选择[Java SE]链接标题,可以找到[Download Java now]按钮,点击进入Java Downloads页面,可以看到各种平台(操作系统)最新版本以及LTS版本,本文只说明Java 11 LTS的下载。在页面中选择Java 11以及Windows,可以看到jdk-11.0.18_windows-x64_bin.exe
安装版和jdk-11.0.18_windows-x64_bin.zip
压缩版文件链接,点击下载即可。如图所示。
需要提示的是,当第一次访问Oracle网站时,下载JDK需要注册为Oracle的会员账号,在下载JDK文件时需要登录校验该账号,通过后才允许下载JDK文件。以后下载可以免校验。
在Windows系统上执行已经下载的JDK文件jdk-11.0.18_windows-x64_bin,弹出JDK安装向导界面对话框,如图所示:
点击[下一步]按钮,弹出JDK自定义定制安装对话框,如图所示,点击[更改]按钮,可以变更JDK的安装路径。
点击[下一步]按钮,弹出JDK安装过程进度对话框,如图所示,直到复制文件和注册完成,
然后弹出如图所示已安装成功界面。点击[关闭]按钮,结束安装。
默认安装目录为C:\Program Files\Java\jdk-11,其目录结构如图所示:
为了能够在命令行终端界面(Console User Interface,简称CUI
)正确使用JDK提供的命令行工具包和API
(Application Programming Interface,应用程序编程接口)系统类库,需要配置Windows操作系统下的三个环境变量,它们分别为 JAVA_HOME
、CLASSPATH
和PATH
。以下说明配置步骤:
⑴
选择“Windows系统 → 控制面板 → 系统和安全 → 系统 → 高级系统设置 → 高级 → 环境变量 → 系统变量”,出现如图所示的对话框;⑵
在上图所示的系统变量栏点击[新建]按钮,在弹出的如图所示对话框中分别填写JAVA_HOME
与C:\Program Files\Java\jdk-11
,点击 [确定]按钮完成环境变量JAVA_HOME的设置操作;⑶
以同样的方式在系统变量栏点击[新建]按钮,在弹出的如图所示对话框中分别填写CLASSPATH
与.;%JAVA_HOME%\lib;
,点击 [确定]按钮完成环境变量CLASSPATH的设置操作;⑷
在系统变量栏选择Path
环境变量后,点击[编辑]按钮,在弹出的如图所示的对话框中点击[新建]按钮,填写%JAVA_HOME%\bin,通过[上移]按钮,将新建的配置项移动到合适位置,同时清理删除其它的有关Java的配置项,最后点击[确定]按钮完成环境变量Path
的设置操作;⑸
正确设置JAVA_HOME、CLASSPATH和Path三个环境变量后,运行cmd进入命令行CUI界面,然后输入java –version
后显示如图所示的结果,说明可以正常使用JDK和Java运行环境了。Linux最早开始于一位名叫Linus Torvalds的芬兰赫尔辛基大学的学生,他原本是想设计一个代替Minix(是由Linus的老师,名叫Andrew Tannebaum的计算机教授编写的一个类似UNIX操作系统的示教程序)的操作系统,此操作系统可用于386、486或奔腾处理器的PC机上,具有Unix操作系统的全部功能,并且在GNU公共许可权限下免费开源,是一个符合POSIX标准的操作系统,从此开始了Linux雏形的设计。
Linux全部使用C语言编写,以高效性和灵活性著称。它能够在PC机上实现全部的Unix特性,具有多任务、多用户的能力。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的X-Windows图形用户界面,通过使用窗口、图标和菜单对系统进行操作。
Linux之所以受到青睐,主要原因有两个,一是它属于自由软件,用户不用支付任何费用就可以获得它和它的源代码,并且可以根据自己的需要对其进行必要的修改,无偿使用,无约束地继续传播。另一个原因是,它具有Unix的全部功能,任何使用Unix操作系统或想要学习Unix操作系统的人员都可以从Linux中获益。
尽管Linux是由计算机爱好者们共同开发的,但是它在很多方面上是相当稳定的,从而为用户学习和使用目前世界上最流行的Unix操作系统提供了廉价的机会。现在有许多公司(如RedHat、TurboLinux、红旗Linux等)支持Linux操作系统。Linux成为Unix系统在个人计算机上的一个代用品,并能用于替代那些较为昂贵的服务器系统。Linux在后台服务器端和前台客户端都有相应的典型系统,例如,Red Hat Enterprise Linux、Centos等可用于构建服务器系统,红旗 Linux、Ubuntu等可用于构建PC系统。
Linux一般由内核、Shell、文件结构和实用工具四个主要部分构成,有时根据需要在Linux内核的基础上可以进行裁剪,定制特定的Linux应用系统。
⑴ Linux内核
内核是系统的心脏,是运行程序和管理计算机硬件设备的核心程序,执行用户的命令。
⑵ Linux Shell
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
⑶ Linux文件结构
文件结构是文件存放在硬盘存储设备上的组织方法,主要体现在对文件和目录的组织上。目录提供了管理文件的有效途径,能够从一个目录切换到另一个目录,而且可以设置目录和文件的权限。Linux目录采用多级树形结构,如图所示。
⑷ Linux实用工具
标准的Linux系统都有一套实用工具的程序,它们是专门的程序,执行标准的计算操作等。用户也可以生成自己的工具。实用工具可分三类:
内核、Shell和文件结构一起构成了基本的操作系统结构。它们使得用户可以运行程序,管理文件以及使用系统。另外,实用工具辅助用户完成一些特定的任务。
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,相当于给系统或用户应用程序设置的一些参数,例如path, 告知系统, 当系统运行一个程序而没有告诉它程序所在的完整路径时, 系统除了在当前目录下面寻找此程序外, 还应到path指定的目录下去寻找。
Linux下的环境变量,是由shell依赖于多个文件的设置。当shell被调用时,它从两个初始文件读取命令。/etc/profile包含了系统变量,它由系统管理员维护,由系统管理员设置本地系统变量和特殊命令。普通用户的启动信息文件($HOME/.bash_profile)由各用户自己维护,该文件可以被修改以实现任何特定的系统初始化。当用户登陆的时候,才读取profile文件。
当系统管理员新建用户时,.bash_profile(.profile)、.bashrc和其他公共的环境文件模板将复制到新建用户主目录($HOME/)下面,可以编辑这些初始化设置。需要注意profile文件和bashrc文件的区别,.bash_profile(.profile)只在系统启动和登录时被读取一次,而.bashrc在系统启动和每次调用shell的时候都要被读取。
首先到Oracle 网站下载Linux版本的JDK,选择jdk-7u45-linux-i586.tar.gz文件下载到本地。本文拓展知识点的Linux版的JDK安装的Linux操作系统是以Ubuntu12.04为例。然后在登录后的Ubuntu12.04桌面打开终端如图所示,将当前路径下的jdk-7u45-linux-i586.tar.gz文件通过tar命令解压,命令如下:
~# tar -zxvf jdk-7u45-linux-i586.tar.gz
解压命令解压后切换到jdk1.7.0_45目录,并且执行ls命令,显示的目录结构如图所示,意味着jdk的安装完成。
接下来需要进行有关jdk的linux环境变量的设置,执行cd ~命令切换到该账户的home目录下,通过vi命令打开.profile文件,命令如下:
vi .profile
编辑.profile文件进行JDK的环境变量设置,完成后的编辑内容如图所示。
最后保存.profile文件,并注销退出,重新登录进入,执行java –version命令,显示如图所示,表明可以正常使用JDK和Java运行环境了。
博文最后更新时间: