Java – #1 – 语言基础知识

3,792字

,大约需要

16–24 分钟

这个笔记假定你有一定的编程语言基础,不过只需要非常少量的基础。如果你大致明白什么是程序语言,能简单使用一些 if/else 语句就属于“有一定基础”的范畴了。

1.1.1 – Java 简介

一、历史

它是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言,这个项目的领导者是詹姆斯·高斯林(James Gosling),他被誉为传统意义上的Java 之父”

这个项目最初名为 Oak 语言,其设计目标是用于数字电视、机顶盒等消费类电子产品的开发,模仿了 C++。就在这时,互联网开始兴起,Oak 这种“一次编写、随处运行”的特点仿佛是为浏览器量身定制,于是团队决定转型。在注册商标时,他们发现 Oak 名称已被占用。在喝咖啡时,他们决定将这门语言改名为 Java,这是印尼爪哇岛咖啡的名称(因此 Java 的图标是一杯咖啡)。

如今,Java 已经被广泛应用于后端开发、Android 开发、大数据技术、科学计算和中间件等领域。

二、主要版本

1998 年起,Java 语言被分为三个版本:

  • Java SE – Java 的标准版,用于桌面应用的开发,是另外两个版本的基础;
  • Java ME – Java 的小型版,用于嵌入式电子设备或小型移动设备的开发;
  • Java EE – Java 的企业版,用于 Web 开发;

三、Java 是一门混合型语言

为了兼顾执行效率跨平台特性,Java 在运行时:

  1. 先将 .java 后缀的 Java 源文件通过 javac 编译器编译为 .class 后缀的字节码(Bytecode)文件;
  2. JVM(Java 虚拟机)加载字节码文件,解释器立即开始逐行解释和执行字节码;
  3. 当 JVM 发现热点代码时,JIT(Just-In-Time)编译器将其编译为本地机器码并缓存,提高运行速度。

1.1.2 – Java 环境配置

一、环境配置

在 Windows 系统下配置 Java:

  1. 下载 JDK(Java 开发工具包),地址:https://www.oracle.com/java/technologies/downloads/
  2. 添加环境变量 JAVA_HOME,值为 JDK 所在路径;
  3. 在环境变量 PATH 中新增 %JAVA_HOME%\\bin

检验 JDK 是否成功配置:

二、尝试编译一个 Java 程序

在 CMD 中使用 javac 命令进行编译,再使用 java 命令即可运行。例如这个 Java 程序:

Java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
Java
$ javac HelloWorld.java
$ java HelloWorld
Hello World

使用 javac 命令后,虽然没有任何提示,但是如果成功编译、没有错误的话,会出现一个名为 HelloWorld.class 的文件。

需要注意的地方:

  • Java 是大小写敏感的;
  • 类名中的每个单词的首字母都应大写(大驼峰法);方法名都应以小写开头,从第二个单词开始首字母大写(小驼峰法);
  • 源文件名必须与类名完全相同;
  • 所有的 Java 程序都由 public static void main(String[] args) 方法(主方法)开始执行。

三、输入和输出的方法

在 Java 中使用 Scanner 类的方法获取用户输入:

Java
//1. 导包
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        //2. 创建对象
        Scanner sc = new Scanner(System.in);
        //3. 接收数据
        int i = sc.nextInt();
        
        System.out.println(i);
    }
}

在 Java 中使用 System 类的方法进行输出:

Java
System.out.println("Hello World");

在知道了以上内容之后你就可以用去打 ACM 了。

1.1.3 – JVM、JRE、JDK……?

一、JVM (Java Virtual Machine)

所有的 Java 程序都运行在 JVM 上,JVM 是实现“一次编译、随处运行”的关键。

二、JRE (Java Runtime Environment)

Java 运行时环境,是运行 Java 程序所必须的最小集合,仅包含 JVM + 核心类库(核心类库:如字符串处理、I/O 库等)。

三、JDK (Java Development Kit)

Java 开发工具包,包含了 JVM + 核心类库 + 开发工具(开发工具:如 javac 编译器、jdb 调试器、javadoc 文档生成器、jhat 内存分析工具……)。


1.2.1 – 注释

Java 注释有三个类型:单行注释、多行注释和文档注释。单行注释以 // 开头;多行注释以 /* 开头,*/ 结尾;文档注释以 /** 开头,*/ 结尾,通常出现在类、方法、字段等的声明之前,用于生成代码文档,这种注释可以被 Javadoc 等工具提取并生成 API 文档。

文档注释支持识别很多标签,标签以 @ 开头,例如:

@param说明一个方法的参数@param parameter-name explanation
@return说明返回值类型@return explanation

1.2.2 – 关键字和字面量

一、关键字

关键字就是被 Java 赋予了特定含义的单词,关键字的字母全部小写。例如 class 关键字,用于创建、定义一个类。类是 Java 最基本的组成单元。

二、字面量

字面量(Literal)指的是源代码中直接写出来的、固定不变的值。例如 103.14 或者 "Hello"

字面量有一些常用的前缀和后缀,用于标识特定的数据。

类型前缀/后缀示例说明
Long后缀 L ,也可以小写,但易数字 1 混淆100000000L必须加 L,否则视为 int
Float后缀 F ,也可以小写3.1415926F必须加 F,否则视为 double
十六进制数前缀 0x0xFF对应十进制 255
八进制数前缀 0017对应十进制 15
二进制数前缀 0b0b101对应十进制 5
科学计数法字母 e1.2e2即 $1.2 \times 10^2 = 120$

补充知识:

  • 为提高代码可读性,Java 7 以后允许在数字字面量中间插入下划线,例如 int money = 1_000_000; ,这等同于 1000000
  • 对于 Java 15 以后的版本,可以用三个双引号标记一个“文本块”,三引号内可以填入任意字符,包含空格和换行符;
  • 与 C 语言一样,Java 支持基本的转义字符。

1.2.3 – 变量和数据类型

一、变量

Java 中变量的声明、赋值和使用的方式与 C 语言完全一致。变量的命名规则:

  • 使用有意义的名字: 变量名应该具有清晰的含义,能够准确地反映变量的用途。避免使用单个字符或无意义的缩写;
  • 驼峰命名法(Camel Case): 在变量名中使用驼峰命名法,即将每个单词的首字母大写,除了第一个单词外,其余单词的首字母都采用大写形式。例如:myVariableName
  • 避免关键字区分大小写不以数字开头

二、数据类型

Java 有两大数据类型:基本数据类型 (Primitive Types) 和引用数据类型 (Reference Types)。

引用数据类型不直接存储具体数值,而是存储对象的地址(内存引用)。引用本身(例如类、接口、数组、枚举等)位于栈内存,其指向的对象存储在堆内存中的一块区域,引用类型的赋值是地址拷贝

内置(基本)数据类型由 Java 预先定义,直接存储具体数值,存储在栈内存中。与引用数据类型相比,基本数据类型的访问速度快,占用内存小。基本类型的赋值是值拷贝。

类型分类数据类型大小 (位)示例
整数型byte, short, int, long8, 16, 32, 64int age = 25;
浮点型float, double32, 64double price = 19.99;
字符型char16 (Unicode)char grade = 'A';
布尔型boolean1 (理论上)boolean isJavaFun = true;

在类型转换时的大小关系是:double > float > long > int > short > byte;