认识Java

学习Java SE,使用VSCode而不是IDEA。IDEA固然方便,但享受方便的前提是知道它为什么方便。

Java的执行

一般而言,编程语言分为两种:编译型和解释型。

  • 编译型语言:编译器直接将源代码编译成计算机可以直接运行的可执行文件,如C、C++。

    image-20221008150220877

  • 解释型语言:解释器将源代码翻译为解释器可以看懂的指令,然后由解释器去一条条执行,如Python、Bash。

    image-20221008150141605

两种类型各有优缺点:

  1. 编译型语言的执行效率高,解释型语言的执行效率低。
  2. 编译型语言编译后的可执行文件不能跨系统运行,只能重新编译,而且不一定能在另一个系统编译成功,可移植性低;解释型语言一般没有这个问题。
  3. 解释型语言代码的编写一般比编译型语言更方便。

而Java则融合了编译型和解释型两种特性:

Java编译器首先将Java源代码编译为.class结尾的二进制文件,但是这个二进制文件不能直接由操作系统执行,而需要交给JVM虚拟机(Java解释器)执行。

image-20221008151147181

知道了Java代码的执行过程,就能明白下面的Hello World是如何执行的了。

image-20221008152350009

编译的命令是javac,后跟源代码的路径;解释的命令是java,后跟.class文件的路径(用./分隔)。

Java版本

和Java相关的东西有很多:Java SE、Java EE、JDK、JRE……下面对这些名词一一解释。

Java SE与Java EE?

SE即Standard Edition,标准版。它是Java技术的核心和基础。现在学习Java语法其实就是学习Java SE。

EE即Enterprise Edition,企业版。它提供了一些核心技术用于项目开发,是学习Java SE后的学习方向。

JDK与JRE?

JRE即Java Runtime Environment,它是Java的运行环境。不同操作系统有不同的JRE。

JDK即Java Development Kit,它包含了JRE,还提供了我们开发时要用到的一些工具。

Java的各种版本?

Java的版本很多,没几个月就会发行一个新版本。而Java8是目前最广泛使用的一个版本,所以使用Java8来进行Java的学习。

image-20221008155747503

安装后检查Java8环境:

image-20221008155311730

Java语法基础

基本结构

之前的Hello World代码如下:

1
2
3
4
5
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}

文件名为Main.java,代码中的类名和文件名保持一致。用于类名的规范是首字母大写+驼峰命名法,所以Java文件的命名也应该是这样(和其他语言不同)。

public static void main(String[] args){}是固定格式,类似于C语言中的主函数,是程序执行的入口。没有它的话能编译通过但是不能由解释器运行,只能被导入。实际上,它更类似于Python中的if __name__ == "__main__":

image-20221008162827728

public static void main(String[] args){}可以通过main+回车快速打出。

image-20221008163132007

基本类型

整型

在Java中,整数类型包括以下几个:

  • byte 字节型 (8个bit,也就是1个字节)范围:-128~+127

  • short 短整形(16个bit,也就是2个字节)范围:-32768~+32767

  • int 整形(32个bit,也就是4个字节)最常用的类型:-2147483648 ~ +2147483647

  • long 长整形(64个bit,也就是8个字节)范围:-9223372036854775808 ~ +9223372036854775807

使用整型需要注意以下几点:

  1. 不能由高精度转化为低精度。如将int型变量赋值给byteshort都会报错,即使没有超过它们的表示范围:

    image-20221008164304950

  2. 纯数字的大小不能超过int,否则后面需要加L

    image-20221008164718352

浮点型

浮点型包括单精度和双精度两种:

  • float 单精度浮点型 (32bit,4字节)

  • double 双精度浮点型(64bit,8字节)

和整型一样,使用浮点型同样需要注意类似的两点:

  1. 不能由double赋值到float,否则会在编译时报错。
  2. 纯数字默认为double,如果需要表示float需要在小数后面加fF

image-20221008165305702

字符类型

Java使用char来表示一个字符。但和C语言不同,Java中一个字符(char)占16个bit,也就是2字节。这是因为Java的字符使用Unicode字符集,这样可以把中文作为一个字符。而C语言中需要两个字符才能表示一个汉字。

image-20221008165948653

String表示字符串。和之前的基本数据类型不同,String实际上是一个类,所以它包含了很多字符串的方法。之后在面向对象中深入学习这些方法。

布尔类型

布尔类型用boolean表示,包括truefalse两种。

运算符

Java的运算符和C语言差不多,支持++这样的单目运算符、+=这样的符合运算符以及关系运算符、逻辑运算符等。

需要注意下面几点:

  1. 使用强制类型转换可以解决之前高精度向低精度赋值报错的问题。
  2. 字符串可以使用+进行拼接。
  3. 低精度与高精度的数进行运算会隐式类型转换为高精度。
  4. 不支持像Python那样的连续判断: 1<a<2,而应该像C语言那样使用逻辑运算符:a>1 && a<2

流程控制

Java的选择和循环都和C++中的很相似。

选择结构

最常用的还是if条件判断。其格式为:

1
2
if (条件) 
判断成功执行的代码或代码块;

除此if之外,还有else ifelse关键字。

1
2
3
4
5
6
7
8
9
public class Main {
public static void main(String[] args) {
int score = 85;
if(score>85) System.out.println("优秀");
else if(score>75) System.out.println("良好");
else if(score>60) System.out.println("一般");
else System.out.println("不及格");
}
}

循环结构

Java中的for循环也是C语言中的for(;;;)风格:

1
2
3
4
5
6
7
public class Main {
public static void main(String[] args) {
for(int a = 1; a < 5; a++) {
System.out.println("a="+a);
}
}
}

while循环也没什么说的:

1
2
3
4
5
6
7
8
public class Main {
public static void main(String[] args) {
int a = 1;
while(a < 5) {
System.out.println("a="+(a++));
}
}
}