Java语言核心技术-Java概述与开发环境搭建

Java语言核心技术

1.1 信息技术发展趋势

目前信息技术主要经历了互联网、移动互联网以及以大数据、云计算、物联网、人工智能、区块链等为代表的新兴技术三个阶段。

  • 互联网
    互联网自从20世纪90年代逐渐兴起,主要是通过网络连接了世界各地的PC,笔记本以及背后提供各种服务的大型服务器集群。
    其中绝大多数PC、笔记本都运行着Windows,macOS操作系统,而服务器主要是以类Unix(CentOS,Ubuntu)占据主要市场。
    依靠互联网成长起来的公司有Apple、Google、Amazon、Microsoft、Baidu、Alibaba、Tencent。

  • 移动互联网
    移动互联网主要从2010开始爆发式增长,主要是通过网络连接了世界各地的移动设备(最典型的就是手机),它们绝大多数都运行着Android,iOS操作系统。
    依靠移动互联网成长起来的公司有字节跳动、蚂蚁金服、小米、美团、滴滴。

  • 大数据、云计算
    随着用户的爆发式增长,以海量数据为基础的大数据、云计算技术在Google、Amazon、Apple、Baidu、Alibaba、Tencent等大型互联网公司有着广泛的商业应用场景。

  • 物联网
    物联网会以手机作为中枢,通过物联网连接所有的智能设备,包括智能家居、汽车、电视等嵌入式设备,目前国内的小米、华为等在智能家居、电视、汽车等领域广泛布局。而随着5G的逐渐普及,万物互联的时代即将到来。

  • 人工智能
    人工智能(AI)作为当前最火爆的技术,国内的Baidu、Tencent、Alibaba等互联网公司逐渐根据自身的核心业务开始布局,Alibaba最早将人工智能技术布局在电商和物流领域,而Baidu开发出了对话式人工智能操作系统Dueros和自动驾驶平台Apollo,Tencent则是在游戏领域应用人工智能。

  • 区块链
    区块链经历了数字货币、智能合约和超级账本三个阶段,区块链技术可以广泛使用在金融、供应链、物流、公共服务等领域,解决互联网的信任问题,目前蚂蚁金服、京东已经有大量的区块链应用落地。

1.2 浅谈计算机系统

1.2.1 计算机系统概述

计算机是一种用于高速计算的电子机器,可以进行数值运算、逻辑判断,还有存储记忆功能,能够接收和存储信息,并按照存储在其内部的程序对海量数据进行自动、高速的处理,然后把处理的结果输出的现代化智能电子设备。
日常生活中常见的台式机、笔记本、手机等等都属于计算机。

计算机系统由硬件(Hardware)系统和软件(Software)系统两大部分组成。
软件是运行在硬件之上,而硬件的好坏会直接影响软件运行的性能。
计算机通过软硬件的共同协作就可以完成日常常见的任务,例如听歌、看电影、购物、聊天等等。

1.2.2 计算机硬件系统

计算机硬件系统主要由主机和外部设备组成。
主机主要是包含中央处理器和内存储器。
中央处理器主要由运算器和控制器组成,实现数据的数值计算、逻辑判断和其他设备控制。
而内存储器分为RAM和ROM,其中RAM(Random Access Memory)表示随机存储内存,程序运行时指令和数据都会被加载到内存中,这种存储器在断电时将会丢失其存储的内容。而ROM(Read-Only Memory)表示只读内存,是一种只能读出事先存储数据的固态半导体存储器。

外部设备主要包含外部存储器、输入设备、输出设备组成。常见的外存储器包含移动硬盘U盘等等。外部存储器通常用于大容量存储数据,IO性能比内存要低的多,但是只要硬件设备不坏的情况下能够永久存储数据,而常见的输入设备包含鼠标键盘等等,常见的输出设备包含声卡、显卡等等。网卡也是属于输入输出设备的一种,主要用于网络上的数据接收和发送。

在后期程序排查错误时除了要考虑程序本身的错误以外,还要考虑计算机硬件故障,例如内存不足,磁盘写满,网络不通等问题

每个计算机组件的IO性能也各不相同,CPU、内存、磁盘都遵循容量越大、IO性能越差的特点。

在后期优化程序时需要考虑程序时间复杂度和空间复杂度的问题。

1.2.3 计算机软件系统

软件的出现实现了人和计算机更好的交互,它是由开发人员采用某种编程语言(C/C++/Java等等)编写的一系列指令以及不同业务场景产生的数据组成。

通常将软件分为系统软件和应用软件

  • 系统软件
    驱动程序、操作系统、语言处理程序等都是属于系统软件。
    驱动程序是硬件厂商使用编程语言(C/C++)编写的程序,在使用硬件(例如打印机、显卡、声卡等等)前必须安装对应的驱动程序。
    操作系统是负责通过驱动程序管理硬件资源,同时给应用软件提供运行平台,目前主流的操作系统有Windows,Linux,macOS,Android,iOS,鸿蒙。
    语言处理程序是用于将编程语言编写的源程序编译或者解释成对应平台的机器语言的程序。

  • 应用软件
    微信、支付宝、淘宝、WPS等等都是属于应用软件,它们都是运行在操作系统之上的。
    运行在不同操作系统之上的软件交互方式也不一样,Linux上的软件通常是使用字符界面的交互方式,运行在Windows,macOS上的软件通常是以鼠标、键盘操作的交互方式,运行在Android,iOS上的软件通常是以手势触控、语音等交互方式。

1.3 程序和指令

程序是为了完成某项任务(例如聊天、听音乐)而使用某种编程语言(例如C/C++)编写的一组指令序列。
而指令是计算机程序控制的最小单位,由操作码和操作数组成,操作码是计算机要执行什么操作,例如加减乘除操作,而操作数具体执行的对象,具体的数据以及数据的位置。
所有指令的集合称为指令系统,常见的PC机指令系统有Intel X86指令集,常见的手机指令系统有ARM,因此手机上的程序不加修改是不能直接在PC机上运行,因为不同的指令集是不兼容的。

那么计算机是如何处理程序的?
根据冯诺依曼计算机结构的原理,计算机的工作流程大致如下

当用户从计算机中打开程序时(鼠标点击桌面的快捷方式图标),程序开始执行。
操作系统将程序的指令和相关的数据传送到内存中。
CPU根据程序内容从内存中读取指令。
CPU分析、处理指令,并为下一条指令做准备,如果有涉及到调用硬件资源(例如调用声卡播放音乐)的指令,操作系统会通过调用对应的硬件驱动程序来实现调用硬件的功能。
CPU取下一条指令并分析、处理,如此重复操作,直到执行完程序中的全部指令,最后将计算的结果放到指令指定的存储器地址中。

1.4 浅谈计算机编程语言

1.4.1 计算机编程语言发展史

计算机已经成为人类大脑的延伸,成为不可或缺的一部分。而算法是计算机的灵魂,编程语言是塑造计算机灵魂的工具。让计算机具备"灵魂",可以按照人的意志运行,甚至某天按照计算机自己的意志运行,其核心就是算法。

计算机程序设计语言经历了机器语言汇编语言高级程序设计语言三个阶段,其特点是使得程序员用编程语言开发、测试、部署应用程序越来越方便、高效。但是是以牺牲效率为代价,但是随着计算机硬件的快速发展,绝大多数应用场景的效率损失可以忽略不计。

  • 机器语言
    计算机发展的最早期,程序员编写程序采用二进制的指令(010010101)来实现的,而每种CPU都有各自不同的指令系统(SPARC/Intel X86/ARM),因此在不同的机器上使用不同的机器语言实现。其特点是性能特别高效,而面向机器编程也就意味着不能移植,需要手动处理底层硬件的差异性,而且二进制的指令难以理解和维护。

  • 汇编语言
    随着时代和计算机技术的发展,汇编语言和编译器的出现解决了机器语言需要记住非常多的二进制机器指令的难题,但是还是没有从根本上解决移植性的问题,只是将机器指令转换为易懂的英文单词,然后由编译器编译成机器指令,因为计算机终归揭底只能识别二进制的0001110100110机器指令,而且汇编语言是面向机器的,不同机器(SPARC/Intel X86/ARM)的汇编指令是不相同的。尽管如此汇编语言目前仍然在工业电子编程、软件的加密解密和计算机病毒分析等场景广泛使用。

  • 高级程序设计语言
    高级程序设计语言的高级之处体现在开发人员在编写程序时无需关心计算机底层硬件差异而只需要专注于业务模块实现即可。而且相对于机器语言、汇编语言而言,高级语言学习起来更加容易,因此会有更加充足的人力资源,也更容易开发大型商业软件,例如Windows、macOS、Linux等操作系统都是使用C/C++实现。国内的阿里巴巴在电商、物流、金融、支付领域大量使用Java实现。

1.4.2 计算机语言应用场景

如果想知道目前主流的编程语言有哪些,可以访问tiobe 首页获取编程语言排行榜。

2019年11月编程语言排行榜Top20

根据Tiobe排行榜得知,Java/C/Python分别排在前三名, 随后紧跟着C++,C#,JavaScript等等。
每种编程语言都有自己擅长的应用场景。

C硬件驱动、操作系统、系统软件
C++系统软件、网络通讯、科学计算 、游戏
C#Windows应用,Web应用、游戏
Java大型互联网应用(淘宝、天猫),Android,大数据
Go高并发、区块链、微服务
KotlinAndroid应用开发
SwiftmacOS,iPhone,iPad应用开发
Python人工智能、机器学习、自动化运维、数据分析 、图形处理
JavaScript浏览器端、服务端、PC桌面
Scala大数据开发

那么如果你作为初学者,面对如此之多的编程语言,到底应该先从哪门语言上车呢?如果你想深入的学习其他语言和架构相关的知识之前建议熟练掌握C语言。因为C++/Java/C#等编程语言都模仿了C语言。无论哪种语言,都是实现目标的工具,而不是目标本身。

而不出意外的话,我的Devops 头条号会覆盖上述的十种编程语言,目的是实现全平台(Windows,Linux,macOS)应用开发、测试、部署。感兴趣的同学可以关注。

1.5 程序的编译和解释

由于高级编程语言和计算机底层语言是互不相通的,计算机最底层只能识别01010这种二进制的机器指令,因此需要使用工具进行语言之间的转换。这个就是程序编译或者解释的由来。

为了理解程序编译和程序解释,这里引入两种语言,分别是高级计算机语言L1,以及低级计算机语言L0。

  • 程序编译
    开发人员使用高级编程语言L1编写的应用程序通过编译器生成成计算机底层能够识别的低级语言L0,L0就是计算机实际执行的语言,而编译器生成的计算机底层识别的二进制机器指令过程就是程序编译。常见的编译型语言有C/C++/Objective-C/Go

  • 程序解释
    首先使用L0语言实现另外一个程序,也就是解释器,然后将开发人员使用高级语言L1编写的应用程序作为输入,每一句L1编写的程序都会在L0中作为等价的转换然后执行,解释的过程就是由L0编写的解释器去解释L1程序。常见的解释型语言有PHP,Python,JavaScript。

而Java和C#属于编译+解释型语言,以Java为例子,Java程序在运行之前首先被编译成Java字节码,然后在JVM虚拟机上解释运行。

1.6 Java概述

1.6.1 Java发展历史


Java之父-James Golsing
  • 起源
    1991年,Sun公司的James Golsing领导的工程师小组想要开发一种用于像有线电视机顶盒这样的消费类电子产品的小型计算机语言,该产品的特点是由于不同的厂商选择不同的CPU和操作系统,因此要求该语言不能和特定的体系结构绑定在一起,也就是跨平台的。最初将这个语言命名为Oak,然后发现已经有一种语言叫这个名字,然后改为Java。

  • 流行
    20世纪90年代末,Java赶上了互联网发展的潮流,而互联网的特点刚好和消费类嵌入式电子产品类似(不同计算机产商选择不同的CPU和操作系统),得益于Java的跨平台特性,可以制作在支持Java的Web浏览器内的程序(Applet)而逐渐流行起来。

  • 生态
    由于Java开源,也得到了许多大厂(例如Oracle,IBM,阿里巴巴,谷歌,苹果)的支持,逐步发展成为具有开源、跨平台、高性能、支持多线程、分布式、安全可靠等诸多特性的开发平台和运行平台,而且自JDK1.4以后逐渐涌现出许多为了简化企业级开发的开源框架,例如后期会学习的Spring Framework,MyBatis,Netty,Dubbo等等都是使用Java实现,开发者可以通过阅读Java和框架的源码来提高自身的编程功力。

  • 开发平台
    经过20多年(1995年正式对外公开发布)的发展已经逐步建立起自己强大的生态体系,在大型互联网应用开发,移动端Android开发以及大数据开发占据了广阔的市场,最典型的就是国内互联网巨头-阿里巴巴在其电商、物流、金融、支付、大数据、云计算等业务场景中大量使用了Java及其相关技术栈(Spring Framework/Spring Boot/Spring Cloud/Alibaba-Spring-Cloud,Hadoop,Spark,Flink/Android)。

  • 运行平台
    Java程序是运行在JVM(Java Virtual Machine)之上的,这就是Java程序跨平台实现的本质原因,而且由于Java的开放性,有越来越多的语言是运行在JVM之上的,例如大数据处理语言Scala,Android开发的Kotlin以及Clojure,Groovy等等。

1.6.2 Java的特性

Java是基于C/C++基础之上演进而来,但是不同于C/而言,Java更加简单易用,开发效率更高,而且基于JVM实现了跨平台,也支持分布式应用开发、高并发、高可用、高性能等应用场景。

1.6.3 Java技术体系平台

Java自从1998年之后将Java分为三个版本,分别是JavaSE,JavaEE和JavaME,不同的版本有不同的应用场景。

JavaSE(Java Standard Edition):标准版Java,提供了完整的Java核心API,主要用于桌面应用开发,不过目前桌面开发基本都基于C/C++实现。

JavaEE(Java Enterprise Edition):企业式Java,主要用于企业级后台服务,大型分布式互联网应用开发。

JavaME(Java Micro Edition):嵌入式Java,主要用于开发嵌入式设备的产品,例如塞班手机游戏(已经消亡)。

由于目前Java主要的擅长领域是企业级后台服务开发、Android移动应用开发以及大数据应用开发,而Java语言是它们的基石语言,因此无论是从事企业级后台服务开发,还是Android以及大数据应用开发,都要先从JavaSE入门,然后再学习企业级应用以及大型分布式互联网应用相关的Java技术栈,例如MytBatis,Spring Framework/Spring Boot/Spring Cloud,Alibaba Spring Cloud等等。

1.7 Java程序员的必备环境

俗话说,工欲善其事必先利其器,掌握一些日常开发中使用的工具、软件能够大大的提高工作效率,工具本身推出的目的也是为了提高和解放生产力。而软件开发是大型团队之间协作,需要注意的是在企业日常开发中,软件的各个版本要跟团队保持一致,避免因为版本差异性而产生不必要的问题。

Windows上安装的应用程序通常都是.exe或者.msi格式,通常只需要去软件官网下载后双击安装即可。安装时需要注意安装的路径不能包含中文和空格,有些应用软件安装时会连带安装其他不必要的软件(全家桶套装),因为Windows通常是安装在C盘中,如果你的C盘容量比较小,可以修改软件的安装路径。

macOS上的应用程序通常是.dmg格式,下载打开之后通常都是.kpg或者.app,如果是.kpg需要根据提示进行安装,如果是.app格式,直接拖放到"应用程序"文件夹即可。

Java开发环境主要是在Windows或者macOS上搭建,通常需要熟练使用JDK,IntelliJ IDEA,Git,Maven+Navicat/DataGrip+XShell/SecureCRT 以及常用的其他工具,例如Chrome,Visual Studio Code,PowerDesigner,Postman,Jenkins,Gitlab等工具。

1.8 理解JDK,JRE和JVM三者之间的关系

JDK(Java Development Kit)原来是SUN公司推出的包含了开发和运行Java程序的工具集,而SUN公司在2010年被Oracle公司以74亿美金收购,也就意味着如果想要下载JDK,需要去Oracle官网下载。
JDK整体架构示意图

结合Java架构图理解JDK,JRE和JVM三者之间的关系。
JDK(Java Development Kit)包含了开发和运行Java程序所必备的环境,
JRE(Java Runtime Enviroment)包含了运行Java程序所必备的环境,主要由JVM和Java核心类库组成
JVM(Java Virtual Machine)负责解释执行JDK编译生成的字节码文件,针对不同的操作系统(Windows,Linux,macOS)官方提供了不同的JVM实现来实现Java程序的跨平台。

这里回顾下几个重点版本的JDK发布历史

  • 1996年,SUN公司对外发布了JDK1.0
  • 1998年,SUN公司发布了JDK1.2
  • 1999年,SUN公司将Java分成了J2SE,J2EE,J2ME
  • 2004年,SUN公司发布了JDK1.5,也被称为JDK5.0
  • 2005年,J2SE,J2EE,J2M E分别更名为JavaSE,JavaEE,JavaME
  • 2011年,Oracle公司发布了JDK1.7,也被称为JDK7.0
  • 2014年,Oracle公司发布了JDK8.0
  • 2017年,Oracle公司发布了JDK9.0
  • 2018年3月,Oracle公司发布了JDK10.0,版本号也被称为18.3
  • 2018年9月,Oracle公司发布了JDK11.0,版本号也被称为18.9
  • 2019年3月,Oracle公司发布了JDK12.0,版本号也被称为19.3
  • 2019年9月,Oracle公司发布了JDK13.0,版本号也被称为19.9

JDK5.0是JDK发展史上具有里程碑意义的版本,具有许多新特性,例如可变参数、自动拆装箱,泛型、注解等等,JDK1.5等同于JDK5.0。

JDK7.0是Oracle公司09年收购SUN公司之后发布的第一个版本,也就意味着以后下载JDK需要去Oracle官网下载。

JDK8.0是目前互联网公司使用的主流JDK版本,许多Java的开源框架(例如SpringBoot2.x,Spring Cloud)都是基于该版本开发,也是Oracle公司长期支持的JDK版本。

JDK9.0以后Oracle公司将JDK的发布周期改为半年发布一个大的版本,而在企业项目开发时应该选择互联网大厂广泛使用,并且是官方长期维护的版本,而不是最新的版本。

目前互联网企业中使用最广泛的JDK版本为JDK8,而目前(2019/11/15)最新的JDK版本为JDK13,其中Oracle官方长期支持的JDK版本为JDK8和JDK11,分别支持到2025年和2026年。而JDK9,10,12,13都不是官方长期支持的版本,后期的学习中会覆盖最新版本涉及到的新特性。而且JDK是向下兼容,这也就意味着JDK8的特性能在JDK11上运行。

在日常开发学习中可以选择当前最新的版本(例如JDK13)学习,而在企业开发中,JDK的版本和线上环境运行的JDK版本保持一致即可。

1.9 macOS配置Java环境

1.9.1 macOS下载JDK

如果想要开发Java程序,必须去Oracle官网下载JDK,在进入Oracle官网首页后下拉页面找到Resources for Developers

然后在跳转的页面中找到Java

然后选择Java SE Download

然后选择JDK11
因为JDK11是继JDK8之后Oracle官方长期维护的版本

然后下载JDK

然后同意License,并选择对应的版本下载
因为本人的开发平台是macOS,因此选择的是jdk-11.0.5_osx-x64_bin.dmg

1.9.2 macOS下JDK安装

当JDK下载完成之后双击dmg文件

macOS系统会校验该文件,然后双击JDK11.0.5.pkg启动安装

介绍

安装类型

安装
当输入密码或者使用touchID后,macOS此时会安装JDK至/Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk目录下,并且会自动配置环境变量。此时可以输入javac -version和java -version来验证安装。


执行安装

安装摘要

1.9.3 macOS下JDK配置

如果你的macOS下同时安装了多个不同的JDK版本(例如JDK11,JDK8),而又想在终端上运行指定的JDK版本(这里以JDK8为)的话,此时需要通过配置环境变量来实现。

首先使用su root命令切换到root用户,然后使用vim /etc/profile编辑profile文件,
此时vim处于阅读模式,还不能修改文件,可以通过i键进入编辑模式
然后添加JAVA_HOME环境变量,并使用export引用至PATH环境变量,

当在终端上执行java相关命令时会优先查找PATH环境变量对应的路径。

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
export PATH=$PATH:$JAVA_HOME

JAVA_PATH环境变量配置

添加完成后按esc退出编辑模式,并输入wq!保存文件,如果想要使修改的配置文件生效,还需要执行source /etc/profile命令,此时便可以实现Java版本的切换了。

修改PATH环境变量实现版本切换

1.10 Visusl Studio Code开发Java程序

1.10.1 macOS下使用Visual Studio Code

Visual Studio Code是微软推出的一款开源、跨平台(Windows,Ubuntu,macOS)的编辑器,这里使用它来编写Java语言的源代码,当然除了编写Java代码之外,还可以用来编写C/C++,Python,Go,JavaScript,PHP程序等等。初学者不建议使用类似于IntelliJ IDEA那样的集成工具,因为其背后隐藏了许多你需要了解的细节。

在使用Visual Studio Code之前你需要去官网下载最新的可用版本,关于它的详细使用官网也提供了丰富的文档说明。

当下载完成后会得到一个VSCode-darwin-stable.zip包,我们只需要将其解压

然后将解压后的程序Visual Studio Code拖放到macOS的应用程序文件夹即可使用

拖放完成之后便可以在LaunchPad中启动它

此时会提示尚未打开文件夹,我们需要在/Users/liuguanglei/Documents目录下创建一个文件夹来存放源文件,这里我创建一个名为workspace的文件夹,因为后期会涉及到java,python,go,php,javascript等等语言,因此还需要在workspace目录下创建一个名为java的文件夹。

然后再点击Visual Studio Code的打开文件夹,选择/Users/liuguanglei/Documents/vs_code/java作为存放java源文件的目录

1.10.2 编写和运行HelloWorld

Java源文件都是以.java结尾,这里在Visual Studio Code中创建一个HelloWorld.java的源文件

然后在源文件中编写以下内容

public class HelloWorld{

    public static void main(String[]args){
        System.out.println("macOS10.15.1 & Visual Studio Code HelloWorld With Java");
    }
}

HelloWorld源程序详解

  • 每个Java源文件可以包含多个class,但是只能有一个class使用public修饰,而且public修饰的类名必须和源文件名一致。针对包含多个class的源文件,javac编译源文件时生成对应数量的class文件,字节码的文件名和源文件中的class类名一致。

  • Java程序如果想独立运行,必须包含固定格式public static void main(String[]args){}的main方法

  • Java中的每条执行语句都需要包含在代码块{}或者是方法,并且以分号(;)结束

  • 控制台输出可以使用System.out.println(),然后传递字符串参数即可。

  • Java严格区分大小写,例如System和system是完全不同的含义。

编写完成以后可以在终端上使用javac编译该程序,编译会生成HelloWorld.class文件,然后使用java命令运行该程序,程序的运行结果会在终端上输出macOS10.15.1 & Visual Studio Code HelloWorld With Java


HelloWorld

1.10.3 Visual Stuido Code集成Java插件

由于每次编写完原文件后,都需要启动终端来编译和运行Java程序,这样效率比较低,我们可以使用Visual Stuido Code提供的Java插件来实现编译、调试和运行Java程序。

首先在Visual Studio Code的插件商店(Command+Shift+x)中搜索Java,然后找到Java Extension Pack点击安装即可,如果想要使用插件,安装完成后重启便可使用。

使用插件便可以在源文件中通过点击Run来运行程序,点击Debug来调试程序。同时可以直接在Visual Studio Code中的内置终端查看程序的运行结果。

根据程序的运行结果显示此时Visual Studio Code程序默认使用的是profile文件中配置的JDK8运行的,如果你想要使用之前安装的JDK11,可以通过修改
/Users/liuguanglei/Library/Application Support/Code/User 路径下的setting.json文件,添加配java home属性配置,指向JDK11的Home目录

然后重启Visual Stuido Code,再次运行HelloWorld程序,可以从终端上看到输出信息已经使用了JDK11的版本。

1.11 Java程序的运行机制

由于高级编程语言和计算机底层语言是互不相通的,计算机最底层只能识别01010这种二进制的机器指令,因此需要使用工具进行语言之间的转换。这个就是程序编译或者解释的由来。

为了理解程序编译和程序解释,这里引入两种语言,分别是高级计算机语言L1,以及低级计算机语言L0。

程序编译
开发人员使用高级编程语言L1编写的应用程序通过编译器生成成计算机底层能够识别的低级语言L0,L0就是计算机实际执行的语言,而编译器生成的计算机底层识别的二进制机器指令过程就是程序编译。常见的编译型语言有C/C++/Objective-C/Go

程序解释
首先使用L0语言实现另外一个程序,也就是解释器,然后将开发人员使用高级语言L1编写的应用程序作为输入,每一句L1编写的程序都会在L0中作为等价的转换然后执行,解释的过程就是由L0编写的解释器去解释L1程序。常见的解释型语言有PHP,Python,JavaScript。

Java源程序首先要经过C语言实现的javac编译器将源文件编译生成和平台无关的字节码文件(.class结尾的文件),如果源文件中有Java语法错误,则会导致无法编译通过
然后在运行时通过Java虚拟机内嵌的解释器将字节码转换为真正的机器码。

源程序是需要遵守Java语言规范,字节码文件是需要遵守JVM规范。
如果想要了解Java语言规范和JVM规范,可以拜读官方文档,其官网地址是https://docs.oracle.com/javase/specs/index.html

1.12 注释

注释(Comment)是用于描述程序的文字信息,在日常开发中应该多写注释,便于程序后期维护,而在程序调试的过程中,也可以通过注释部分代码来调试程序,注释的内容在javac编译时都会删除,不会影响程序的运行结果。

Java中的注释分为如下三种

  • 单行注释:注释一行内容,使用//表示,通常在方法内容使用
  • 多行注释 注释多行内容, 使用/**/表示,通常在方法内部使用,多行注释不能嵌套,否则会发生编译错误
  • 文档注释 用于生成Java API文档,使用/***/表示,通常在类上,属性上和方法上使用,可以使用javadoc -d 文档目录 源文件名生成API文档

三种注释版HelloWorld


/**
 * Java版本HelloWorld
 * @author tony ittimelinedotnet@gmail.com
 * @since JDK11
 */
public class HelloWorld{

    /*
      程序的主入口,从这里开始执行
    */
    public static void main(String[]args){
        //向终端输出macOS10.15.1 & Visual Studio Code HelloWorld With Java
        System.out.println("macOS10.15.1 & Visual Studio Code HelloWorld With Java");
    }
}

javadoc生成文档注释

iuguangleideMacBook-Pro:java liuguanglei$ pwd
/Users/liuguanglei/Documents/workspace/java
liuguangleideMacBook-Pro:java liuguanglei$ javadoc -d /Users/liuguanglei/Documents/doc/ HelloWorld.java
正在加载源文件HelloWorld.java...
正在构造 Javadoc 信息...
正在创建目标目录: "/Users/liuguanglei/Documents/doc/"
标准 Doclet 版本 11.0.5
正在构建所有程序包和类的树...
正在生成/Users/liuguanglei/Documents/doc/HelloWorld.html...
正在生成/Users/liuguanglei/Documents/doc/package-summary.html...
正在生成/Users/liuguanglei/Documents/doc/package-tree.html...
正在生成/Users/liuguanglei/Documents/doc/constant-values.html...
正在构建所有程序包和类的索引...
正在生成/Users/liuguanglei/Documents/doc/overview-tree.html...
正在生成/Users/liuguanglei/Documents/doc/index-all.html...
正在构建所有类的索引...
正在生成/Users/liuguanglei/Documents/doc/allclasses-index.html...
正在生成/Users/liuguanglei/Documents/doc/allpackages-index.html...
正在生成/Users/liuguanglei/Documents/doc/deprecated-list.html...
正在构建所有类的索引...
正在生成/Users/liuguanglei/Documents/doc/allclasses.html...
正在生成/Users/liuguanglei/Documents/doc/allclasses.html...
正在生成/Users/liuguanglei/Documents/doc/index.html...
正在生成/Users/liuguanglei/Documents/doc/help-doc.html...

查看javadoc生成的网页文档
从index.html文件中得知源文件中使用java文档注释的内容会出现在网页中

1.13 Java API文档的使用

JDK中封装了大量开发中常用的API(Application Programming Interface),其文档也是使用javadoc工具实现的,JDK11的API文档地址是 https://docs.oracle.com/en/java/javase/11/docs/api/index.html

后期会学习JDK提供的日常开发中常用类,可以使用搜索框搜索指定的类(例如java.lang.String)来查看类提供的方法,成员变量等等信息。

例如这里通过在线API文档查看java.lang.String类的使用

macOS还可以通过安装应用程序Dash来实现离线查阅JDK帮助文档
Dash 是使用与Mac OS平台的软件编程文档管理工具,可以浏览API文档,以及管理代码片段工具。Dash自带了丰富的API文档,涉及各种主流的编程语言和框架。 Dash内置了丰富的API文档,让我们集中管理API文档,包括下载、搜索、查阅并支持集成到XCode、Alfred等软件中,非常的强大!

下载安装Dash后,启动Dash,然后点击Download Docsets


Download Docsets

在搜索框中搜JavaSE,然后选择对应的版本下载即可。


搜搜Java SE并安装

下载完成之后,即使没有网络,也可以在Dash中查阅JDK API文档,Dash实际上是内嵌了Oracle官网的在线文档。

Dash中使用JDK API文档
12-28 00:28
查看更多