Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今,Java 仍是企业和开发人员的首选开发平台,全球有数百万开发人员运行超过 51 亿台 Java 虚拟机。
通过刚才的讲解,我们了解到 JVM、JRE、JDK 之间是一个包含的关系:
因此,对于后面的学习,我们只需要下载安装 JDK 就可以进行 Java 开发了
从 Java 11 这个版本开始,不再单独提供 JRE
- In this release, the JRE or Server JRE is no longer offered. Only the JDK is offered. Users can use
jlink
to create smaller custom runtimes.
这里介绍 Windows 10 平台下 Oracle 的 JDK 安装
入口在哪儿?访问 oracle 官网 Oracle | Cloud Applications and Cloud Platform
点击 Java 后进入下面的页面
下载页面让我们选择版本,这里选择 Java 17,因为它是长期支持版(LTS)
接下来选择平台,这里选择 Windows,其它平台下 JDK 的安装,请关注我们后续的视频
Windows 有三个版本,第一个是解压版,后两个是安装版。初学者我建议下载解压版(有助于理解 java 程序的查找过程)
下载完毕后,解压到一个没有中文和空格的目录即可
你可以选择一个喜欢的目录,我的解压目录是 d 盘根目录下,如图所示
验证安装是否成功:按快捷键 Win + r
,输入命令提示符程序名称 cmd
出现命令提示符窗口,输入 java -version
C:\Users\Lenovo>java
'java' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
这是因为 cmd 程序并不知道 java 的安装位置,因此没有找到它
可以输入它的全路径来找到它
更好的方式是配置 Path【环境变量】
按快捷键 win
搜索【此电脑】,出现下面的界面
点击【属性】,找到【高级系统设置】
按下图箭头顺序找到新建,把刚才 jdk 的解压目录 + bin 补充填入,我这里是 D:\jdk-17.0.3.1\bin,全部确定。
Path 环境变量的作用:
- Path 环境变量中记录的是程序执行时的搜索路径
- cmd 执行一个程序时,即使未给出完整路径,也会在 Path 环境变量列出的目录下依次查找该程序
- 找到了,则执行
- 都找不到,才报错
- 因此对刚才的问题,只需将 java 程序的所在目录补充进 Path 环境变量
环境变量改动后,原有的 cmd 窗口是不受影响的,要想生效必须打开一个新的 cmd 窗口,输入 java -version
,如果出现类似于下面的输出,表示成功
C:\Users\Lenovo>java -version
java version "17.0.2" 2022-01-18 LTS
Java(TM) SE Runtime Environment (build 17.0.2+8-LTS-86)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)
网上的一些教程,都会让大家配置另一个叫做 JAVA_HOME 的环境变量,代表的是 JDK 的安装根目录。
出于知识的完整性,我们演示一下如何配置 JAVA_HOME,还是找到环境变量的配置窗口,在系统环境变量处点击新建,输入变量名和变量值,JAVA_HOME 名称是固定的,注意全大写,值是 JDK 的安装根目录,我这里是 D:\jdk-17.0.3.1
配完之后,发现 PATH 环境变量中的 D:\jdk-17.0.3.1\bin 与 JAVA_HOME 中的 D:\jdk-17.0.3.1 有一部分重复了,这样的问题是如果将来切换 jdk 版本,如果改了一处,忘记改另一处,就会造成不一致。
可以把 PATH 的取值修改为 %JAVA_HOME%\bin,其中 %JAVA_HOME% 代表引用 JAVA_HOME 环境变量的值,这样以后改动时,只需要改 JAVA_HOME 这一处就可以了
这节课我们来学习 Java 的第一个入门程序,Hello world,目标是命令 jvm,在程序窗口输出一行问候语。
首先用到的是一个名为 jshell 的开发工具,打开命令提示符 cmd,输入 jshell
PS D:\> jshell
| 欢迎使用 JShell -- 版本 17.0.2
| 要大致了解该版本, 请键入: /help intro
jshell>
可以看到【jshell>】后的光标在不断闪烁,表示可以继续在【jshell>】后键入命令或代码
常见命令
第一行代码来了:输入 System.out.println("Hello, world")
,要注意大小写和引号,查看效果
下面来解释这行代码的意思
Hello, world
再来把代码拆解,看看每一部分的意思
先要说明的是,咱们这个程序窗口内有两个较为抽象的组成部分,输出和输入
其中输出的专业叫法是【标准输出】,用来将运算结果展现给用户,代码里就对应着 System.out
另一个是【标准输入】,用来接受用户输入的数据,代码里用 System.in 表示,后面再讲
System.out 、System.in 代表的这种计算机中的虚拟物体,以后统称之为【对象】
System.out 这个对象是 java 为我们提前准备好的
以后还有一些对象是需要我们自己创建的,后面会逐渐讲到
但是光是拿到 System.out 对象,它并不会显示 Hello, world,我们必须给它下命令,也就是调用对象的功能
"hello, world"
叫做方法参数,你可以替换它为其它问候语
从这行代码中学习了什么呀,要命令计算机执行功能,可以借助【对象】、【方法】和【参数】来完成
刚才的例子中谁是对象?
它代表什么?
谁是方法?
它有什么作用?
对象和方法是 java 提供的(当然以后我们也可以自己创建对象,定义新的方法,此乃后话)
至此为止,这行代码的含义讲解完毕
有同学问:Java的设计者搞个输出都这么麻烦,还分成对象和方法俩概念,把它们合为一个概念不是更简单吗?你看
这种划分更符合现实世界中对事物的认知,例如,你叫住【皮卡丘】,皮卡丘就是待操作的对象,这时候他还不知道要做什么。好,你命令他【趴下】,这个趴下就是方法,是皮卡丘要执行的动作,你再命令他【吃饭】,这个吃饭是另一个方法。可以看到,现实世界都可以这么划分,那么把计算机中的虚拟物体抽象成对象和方法,当然也是顺理成章啦,这符合人类对事物的认知。
因此,不要怕麻烦,以后在 java 世界编写的代码,绝大多数都是这种对象+方法的形式,这称之为面向对象编程,今天我们还不会正式讲解面向对象编程,但同学们要建立起对象、方法的概念
jshell 执行过的代码,在 jshell 退出后下次再想用,就不方便调出来了,正式的代码都会保存在类文件中,类文件的后缀是 .java,也称为 java 源代码
源码结构如下,一份源码中可以包含多个类,每个类中又可以包含多个方法,方法内再包含语句代码
class A {
方法1() {
// 语句代码
}
方法2() {
// 语句代码
}
入口方法() {
// 语句代码
}
}
class B {
}
这里我们关注其中一个特殊方法:入口方法。
入口方法的格式是固定的:
public static void main(String[] args) {
}
以后我们就称它为 main 方法
刚才给大家介绍了源代码的结构
进入 d:
盘
C:\Users\Lenovo>d:
D:\>
运行记事本程序,notepad 是记事本程序名称
D:\>notepad
会打开如下窗口
输入如下代码
class Hello {
public static void main(String[] args) {
System.out.println("hello, world");
}
}
""
内的 hello, world 是我们自由书写,可以是英文、汉字class
后的 Hello 称之为【类名】,一般是英文单词保存文件,选择 文件->保存
或按它对应的快捷键 Ctrl+S
.java
结尾d:
盘,方便待会找到它关闭记事本程序,回到命令提示符程序,输入下面命令
D:\>javac Hello.java
javac
用来把一个 *.java
文件编译成 *.class
文件
*.class
就是前面提到的 class 字节码
本例中,生成的字节码文件为 Hello.class
,可以用 dir
命令查阅如下
输入下面命令
D:\>java Hello
hello, world
java
命令用来把 Hello.class 加载到 JVM 并执行它有的同学编写代码时用了中文
class Hello {
public static void main(String[] args) {
System.out.println("你好");
}
}
编译、执行后输出为
浣犲ソ
发音:huan chai so
原因在于,保存 Hello.java 文件时,选择了 UTF-8 编码,而 javac 编译时采用的是操作系统默认编码 GBK,只要两边编码不一致,就会发生上述的【乱码】问题
保存文件时,选择编码为 ANSI(对于记事本程序 ANSI 其实就是 GBK)
文件保存时,编码仍然是 UTF-8 不变,编译时改用下面的命令明确告诉编译器,编译时别用默认的 GBK,改用 UTF-8
D:\>javac -encoding utf-8 Hello.java
有的同学在执行 javac 时会遇到各种各样的问题,例如
D:\>javac -encoding utf-8 Hello.java
Hello.java:3: 错误: 非法字符: '\uff1b'
System.out.println("你好");
^
1 个错误
遇到这种错误不用怕
Hello.java:3
意思是说,Hello.java 中第 3 行出现错误,这样就可以定位错误位置错误: 非法字符: '\uff1b'
,本例中是因为输入了中文分号 ;
,java 语法要求语句结束符号是英文分号 ;
注释就是对程序代码的一个说明,比如:
强调一点,注释只是对代码的说明,只影响代码阅读,不影响代码的功能。
注释的格式分成了单行注释,多行注释,还有文档注释三种。
写在被注释代码的上方或右方,格式为
// 注释内容
如果注释内容比较长,都写在一行影响阅读,这时候就用多行注释,格式为
/*
注释内容
注释内容
*/
文档注释我们后面讲方法时再详细来讲吧,那现在呢,你只要了解它的格式:格式为:
/**
注释内容
*/
咱们先回忆一下 Java 程序的开发以及运行的流程
所以整个流程是先把源文件变成字节码,再把字节码变成机器码,最终由CPU执行。
那这里大家可以思考这么一个问题,源代码,最终要变成机器码,是不是才能被CPU执行,那为什么我们不直接把Java 源码翻译成机器代码,而是多出了字节码这么一个中间环节呢?
要解释清楚这个问题啊,我们就必须介绍一点历史。在Java语言发明之前呢,有一个比较流行的编程语言叫做c++语言,这个c++语言它就没有中间的环节,可以把源文件直接他翻译成最终的机器码。有同学说这不挺好?但是呢有这么一个问题:不同平台下的这个机器码是不通用的。
举个例子,在windows平台下编写好了c++源代码,可以把它经编译器编译为windows平台的机器码,但是这个机器码呢,只能用在windows平台。想拿到Linux平台下用,用不了。必须在 Linux 平台下,重新编译成Linux机器码。看看这样的缺点
说完了这是c++程序需要多次编译缺点,那咱们再来看看 Java 是怎么解决这个问题的。
Java做的就是加入了字节码这个中间环节,不管是在Linux下的编译还是在windows下的编译,生成的字节码是所有平台都通用的,你在windows平台生成的字节码在Linux平台一样用,反之亦然。可以看到
这就是 java 所宣称的 write once run anywhere,编写一次,到处运行。
字节码虽然带来了这样一些便利,但大家思考一下,有什么问题吗?
对啦,问题就是字节码不是最终的机器码
通过初步对比 c++ 和 java 的不同编译策略,我们学习到一个词 trade-off,权衡。
以后大家如果进入到程序设计的领域,就会明白,所谓设计更多的是在各个方面做出权衡,没有最佳,只有最适合。
俗话说,工欲善其事,必先利其器,要准备好开发工具,才能提高开发效率。如果像开始那样,用记事本编写 java 代码,不仅慢,而且很容易出错。
首先来介绍 IDE 工具,IDE 即 Integrated Development Environment 集成开发环境,能够提供给开发者更好的编码、编译、测试环境
老牌的 IDE 工具 Eclipse,有需要的同学可以根据下图下载尝试(Eclipse Downloads | The Eclipse Foundation)
它的特点是
以上两个工具属于重量级的 IDE 工具,如果想追求轻量级的工具,推荐使用 Visual Studio Code
它的特点有
最后要介绍的一个 IDE 工具叫 Intellij IDEA,号称是最智能的 java 开发工具
新流行的 IDE 工具 IntelliJ IDEA,推荐大家用它(下载 IntelliJ IDEA:JetBrains 功能强大、符合人体工程学的 Java IDE)
它有三个版本
特点
因为我不想花钱,下载的是社区版,另外我选择的这种zip压缩格式的安装包,它使用起来更加简单,解压就能用
使用步骤
选中下载好的压缩文件,解压,这里解压到 d:盘,注意保留后面的文件夹名称
进入d盘,进入解压目录中 bin子目录,找到一个名叫 idea64的程序双击,就可以运行了。
本教程使用 IntelliJ IDEA Community 2022.1(截至本教程开始开发时的最新版本)
首次运行,会弹出下面窗口
意思是是否导入以前的设置(settings),因为我们是第一次安装,所以就选择默认的不导入设置
出现 splash 欢迎页
接下来进入主界面
在学习 idea 之前,先来做几项简单的设置,可以改改颜色主题(Customize -> Color theme
)
如果选择 Sync with OS
,意思就是根据操作系统改变主题(白天亮、夜晚暗)
推荐安装翻译插件,方便阅读文档
创建新项目(Project)
在 IDEA 中【项目】和【模块】用来组织代码
点击【新建项目】(New Project)后出现界面
其中
~
代表当前用户目录
Lenovo
,则 ~
对应目录为 C:\Users\Lenovo
Java
,但要知道 JVM 还能运行其它几种语言:Kotlin
和 Groovy
IntelliJ
,后续我们还会学习 Maven
和 Gradle
Add sample code
,则会生成一个简单的实例代码点击 Create
按钮后
首次进入项目会在右下角显示两个弹窗通知
建议都点一下
因为前面勾选了实例代码,因此 idea 已经帮我们生成了一个简单的源文件,看一下,里面已经包含了类、main 方法和一段 hello world 代码。
如果用 Windows 操作系统,推荐安装 Linux 子系统,即 WSL
wsl --install
Ubuntu 是一种非常流行的 Linux 系统,打开微软应用商店
搜索 ubuntu
选一个版本安装(我用的是 18.04 LTS)
安装完毕后,打开命令提示符,输入 wsl,即可进入 Ubuntu 子系统
这里就可以运行各种 Linux 下的 App 了,当然我们主要用的是命令行下的 App,图形界面的 App 不行
命令提示符这个工具虽然能用,但是界面比较 low,这里给大家介绍一款终端工具:Fluent Terminal,也是在微软应用商店搜索
运行界面如下
好处是同时支持三种终端
做笔记的神器:Snipaste,也是在微软应用商店搜索
笔记神器:Typora,1.0 版本后收费 89 元(可以找找低版本的),当然你也可以选择其它笔记工具
推荐使用 Xmind 工具,免费的功能就够用