注释

注释是写在代码中的说明,用来解释某段代码的用途,方便自己或其他人阅读。Java 常见的注释有三种:

  • 单行注释:以 // 开头,注释当前行后面的内容。
  • 多行注释:以 /* 开始,以 */ 结束,可以跨越多行。
  • 文档注释:以 /** 开始、以 */ 结束,通常用于为类和方法编写文档,后面用到时再了解。

下面用一段代码演示单行注释和多行注释:

java
public class Test1 {
    // main方法是程序的主入口
    public static void main(String[] args) {
        /*
        调用内置输出方法
        在终端打印helloworld
        */
        System.out.println("helloworld");
    }
}

注释不会作为程序指令执行。需要注意,/* ... */ 形式的多行注释不能直接嵌套;如果在块注释内部再次写入 */,外层注释就可能提前结束。

关键字

关键字是 Java 语言中具有特定含义的单词,不能直接用来给变量、类或方法命名。

例如刚才的 public、class、static、void 都是关键字。大多数代码编辑器会用不同颜色突出显示这些关键字。Java 区分大小写,因此写代码时需要注意拼写。

字面量

字面量就是直接写在代码里的固定值。例如数字 666、字符串 "hello"、布尔值 true,都可以作为字面量使用。

字面量类型说明举例
整数字面量不带小数点的整数值666、-88
浮点数字面量表示小数的数值13.14、-5.21
字符串字面量用双引号括起来的字符序列"HelloWorld"、"你好,Java"
字符字面量用单引号括起来的一个字符'A'、'0'、'我'
布尔字面量表示真或假true、false
空字面量表示空引用null

这里的 null 是一种特殊的空字面量,不属于 Java 的八种基本数据类型,常用于表示某个引用暂时没有指向对象。

可以使用 System.out.println(),看看这些值在终端中的输出效果:

java
public class Test1 {
    public static void main(String[] args) {
        //整数
        System.out.println("666");
        //小数
        System.out.println(3.14);
        //字符串
        System.out.println("hello");
        //字符
        System.out.println('A');
        //布尔
        System.out.println(true);
        System.out.println(false);
        //null,不能直接打印,会报错
        //只能打印字符串“null”
        System.out.println("null");
    }
}

运行结果:

Shell
PS D:\Code\Java> javac .\Test1.java 
PS D:\Code\Java> java Test1        
666
3.14
hello
A
true
false
null

虽然 System.out.println("666") 和 System.out.println(666) 在终端中都会显示 666,但前者传入的是字符串,后者传入的是整数。输出看起来相同,不代表数据类型相同。

示例末尾的 "null" 同样是一个字符串,只是它打印出的文本恰好为 null。真正的空字面量 null 不带引号。这里如果直接写 System.out.println(null),还会因为方法重载产生歧义而无法编译。

转义字符:\t

Java 字符串里还有一些以反斜杠开头的转义字符。例如 \t 表示水平制表符,常用于分隔文本,让终端输出更容易对齐。

java
public class Test1 {
    public static void main(String[] args) {
        System.out.println("name\tage");
        System.out.println("tom\t23");
    }
}

运行结果:

Shell
PS D:\Code\Java> javac .\Test1.java
PS D:\Code\Java> java Test1        
name    age
tom     23

在这个例子中,age 和 23 被对齐到了相同的列。\t 会将输出位置移动到下一个制表位,具体间隔取决于终端设置,并不是每次都插入固定数量的空格。

变量

变量的基本用法

当某个数值需要反复使用,或者在程序运行过程中会发生变化时,就可以用变量来保存。变量可以理解为一个有名字、用于存储特定类型数据的位置。

Java 中定义并初始化变量的基本格式是:

java
数据类型 变量名 = 数据值;

例如 int a = 10;,其中 int 是数据类型,a 是变量名,10 是初始值,= 表示把右边的值赋给左边的变量。

实际写到程序中:

java
public class Test1 {
    public static void main(String[] args) {
        /*
         * 定义变量:数据类型 变量名 =数据值;
         * 数据类型:限定了变量能存储数据的类型
         * int(整数)double(小数)
         * 变量名:就是存储空间的名字
         * 作用:方便以后使用
         * 数据值:真正存在变量中的数据
         * 等号:赋值。把右边的数据赋值给左边的变量
         */
        int a = 10;
        System.out.println(a);// 10
    }
}

运行后,终端会打印变量 a 当前保存的值:

Shell
PS D:\Code\Java> javac .\Test1.java
PS D:\Code\Java> java Test1        
10

变量的计算与修改

变量不仅可以用来打印,还可以参与计算,也可以在后续重新赋值。

java
public class Test1 {
    public static void main(String[] args) {
        //基本用法,定义变量之后输出
        int a = 10;
        System.out.println(a);// 10
        //变量参与计算
        int b = 20;
        int c = a + b;
        System.out.println(c);
        //修改变量存储的值
        a = 100;
        System.out.println(a);
    }
}

在这段代码里,a + b 的计算结果被赋值给 c,随后又通过 a = 100; 修改了 a 的值。

int a = 10; 是声明并初始化变量,后面的 a = 100; 则是为已有变量重新赋值,不需要再次写 int。

使用变量时还需要记住几点:

  • 一个普通变量在同一时刻保存一个值,重新赋值会替换原来的值。
  • 在同一个作用域中,不能重复声明同名的局部变量。
  • 同一条语句可以声明多个同类型变量,例如 int a = 1, b = 2;。
  • 局部变量必须在使用前完成赋值,否则会产生编译错误。

此外,变量还有作用域:它决定变量在哪些代码范围内可以被访问。定义在方法内部的局部变量,通常只在相应的代码块内有效。

计算机中的数据存储

日常生活中最常用的是十进制,使用数字 0 到 9,逢十进一。计算机底层使用二进制来表示和处理数据,二进制只有 0 和 1,逢二进一。

编程时还经常接触八进制和十六进制。在 Java 中,不同进制的整数字面量可以通过前缀来区分:

进制使用的数字Java 中的写法示例
二进制0、10b 或 0B 开头0b011
八进制0~7以 0 开头013
十进制0~9不需要特殊前缀16
十六进制0~9、a~f0x 或 0X 开头0xabc

使用方式如下:

java
public class Test1 {
    public static void main(String[] args) {
        System.out.println(0b011);// 二进制
        System.out.println(16);// 十进制
        System.out.println(013);// 八进制
        System.out.println(0xabc);//十六进制
    }
}

终端输出:

Shell
PS D:\Code\Java> javac .\Test1.java
PS D:\Code\Java> java Test1        
3
16
11
2748

虽然源代码中的数字分别采用了不同进制,但 System.out.println() 默认会以十进制形式输出整数值,所以最终看到的是 3、16、11 和 2748。

进制只是同一个数值的不同写法。例如,二进制 0b011 与十进制 3 表示的数值相同。

除了数字,计算机中的文字、图片、声音和视频,最终也都需要通过二进制数据来表示和存储。

数据类型

Java 的数据类型分为基本数据类型和引用数据类型。基本数据类型可以直接保存数值、字符或布尔值,引用数据类型则用于表示对象、数组等数据。

基本数据类型

Java 有八种基本数据类型:byte、short、int、long、float、double、char 和 boolean。

按照整数、浮点数、字符和布尔值分类,可以整理成下面这张表。表中 B 表示字节(Byte),例如 4 B 就是 4 字节。

类型分类 关键字 取值范围或说明 字节数
整数 byte -128 ~ 127 1 B
short -32,768 ~ 32,767 2 B
int -2,147,483,648 ~ 2,147,483,647 4 B
long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 8 B
浮点数 float 最大有限值约 ±3.4028235 × 1038 4 B
double 最大有限值约 ±1.7976931348623157 × 10308 8 B
字符 char 0 ~ 65,535(一个 UTF-16 代码单元) 2 B
布尔 boolean 只有 true、false 两个值 未规定

表中的字节数表示各基本类型值本身的大小,不等于对象或变量在实际运行时的全部内存开销。boolean 只有 true 和 false 两种取值,但 Java 规范没有规定它在所有存储场景下必须占多少字节。

float 和 double 的数值精度有限,表中列出的是最大有限值的大致大小。它们还可以表示正负无穷大和 NaN(不是数字)。

定义基本类型变量时,还需要留意两个字面量后缀:

  • 较大的整数字面量要加 L 或 l 后缀,显式表示 long。普通整数字面量默认按 int 处理,因此当数值超出 int 范围时,不能省略这个后缀。通常更推荐大写 L,避免与数字 1 混淆。
  • 带小数点的字面量默认是 double。如果想把 3.14 这样的值写成 float 字面量,需要加 F 或 f 后缀,例如 3.14f。

下面定义八种基本类型的变量,并分别打印它们的值:

java
public class Test1 {
    public static void main(String[] args) {
        //byte
        byte a = 10;
        System.out.println(a);
        //short
        short b = 100;
        System.out.println(b);
        //int
        int c = 200;
        System.out.println(c);
        //long,定义long类型的要加一个L(大小写都可以)后缀
        //否则会报错。
        long d = 99999999999L;
        System.out.println(d);
        //float
        float e = 3.14f;
        System.out.println(e);
        //double
        double f=20.12;
        System.out.println(f);
        //char
        char g = 'a';
        System.out.println(g);
        //boolean
        boolean h = true;
        System.out.println(h);
    }
}

终端输出:

Shell
PS D:\Code\Java> javac .\Test1.java 
PS D:\Code\Java> java Test1        
10
100
200
99999999999
3.14
20.12
a
true

引用数据类型

除了八种基本数据类型,Java 还有引用数据类型。例如我们经常使用的 String 就属于引用类型,用来表示字符串。

java
String name = "Java";

String 属于类类型,数组也属于引用类型。后续学习类和对象时,就能进一步理解引用的含义。

标识符

标识符就是程序中为类、方法、变量等起的名字。例如 int a = 10; 中的 a 就是一个标识符。

Java 标识符的常见规则包括:

  • 可以使用字母、数字、下划线 _、美元符号 $ 等符合 Java 标识符规则的字符,也支持部分 Unicode 字符。
  • 不能以数字开头。
  • 不能使用 Java 关键字作为名字,true、false 和 null 等保留字面量也不能用作标识符。
  • 区分大小写,例如 Abc 和 abc 是两个不同的名字。

例如 abc 是合法的变量名,1ab 则不合法。

实际开发中,变量名最好能表达数据的含义。例如 age 比 a 更容易让人理解。虽然 $ 可以出现在标识符中,但一般不需要特意使用。

键盘录入

前面的示例都是直接在代码里给变量赋值。如果希望程序运行时再输入数据,就可以使用 Java 提供的 Scanner 类。

例如,我们想输入两个整数 a 和 b,再计算它们的和。可以分成三步:

第一步:导入 Scanner 类。

java
import java.util.Scanner;

Scanner 位于 java.util 包中,因此需要在类定义前写好导入语句。

第二步:创建 Scanner 对象。

java
Scanner sc = new Scanner(System.in);

这里的 System.in 表示标准输入,sc 是创建的 Scanner 对象的变量名,可以根据需要改成其他名字。

第三步:读取输入。

java
int i = sc.nextInt();

nextInt() 用来读取一个整数,并将结果保存到变量 i 中。读取其他数据类型时,Scanner 还有不同的方法,例如读取一行字符串可以使用 nextLine()。

把这三步放进一个完整的程序:

java
import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入数字a");
        int a = sc.nextInt();
        System.out.println("请输入数字b");
        int b = sc.nextInt();
        int c = a + b;
        System.out.println("a和b的和是:" + c);
    }
}

运行后,程序会先打印提示信息,等待我们输入第一个整数。输入完成并回车,再输入第二个整数,最后输出两数之和。

例如:

Shell
PS D:\Code\Java> javac .\Test1.java 
PS D:\Code\Java> java Test1                                                                      
请输入数字a
10
请输入数字b                           
20
a和b的和是:30

这里使用的 nextInt() 专门读取整数。如果输入的内容无法解析为整数,例如输入一段普通文字,程序就会抛出 InputMismatchException。如果需要读取整行文字,可以使用 nextLine()。

把 Scanner 与变量、基本数据类型结合起来,就能让程序接收输入、进行计算,再输出结果。

谢谢你读到这里。 ✧

聊两句

评论审核后显示

有疑问、补充,或者想交流一下,都可以写在这里。

评论区将在滚动到这里时加载。