【Java】2026 Java学习路线:语言根基(一)
【Java】基础语法—— 语言根基(一)
Java基础必学知识点 之 语言根基(一)
欢迎来到 Java 世界!在开始写代码之前,我们需要先打好地基。这一篇讲的是基础语法,就像学英语要先学字母和单词一样,这些内容会贯穿你整个Java学习之路。不用怕,我们一步步来。
1. 注释
| 类型 | 语法 | 用途 | 注意 |
|---|---|---|---|
| 单行注释 | // 注释内容 | 解释单行代码 | 不参与编译 |
| 多行注释 | /* 注释内容 */ | 多行说明 | 不支持嵌套 |
| 文档注释 | /** 注释内容 */ | 生成API文档(javadoc) | 支持 @param @return 等标签 |
- 文档注释:
/**
* 拼接问候语
* @param name 姓名,不能为null
* @return 形如 "Hello {name}" 的问候字符串
*/
public String sayHello(String name) {
return "Hello " + name;
}
为什么要写注释?
- 防止自己几周后看不懂自己的代码
- 防止别人乱改你的代码
- 面试官就爱看你有没有注释习惯
- 防止半夜紧急修bug时救命
- 注释是写给“人”看的,编译器会直接忽略。别怕写注释,但别写
// i++; // 让i加1这种废话。
2. 关键字、标识符规范
- 关键字是 Java 语言预先保留的、具有特殊含义的单词,不能用作标识符(类名、方法名、变量名等)。
- 标识符是程序员自定义的名称,用于标识类、接口、方法、变量、常量、参数等。
2.1 完整关键字列表
- 访问控制:
private protected public
- 类、方法、变量声明:
abstract class enum extends final implements interface native new static strictfp synchronized transient volatile
- 流程控制:
break case continue default do else for if instanceof return switch while
- 异常处理:
assert catch finally throw throws try
- 基本类型:
boolean byte char double float int long short
- 其他:
import package super this void
- 未使用但保留:
const goto (不能使用,但会报错)
- 上下文关键字
module requires exports opens uses provides with transitive to open
2.2 标识符合法规则(语法层面)
- 只能由 字母(A-Z, a-z)、数字(0-9)、下划线(_)和美元符号($) 组成。
- 不能以数字开头。
- 不能是关键字或保留字。
- 长度不限,但建议有实际意义。
- Java 对标识符大小写敏感(name 与 Name 不同)。
2.3 命名规范
- 采用骆驼命名法(camelCase)或帕斯卡命名法(PascalCase),并根据类型区分:
| 类型 | 命名风格 | 示例 |
|---|---|---|
| 类/接口 | 帕斯卡(首字母大写) | UserService, Runnable |
| 方法 | 骆驼(首字母小写) | getUserById(), isValid() |
| 变量 | 骆驼(首字母小写) | studentName, count |
| 常量 | 全大写 + 下划线分隔 | MAX_SIZE, DEFAULT_TIMEOUT |
| 包名 | 全小写 | com.example.user.service |
| 泛型类型参数 | 单个大写字母 | T, E, K, V |
3. 变量、常量(final)
- 变量是内存中一个命名的存储单元,用于保存程序运行时可变化的数据。
- 常量是值不可变的变量,一旦赋值后不能被修改。
3.1 简要概括
- 变量:
- 格式:
数据类型 变量名 = 初始值;
- 格式:
int age; // 声明
age = 25; // 赋值
age = 26; // 重新赋值
- 常量——使用final:
- 命名规范:常量全大写
final double PI = 3.14159;
PI = 3.14; // 报错,不能重新赋值
注意:
final 修饰的引用类型变量(如 final List list),不能重新指向另一个对象,但可以修改对象内部状态。初学者容易误解“常量 = 不可变”。
3.2 详细介绍
3.3 速查表
| 场景 | 写法 | 示例 |
|---|---|---|
| 局部变量 | 类型 变量名 = 值; |
int count = 0; |
| 实例变量 | private 类型 变量名; |
private String name; |
| 类变量 | private static 类型 变量名; |
private static int total; |
| 实例常量 | private final 类型 变量名 = 值; |
private final int id = 1; |
| 类常量 | public static final 类型 变量名 = 值; |
public static final double PI = 3.14; |
| 枚举常量 | enum 名 { 值1, 值2 } |
enum Color { RED, BLUE } |
4. 数据类型
4.1 8种基本数据类型
| 类型 | 字节数 | 默认值 | 注意 |
|---|---|---|---|
| byte | 1 | 0 | 适合节省内存,如文件流操作 |
| short | 2 | 0 | 极少使用 |
| int | 4 | 0 | 整型默认字面量,最常用 |
| long | 8 | 0L | 赋值需加 L (如 100L) |
| float | 4 | 0.0f | 赋值需加 f (如 3.14f),精度低 |
| double | 8 | 0.0d | 浮点默认字面量,精度较高 |
| char | 2 | ‘\u0000’ | 单引号,可存汉字 (‘中’) |
| boolean | false | 不能与任何数值类型相互转换,不像 C 语言中 0 代表 false、非0 代表 true。 |
-
注:
在 Java 中,Boolean 类型的情况比较特殊,需要区分基本类型和引用类型:
基本类型boolean:- 官方规范:没有明确定义字节数,其大小依赖于 Java 虚拟机(JVM)的具体实现。
- 实际常见情况:
- 在HotSpot JVM中:单独的boolean变量实际占1字节,boolean数组每个元素占1字节。
- JVM规范允许不同实现有不同的映射策略。
- 在 boolean 数组中:通常被实现为 byte 数组,每个元素占 1 个字节。
引用类型Boolean:
这时是一个对象,封装了boolean值。在常见 64 位 JVM 且指针压缩默认开启的情况下,总大小通常为 16 字节。(大小:对象头 + 数据)
4.2 引用类型
引用类型存储的是对象的内存地址/句柄,不是对象本身。
- 主要包括3种 类、接口、数组。(注:在 Java 中,除了 8 种基本类型以外,其余一切皆是引用类型。)
null是引用类型的特殊值,不属于独立类型。
| 分类 | 说明 | 默认值 | 实例 |
|---|---|---|---|
| 类 | 包括普通类、抽象类、枚举、注解 | null |
String, Object, Thread, enum Color |
| 接口 | 定义行为规范,不能直接实例化 | null |
List, Runnable, Comparable |
| 数组 | 存储同类型数据的容器对象 | null |
int[], String[], Object[][] |
补充
- 局部变量(基本/引用)无默认值,必须手动初始化。
-
存储内容:
引用变量存储的是对象在堆内存中的地址(或句柄),而不是对象本身。 -
存储大小固定:
在同一个 JVM 中,无论是什么类型的引用(一个字符串引用、一个数组引用、一个对象引用),它们变量本身占用的内存大小是固定的(通常为 4 字节或 8 字节,取决于 JVM 是 32 位还是 64 位,以及是否开启指针压缩)。 -
实际的对象数据(如 new Object() 产生的实例)存放在 堆内存(Heap) 中。举例:
String str = new String("Hello");
str 是引用类型变量,存储在栈内存中。
"Hello" 这个字符串对象存储在堆内存中。
str 的值就是堆中那个对象的内存地址。
4.3 包装类与自动装箱/拆箱
核心要点:
- 自动装箱/拆箱:Integer i = 100;(编译器自动调用valueOf)
缓存池:Integer 缓存 -128~127,推荐用 equals() 比较
Integer.parseInt() 与 Integer.valueOf():前者返回 int,后者返回 Integer
5. 类型转换:自动/强制
5.1 自动类型转换(隐式)
-
小范围->大范围(byte→short→int→long→float→double)。
-
自动发生,无信息丢失。
int i = 100;
long l = i; // 自动
float f = l; // 自动但不一定精确
注:
long 转 float 不属于自动安全转换,必定丢失精度
5.2 强制类型转换(显式)
-
大范围 → 小范围,可能丢失精度或溢出。
-
语法:
(目标类型) 值
double d = 9.99;
int i = (int) d; // 结果 9(截断)
byte b = (byte) 130; // 结果 -126(溢出)
- 注意:
布尔类型不参与数值转换。
5.3 类型转换进阶
6. 运算符(7类)
6.1 算术运算符
+ - * / %(取模) ++ --
int a = 10 / 3; // 3
double b = 10 / 3.0; // 3.333...
int c = 10 % 3; // 1
6.2 赋值运算符
= += -= *= /= %=
int x = 5;
x += 3; // 等价 x = x + 3
6.3 比较运算符
== != > < >= <=
结果为 boolean
6.4 逻辑运算符(操作boolean)
&(非短路与) |(非短路或) !(非) ^(异或)
短路:&&(短路与) ||(短路或)
if (a != 0 && 10 / a > 1) { } // 安全,不会除零
6.5 位运算符(操作整数的二进制位)
& | ^ ~ << >> >>>(无符号右移)
int a = 5 & 3; // 1 (0101 & 0011 = 0001)
int b = 2 << 1; // 4
6.6 三目(三元)运算符
条件 ? 表达式1 : 表达式2
int max = (a > b) ? a : b;
6.7 类型比较
instanceof
6.8 优先级(从高到低)
() [] .
++(后缀) --(后缀)
++(前缀) --(前缀) + -(正负号) ! ~
* / %
+ -
<< >> >>>
< > <= >= instanceof
== !=
&
^
|
&&
||
?:
= += -= *= /= %= <<= >>= >>>= &= ^= |=
更多推荐




所有评论(0)