注释
注释是写在代码中的说明,用来解释某段代码的用途,方便自己或其他人阅读。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(),看看这些值在终端中的输出效果:
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");
}
}运行结果:
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 表示水平制表符,常用于分隔文本,让终端输出更容易对齐。
public class Test1 {
public static void main(String[] args) {
System.out.println("name\tage");
System.out.println("tom\t23");
}
}运行结果:
PS D:\Code\Java> javac .\Test1.java
PS D:\Code\Java> java Test1
name age
tom 23在这个例子中,age 和 23 被对齐到了相同的列。\t 会将输出位置移动到下一个制表位,具体间隔取决于终端设置,并不是每次都插入固定数量的空格。
变量
变量的基本用法
当某个数值需要反复使用,或者在程序运行过程中会发生变化时,就可以用变量来保存。变量可以理解为一个有名字、用于存储特定类型数据的位置。
Java 中定义并初始化变量的基本格式是:
数据类型 变量名 = 数据值;例如 int a = 10;,其中 int 是数据类型,a 是变量名,10 是初始值,= 表示把右边的值赋给左边的变量。
实际写到程序中:
public class Test1 {
public static void main(String[] args) {
/*
* 定义变量:数据类型 变量名 =数据值;
* 数据类型:限定了变量能存储数据的类型
* int(整数)double(小数)
* 变量名:就是存储空间的名字
* 作用:方便以后使用
* 数据值:真正存在变量中的数据
* 等号:赋值。把右边的数据赋值给左边的变量
*/
int a = 10;
System.out.println(a);// 10
}
}运行后,终端会打印变量 a 当前保存的值:
PS D:\Code\Java> javac .\Test1.java
PS D:\Code\Java> java Test1
10变量的计算与修改
变量不仅可以用来打印,还可以参与计算,也可以在后续重新赋值。
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、1 | 0b 或 0B 开头 | 0b011 |
| 八进制 | 0~7 | 以 0 开头 | 013 |
| 十进制 | 0~9 | 不需要特殊前缀 | 16 |
| 十六进制 | 0~9、a~f | 0x 或 0X 开头 | 0xabc |
使用方式如下:
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);//十六进制
}
}终端输出:
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。
下面定义八种基本类型的变量,并分别打印它们的值:
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);
}
}终端输出:
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 就属于引用类型,用来表示字符串。
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 类。
import java.util.Scanner;Scanner 位于 java.util 包中,因此需要在类定义前写好导入语句。
第二步:创建 Scanner 对象。
Scanner sc = new Scanner(System.in);这里的 System.in 表示标准输入,sc 是创建的 Scanner 对象的变量名,可以根据需要改成其他名字。
第三步:读取输入。
int i = sc.nextInt();nextInt() 用来读取一个整数,并将结果保存到变量 i 中。读取其他数据类型时,Scanner 还有不同的方法,例如读取一行字符串可以使用 nextLine()。
把这三步放进一个完整的程序:
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);
}
}运行后,程序会先打印提示信息,等待我们输入第一个整数。输入完成并回车,再输入第二个整数,最后输出两数之和。
例如:
PS D:\Code\Java> javac .\Test1.java
PS D:\Code\Java> java Test1
请输入数字a
10
请输入数字b
20
a和b的和是:30这里使用的 nextInt() 专门读取整数。如果输入的内容无法解析为整数,例如输入一段普通文字,程序就会抛出 InputMismatchException。如果需要读取整行文字,可以使用 nextLine()。
把 Scanner 与变量、基本数据类型结合起来,就能让程序接收输入、进行计算,再输出结果。
聊两句
评论审核后显示有疑问、补充,或者想交流一下,都可以写在这里。
评论区将在滚动到这里时加载。