Java从0到全栈-Java语言概述与开发环境搭建
Java语言概述
Java发展历史
-
起源
1991年,SUN(Standford University Network)公司的James Golsing领导的工程师小组想要开发一种用于像电视机、微波炉、电话这样的消费类电子产品的小型计算机语言,该产品的特点是由于不同的厂商选择不同的CPU和操作系统,因此要求该语言不能和特定的体系结构绑定在一起,也就是跨平台的。最初将这个语言命名为Oak,但是发现已经有一种语言叫这个名字,后来改为Java(来源于印尼爪哇岛的咖啡)。 -
流行
20世纪90年代末,Java赶上了互联网发展的潮流,而互联网的特点刚好和消费类嵌入式电子产品类似(不同计算机产商选择不同的CPU和操作系统),得益于Java的跨平台特性,可以制作在支持Java的Web浏览器内的程序(Applet)而逐渐流行起来。 -
生态
由于Java开源,也得到了许多大厂(例如Oracle,IBM,阿里巴巴,谷歌,亚马逊、FaceBook)的支持,逐步发展成为具有开源、跨平台、高性能、支持多线程、分布式、安全可靠等诸多特性的开发平台和运行平台,而且自JDK1.4以后逐渐涌现出许多为了简化企业级开发的开源框架,例如后期会学习的Spring Framework,SpringBoot,SpringCloud,MyBatis,Netty,Dubbo,RocketMQ等等都是使用Java实现,开发者可以通过阅读Java和框架的源码来提高自身的编程功力。 -
开发平台
经过20多年(1995年正式对外公开发布)的发展已经逐步建立起自己强大的生态体系,在大型互联网分布式应用开发,移动端Android开发以及大数据开发占据了广阔的市场,最典型的就是国内互联网巨头-阿里巴巴在其电商、物流、金融、支付、大数据、云计算等业务场景中大量使用了Java及其相关技术栈(MyBatis,Spring Framework/Spring Boot/Spring Cloud/Spring Cloud Alibaba,Hadoop,Spark,Flink)。 -
运行平台
Java程序是运行在JVM(Java Virtual Machine)之上的,这就是Java程序跨平台实现的本质原因,而且由于Java的开放性,有越来越多的语言是运行在JVM之上的,例如大数据处理语言Scala,Android开发的Kotlin以及Clojure,Groovy等等。
而作为一个Java开发者而言,了解Java语言的历史就要了解JDK(Java Development Kit)的发展历史,以及当前企业开发时选用的JDK版本和目前最新的JDK版本。
- 1995年 5月23日Java语言诞生
- 1996年SUN公司对外发布了JDK1.0
- 1998年SUN公司发布了JDK1.2,将Java分成了J2SE,J2EE,J2ME
- 2004年SUN公司发布了JDK1.5,也被称为JDK5.0,同时J2SE,J2EE,J2ME分别更名为JavaSE,JavaEE,JavaME
- 2006年12月SUN公司发布了JDK1.6
- 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
- 2020年3月Oracle公司发布JDK14.0,版本号也被称为20.3
JDK5.0是JDK发展史上具有里程碑意义的版本,具有许多新特性,例如可变参数、自动拆装箱,泛型、注解、枚举等等。
JDK7.0是Oracle公司09年收购SUN公司之后发布的第一个版本,也就意味着自JDK7.0以后下载JDK需要去Oracle官网下载。
JDK8.0是国内互联网公司使用的主流JDK版本,许多Java的开源框架(例如SpringBoot2.x,Spring Cloud)都是基于该版本开发,也是Oracle公司长期支持的JDK版本。
JDK9.0以后Oracle公司将JDK的发布周期改为半年发布一个大的版本,而在企业项目开发时应该选择互联网大厂广泛使用,并且是官方长期维护的版本,而不是最新的版本。Oracle官方长期支持的JDK版本为JDK8和JDK11,分别支持到2025年和2026年。而JDK9,JDK10,JDK12,JDK13,JDK14都不是官方长期支持的版本。
Java从0到全栈系列首先会基于JDK11开始学习,然后逐渐会覆盖最新版本JDK涉及到的新特性。JDK是向下兼容,这也就意味着JDK8的特性能在JDK11上运行。
关于JDK版本的选择
在学习Java时可以选择当前最新的JDK版本,而在企业应用开发中,JDK的版本和线上环境运行的JDK版本保持一致即可。
Java的特点
Java是基于 C/C++
基础之上发展而来,但是不同于C/C++
的是Java是纯粹的面向对象(一切皆对象)语言,舍弃了C语言中容易引起错误的指针,并引入了垃圾回收机制避免了绝大多数内存泄露问题。
相对于C/C++
而言,Java更加简单易用、安全、健壮,同时开发效率更高(拥有大量的开源组件、框架),运行效率低于C/C++
,而且支持跨平台(一次编写,到处运行),体系结构中立,也支持分布式应用开发和高并发、高可用、高性能等应用场景。
Java程序之所以能够跨平台,是因为Java程序运行在JVM之上,没有和特定的平台绑定,Java程序不需要关注底层操作系统的差异性,而Oracle公司针对主流的操作系统提供了不同的JVM实现,从而屏蔽了底层操作系统的差异。
体系结构中立指的是JVM的实现可以是符合JVM规范的实现,例如Oracle公司的HotSpot,而且只要程序编译生成字节码文件,都可以在JVM上运行,例如Scala,Groovy都可以在HotSpot虚拟机上运行。
Java的技术体系
Java自从1998年之后将Java分为三个版本,分别是JavaSE,JavaEE和JavaME,不同的版本有不同的应用场景。
JavaSE(Java Standard Edition):标准版Java,提供了完整的Java核心API,主要用于桌面应用开发,例如Apache开源的性能测试工具JMeter就是使用JavaSE开发的。
JavaEE(Java Enterprise Edition):企业式Java,主要用于企业级后台服务,大型分布式互联网应用开发,例如电商、物流、支付、金融、在线教育等等。
JavaME(Java Micro Edition):嵌入式Java,主要用于开发嵌入式设备的产品,例如塞班手机游戏(已经消亡)。
目前Java主要被应用在企业级应用开发,大数据应用开发和Android应用开发,如果想要往这三个方向发展的同学,都必须要熟练掌握Java基础篇、Java新特性篇、Java进阶篇和Java开源组件篇的相关技术及其应用。Java进阶篇建议在有项目开发经验后再学习。
-
Java基础篇
- Java概述与开发环境搭建
- Java变量和数据类型
- Java运算符
- Java程序流程控制
- Java数组
- Java集成开发工具IntelliJ IDEA的使用
- Java面向对象之类和对象
- Java面向对象之类的五大成员
- Java面向对象之抽象类和接口
- Java面向对象之继承和多态
- Java面向对象之内部类
- Java日常开发常用类
- Java异常机制
- Java集合
- Java5新特性之注解
- Java5新特性之泛型
- Java5新特性之枚举
- Java IO 编程
- Java NIO编程
- Java AIO编程
- Java 网络编程基础
- Java 并发编程基础
- Java JDBC编程与MySQL基础
- Java反射与动态代理
- Java处理XML
- Java 日志
- Java测试与断言
- Java与正则表达式
-
Java新特性篇
- Java5新特性
- Java7新特性
- Java8新特性
- Java9新特性
- Java10新特性
- Java11新特性
- Java12新特性
- Java13新特性
- Java14新特性
-
Java进阶篇
- Java数据结构与算法
- Java设计模式以及JDK源码分析
- Java并发编程进阶
- Java虚拟机设计与实现
-
Java开源组件篇
- Google Guava
- Apache Commons
- Akka
- Disruptor
- Netty
- tio
- RxJava
Windows DOS命令行基本使用
目前使用的主流操作系统有Windows,macOS,Linux(Ubuntu),而早期的Windows不是图形界面,需要使用DOS命令来使用操作系统。
使用DOS命令之前首先需要使用快捷键windows+r打开运行窗口
然后在运行窗口中输入cmd后回车便可以启动DOS窗口,
即基于命令交互的方式使用操作系统的相关功能。
DOS窗口的C:Usersittim>
表示路径,即所有的操作都在C:Usersittim路径下进行。
如果想要切换盘符(例如D盘),只要输入D:然后回车即可切换到D盘
如果想要查看D盘的文件、目录列表,可以使用dir
命令
图形界面下查看D盘的文件目录
如果想要进入某个目录,可以使用cd 加上路径名即可。例如cd workspace,然后再次使用dir查看文件目录列表
如果想要一次进入多级目录,只需要使用反斜杠隔开文件夹即可。
如果想要返回上一级目录,可以使用cd ..
如果想要退回到根目录,可以使用cd ,需要注意的是cd命令只能在当前盘符(例如这里的D盘)下切换路径
如果想要退出DOS窗口,可以使用exit命令退出,还可以使用cls清除窗口的内容,使用Tab补全路径。
Java语言运行机制
由于高级编程语言和计算机底层语言是互不相通的,计算机最底层只能识别01010这种二进制的机器指令,因此需要使用工具进行语言之间的转换。这个就是程序编译或者解释的由来。
为了理解程序编译和程序解释,这里引入两种语言,分别是高级计算机语言L1,以及低级计算机语言L0。
-
程序编译
开发人员使用高级编程语言L1编写的应用程序通过编译器生成成计算机底层能够识别的低级语言L0,L0就是计算机实际执行的语言,而编译器生成的计算机底层识别的二进制机器指令过程就是程序编译。常见的编译型语言有C/C++/Objective-C/Go -
程序解释
首先使用L0语言实现另外一个程序,也就是解释器,然后将开发人员使用高级语言L1编写的应用程序作为输入,每一句L1编写的程序都会在L0中作为等价的转换然后执行,解释的过程就是由L0编写的解释器去解释L1程序。常见的解释型语言有PHP,Python,JavaScript。
Java源程序首先要经过C语言实现的javac编译器将源文件(例如HelloWorld.java)编译生成和平台无关的字节码文件(例如HelloWorld.class),如果源文件中有Java语法错误,则会导致无法编译通过。
然后在运行时将字节码给JRE的类装载器装载,并且由字节码校验器校验后通过解释器转换为真正的机器码。
源程序是需要遵守Java语言规范,字节码文件是需要遵守JVM规范。
如果想要了解Java语言规范和JVM规范,可以阅读官方文档,其官网地址是https://docs.oracle.com/javase/specs/index.html
Java开发环境搭建
Java开发环境搭建要求
Java从0到全栈系列的同学电脑硬件配置不低于i7 CPU、16G内存(32G内存更佳)、512G固态硬盘。操作系统Windows10,macOS10.14+都可以,不过必须是64位系统。
因为Java从0到全栈系列会涵盖Java的企业级应用开发,大数据应用开发和Android应用开发,
后面会安装和运行大量的系统软件以及应用软件,
例如Chrome,IntelliJ IDEA,WebStorm,Postman,MySQL,Wireshark,Navicat,SecureCRT,VMWareWorkStation,CentOS7等等。
如果是Windows10系统的电脑可以安装鲁大师来查看详细的硬件配置,鲁大师用完之后就可以删除,Windows系统不建议安装任何杀毒软件。
如果是macOS系统的电脑可以通过左上角的苹果菜单->关于查看硬件配置
JDK11介绍
目前演示的环境是在Windows10下介绍JDK11的下载、安装和配置
如果想要开发Java程序,首先需要去Oracle官网下载、安装和配置JDK。
JDK(Java Development Kit)是开发Java程序的工具包,包含开发和运行Java程序所必备的环境。
而JRE(Java Runtime Enviroment)只包含了运行Java程序所需要的环境(核心API和JVM),JDK包含了JRE。
JDK11下载
JDK 下载地址:https://www.oracle.com/java/technologies/javase-downloads.html
JDK11下载地址:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
首先去Oracle官网下载JDK11
官网提供了各个主流操作系统(Windows,Linux,macOS等等)的JDK8版本下载,如果你的电脑是Windows 64位系统,可以下载文件jdk-11.0.6_windows-x64_bin.exe。
如果你的电脑是macOS系统,那么可以下载jdk-11.0.6_osx-x64_bin.dmg。
当点击下载的文件时,页面会弹出必须同意Oracle Technology Network License Agreement for Oracle Java SE
然后登录Oracle账户信息
登录成功之后浏览器会自动开始下载JDK11
JDK11安装
Windows下的JDK11安装和普通的应用软件安装几乎没有区别,不过需要注意的是安装路径不要有中文和空格,否则使用时会出现问题。
开始安装
选择安装路径
安装中
安装完成
JDK11.0.6的安装目录
JDK11 配置
在正式使用JDK编译和运行Java程序之前,还需要配置PATH环境变量,因为使用JDK编译和运行Java程序是需要C:Program FilesJavajdk-11.0.6in目录下的javac.exe和java.exe两个程序在DOS命令行窗口来编译和运行Java程序。
而为了在DOS命令行窗口的任意路径下使用javac.exe编译和java.exe解释运行Java程序,需要在系统的PATH环境变量中配置JDK11安装目录的bin目录。
首先打开文件资源管理器(快捷键Windows+E),然后找到此电脑->属性
然后找到高级系统设置
然后找到环境变量
然后在系统变量中新增JAVA_HOME,指向JDK11的安装目录
并且在PATH环境变量中引用%JAVA_HOME%in目录
配置完成以后点击各个窗口的确定按钮,然后打开DOS命令行窗口,分别输入javac -version
和java -version
查看Java编译器和Java解释器的版本信息。
然后就可以在DOS命令行的任意路径下使用javac.exe和java.exe来编译和运行java程序。因为系统会从PATH环境变量配置的路径查找这两个程序。
如果想要切换版本,只需要修改JAVA_HOME
变量的值即可。
JDK 编译、运行Java程序
本次演示在macOS10.1.5.3上使用JDK11.0.6来编译运行Java程序
首先使用文本编辑器(例如VS Code或者Atom)编写一段Java程序,程序的文件后缀名必须是.java,例如HelloWorld.java
此段程序的功能是向终端输出macOS10.15.3 & Visual Studio Code 1.43.0 Hello World With Java11
然后并换行
public class HelloWorld{
public static void main(String[] args) {
System.out.println("macOS10.15.3 & Visual Studio Code 1.43.0 Hello World With Java11");
}
}
在使用JDK编译、运行Java程序前,必须安装、配置JDK,然后在终端上使用javac -version
和java -version
两个命令来查看安装的JDK版本信息。
然后使用命令cd Document/workspace/java/ittimeline
切换到源文件HelloWorld.java所在的目录,如果想要在终端上查看HelloWorld.java的内容,可以使用cat HelloWorld.java
。
接下来编译Java源程序,使用javac HelloWorld.java
命令,编译会生成字节码文件HelloWorld.class,可以使用ls
命令来查看编译生成的文件目录,注意该文件不是文本文件,无法使用cat
命令查看。
编译成功之后,就可以使用命令java HelloWorld
来执行HelloWorld程序了。
如果想要获取系统信息,可以尝试编译和运行程序ShowProperties.java
public class ShowProperties{
public static void main(String[]args){
System.getProperties().list(System.out);
}
}
如果想要体验Java的跨平台,可以将HelloWorld.java和ShowProperties.java拿到任何安装了Java虚拟机的操作系统上运行
VS Code 介绍、下载和安装
VS Code介绍
Visual Studio Code是一个轻量级但功能强大的源代码编辑器,可在您的桌面上运行,并且可用于Windows,macOS和Linux。它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C ++,C#,Java,Python,PHP,Go)和运行时(例如.NET和Unity)扩展的生态系统。
VS Code官网也提供了文档,可以阅读文档来获取其使用方法。
VS Code 下载
当使用Chrome浏览器访问Visual Studio Code的官网首页时,浏览器会自动检测系统的版本(Windows,Linux,macOS),然后显示和系统对应的Visual Studio Code版本下载。
如果电脑是Windows系统,点击Download for Windows即可,目前(2020/03/17)最新的版本是1.43
VS Code 安装
下载完成后直接双击VSCodeUserSetup-x64-1.43.0.exe程序便可以进行安装
同意许可协议
设置安装路径
选择开始菜单文件夹
选择其他任务
安装准备就绪
安装中
安装完成
默认启动界面
Java程序的开发步骤
在开发Java程序时,需要经过三个步骤,分别是编辑、编译、运行。
-
编辑
编辑就是使用文本编辑器或者集成开发环境来编辑Java源程序,文件后缀名以.java结尾(例如HelloWorld.java)
目前主流的编辑器有VS Code,主流的集成开发环境有IntelliJ IDEA。如果你是初学者,建议使用VSCode来开发Java程序,如果在公司开发项目通常都是使用IntelliJ IDEA。 -
编译
编译就是使用JDK提供的javac.exe程序(即java编译器)将编辑器编辑的Java源程序编译成字节码文件(以.class结尾的文件,例如HelloWorld.class),因为Java程序是运行在JVM之上,而JVM无法识别编辑器编写的Java源程序,只能识别经过java编译器编译生成的字节码文件。例如java HelloWorld
-
运行
运行就是使用java.exe程序解释运行编译生成的字节码文件,例如java HelloWorld
VS Code开发Java程序
工作目录规划
在正式开发Java程序之前,首先在本地磁盘(我这里选择D盘作为根目录)创建两个工作目录:D:workspacejavaittimelinevs_code和D:workspacejavaittimelineidea,用于区分两个不同Java开发工具的工作目录。其中D:workspacejavaittimelinevs_code用于存放Visual Studio Code开发的Java程序,而D:workspacejavaittimelineidea用于存放IntelliJ IDEA开发的Java程序。
VS Code Java插件
在安装Visual Studio Code的Java插件之前,必须安装JDK和配置JAVA_HOME,因为Java插件也是基于JDK运行的。
Visual Studio Code提供了开发Java程序的插件 Java Extension Pack,该插件包组合了其他几个主流的Java插件,例如Language Support for Java™ by Red Hat,Debugger for Java,Java Test Runner,Maven for Java,Java Dependency Viewer,Visual Studio IntelliCode,只需要点击Visual Studio Code的Extensions(快捷键Ctrl+Shift+x),然后搜索Java Extension Pack,点击Install安装即可。
当安装成功之后,其他的几个插件也会一并安装。
如果想要了解Java Extension Pack的使用,可以使用快捷键Ctrl+Shift+P,然后输入Java:Getting Started
VS Code创建Java项目
在后面的学习中我们会编写许多的应用程序,这些应用程序都会存放在D:workspacejavaittimelinevs_code目录下。
这里我们会使用Visual Studio Code来创建一个java-core项目,用来存放Java基础的代码。
首先使用快捷键Ctrl+Shift+P 进入命令模式,然后输入Java:Create Java Project 来创建一个Java项目
然后设置项目所在的文件夹目录
设置项目的名称
然后VS Code会自动生成项目java-core
其中bin目录用于存放编译生成的字节码文件,而src目录用于存放java源文件
而且Visual Studio Code还帮我们自动生成了一个Java源文件App.java,在打开该文件后,可以直接点击Run来运行程序。
当点击Run运行App时,VS Code会调用javac.exe程序编译App.java,此时会编译生成App.class文件,该文件位于bin目录下。然后调用java.exe程序来运行App.class。
VS Code开发第一个Java程序
java-core项目的定位是将Java语言规范以及Java的原生API的方方面面展现的淋漓尽致。
首先在java-core的src目录下创建目录netittimelinejavacorefoundationalobject,Visual Studio Code会自动在java-core的bin目录下自动创建同一个目录。然后删除VS Code 创建的App.java
然后在netittimlinejavacorefoundationalobject下创建源程序HelloWorld.java
package net.ittimeline.java.core.foundational.object;
public class HelloWorld{
public static void main(String[] args) {
System.out.println("Windows10 & Visual Studio Code 1.43.0 Hello World With Java ");
}
}
然后点击Run 运行程序,可以从VS Code中观察程序的运行结果
HelloWorld程序详解
HelloWorld作为学习一门编程语言的入门程序,如果能够编写和运行HelloWorld程序,也就正式迈进了编程的大门。
HelloWorld程序的功能是向终端打印输出Windows10 & Visual Studio Code 1.43.0 Hello World With Java
,也展现了一个可以运行Java程序的基本结构。
其中 package net.ittimeline.java.core.foundational.object;
表示包声明语句,意味着HelloWorld.java位于netittimelinejava.corefoundationalobject目录下,实际上包的本质也是目录,而且Java源程序的包名必须和目录名一致。
而 class
用于定义一个类,public
用于修饰这个类的访问权限,关于访问权限在面向对象章节会详细说明。
如果一个Java程序想要独立运行,必须包含固定格式的main
方法,VS Code中输入main
便可以快速生成main方法
public static void main(String[] args) {
}
System.out.println("Windows10 & Visual Studio Code 1.43.0 Hello World With Java ");
用于打印输出Windows10 & Visual Studio Code 1.43.0 Hello World With Java
并换行,打印输出的内容取决于println()方法中传递的参数。Visual Studio Code中输入sysout
便可以快速生成System.out.println()
;
Java程序的每条语句都需要使用分号(;)来表示结束,例如这里的包声明语句以及打印输出语句都使用了分号(;)来表示结束。
Java注释
注释(Comments)是用于描述程序的文字信息,在日常开发中应该多写注释,便于程序后期维护,而在程序调试的过程中,也可以通过注释部分代码来调试程序,注释的内容在javac编译时都会删除,不会影响程序的运行结果。
Java中的注释分为如下三种
- 单行注释:注释一行内容,使用//表示,通常在方法内容使用
- 多行注释 注释多行内容, 使用
/**/
表示,通常在方法内部使用,多行注释不能嵌套,否则会发生编译错误 - 文档注释 用于生成Java API文档,使用
/***/
表示,通常在类上,属性上和方法上使用,可以使用javadoc -d 文档目录 源文件名生成API文档
三种注释的使用方式
package net.ittimeline.java.core.foundational.object; //package关键字表示包声明
/**
* Java三种注释的使用
* @author liuguanglei ittimelinedotnet@gmail.com
* @version 2020/03/17
* @since JDK11
*/
public class Comments{
/**
* main方法作为程序的入口
* 即程序从main方法开始执行
* @param args
*/
public static void main(String[] args) {
//打印输出跟Tony老师学编程并换行
System.out.println("跟Tony老师学编程");
/*
Java的应用场景
企业级应用:电商、金融、物流、支付、教育
Android
大数据
*/
}
}
当运行程序时,程序的运行结果显示注释的内容都是被编译器忽略的
Java文档注释的使用
首先选择Comments.java文件在终端打开
然后执行如下命令
javadoc -encoding utf-8 -charset utf-8 -d D:workspacejavaittimelinevs_codejava-coredoc Comments.java
然后选中doc目录的index.html在文件资源管理器打开
就可以看到基于javadoc工具生成的帮助文档
Java API文档的使用
Java针对应用开发提供了许多的API,例如数组、集合、并发、网络、IO等等。
Oracle官方提供了在线的API帮助文档,也是基于javadoc生成,其地址是 https://docs.oracle.com/en/java/javase/11docs/api/index.html
当后期学习JDK提供的API,可以通过在线的API文档查看相关类、接口以及他们的方法使用