代码规范
- {}四个空格的缩进
- 函数和函数中间应该有一个空行
- if和else即使只有一句话,也要加上{}
- 类名首个单词的首字母大写StudentManager,一般是名词
- 函数首个单词的首字母小写printStudentInfo(),一般以动词开头
- 标识符只能有字母数字_$组成(语法上不允许有中文)
- 标识符首字母不能是 数字
- 不能是Java的关键字,public static
- 见名知意 可以缩写 影响到见名知意就不要缩写 尽量使用驼峰命名法
- maxAge MaxAge MAX_AGE
- 类名首字母必须大写 包名全部小写 变量名首字母小写 常量名全部大写
Java 的发展历程
| 版本 | 发布时间 | 重要特性 |
|---|---|---|
| JDK 1.0 | 1996 年 | 核心 API、AWT、Applet |
| JDK 1.1 | 1997 年 | 内部类、JDBC、JavaBeans |
| JDK 1.2 | 1998 年 | Swing、集合框架、JIT 编译器 |
| JDK 1.3 | 2000 年 | HotSpot JVM、JNDI |
| JDK 1.4 | 2002 年 | NIO、正则表达式、XML 处理 |
| JDK 5 | 2004 年 | 泛型、注解、枚举、自动装箱、for-each |
| JDK 6 | 2006 年 | 脚本引擎支持、JDBC 4.0 |
| JDK 7 | 2011 年 | try-with-resources、菱形语法、NIO.2 |
| JDK 8 | 2014 年 | Lambda 表达式、Stream API、Optional、Date-Time API |
| JDK 9 | 2017 年 | 模块系统、JShell、HTTP Client |
| JDK 10 | 2018 年 | 局部变量类型推断(var) |
| JDK 11 | 2018 年 | HTTP Client 标准化、var 支持 lambda、ZGC |
| JDK 12 | 2019 年 | Switch 表达式预览、Shenandoah GC |
| JDK 13 | 2019 年 | 文本块预览 |
| JDK 14 | 2020 年 | 记录类型(Record)预览、NullPointerException 改进 |
| JDK 15 | 2020 年 | 文本块标准化、密封类预览 |
| JDK 16 | 2021 年 | 记录类型标准化、模式匹配 instanceof |
| JDK 17 | 2021 年 | 密封类标准化、模式匹配 switch、虚拟线程预览 |
| JDK 21 | 2023 年 | 虚拟线程标准化、模式匹配 switch 标准化、Sequenced Collections,LTS 版本 |
| JDK 22 | 2024 年 | 未命名变量和模式、外部函数与内存 API 标准化、结构化并发继续预览 |
| JDK 23 | 2024 年 | Markdown 文档注释、原始类型模式预览、模块导入声明预览 |
| JDK 24 | 2025 年 | Stream Gatherers 标准化、类文件 API、禁用 Security Manager、虚拟线程同步优化 |
| JDK 25 | 2025 年 | Scoped Values 标准化、模块导入声明、紧凑源文件与实例 main 方法、灵活构造器、稳定值预览 |
java运行环境
| 概念 | 全称 | 作用 |
|---|---|---|
| JDK | Java Development Kit | Java 开发工具包,包含 JVM、标准类库和开发工具(javac、jdb、jar、jlink 等),开发 Java 程序必须安装 JDK |
| JRE | Java Runtime Environment | Java 运行环境,传统上包含 JVM + Java 核心类库;现代 JDK 发行版通常不再单独提供独立 JRE,实际学习和开发直接安装 JDK 即可 |
| JVM | Java Virtual Machine | Java 虚拟机,负责加载和运行 Java 字节码,实现跨平台 |
简化理解:JDK = JVM + 标准类库 + 开发工具。早期常说 JDK = JRE + 开发工具,但现代 JDK 已经弱化了单独安装 JRE 的概念。

java关键字
Java 关键字列表:
| 分类 | 关键字 |
|---|---|
| 访问控制 | public, private, protected |
| 类方法接口 | class, interface, abstract, enum, extends, implements |
| 流程控制 | if, else, switch, case, default, while, do, for, break, continue, return |
| 异常处理 | try, catch, finally, throw, throws |
| 修饰符 | static, final, abstract, native, synchronized, volatile, transient |
| 数据类型 | byte, short, int, long, float, double, boolean, char, void |
| 引用 | this, super, new |
| 其他 | import, package, return, instanceof, assert |
注意:
true,false,null是字面值,不是关键字,但也不能用作标识符。
java数据类型

Java 有 8 种基本数据类型,分为四类:
| 分类 | 类型 | 字节数 | 取值范围 | 默认值 |
|---|---|---|---|---|
| 整数 | byte |
1 字节 | -128 ~ 127 | (byte)0 |
| 整数 | short |
2 字节 | -32768 ~ 32767 | (short)0 |
| 整数 | int |
4 字节 | -2^31 ~ 2^31 – 1 | 0 |
| 整数 | long |
8 字节 | -2^63 ~ 2^63 – 1 | 0L |
| 浮点 | float |
4 字节 | 单精度浮点数 | 0.0f |
| 浮点 | double |
8 字节 | 双精度浮点数 | 0.0d |
| 字符 | char |
2 字节 | 0 ~ 65535,Unicode 字符 可以存储汉字 | u0000 |
| 布尔 | boolean |
– | true 或 false | false |
初始值
- int类型默认值是:0
- double类型默认值是:0.0
- boolean类型默认值是:false
- String类型默认值是:null
- int[]类型默认值是:null
- Student[]类型默认值是:null
- boolean[]类型默认值是:null
所有引用数据类型的默认值都是null
int[] a = new int[5]数组初始化,初始值为0,不为null
String [] a = new String[5]数组初始化,初始值为null,不为0
自动类型转换(隐式)
范围小的类型可以自动转换为范围大的类型:
flowchart LR
byte --> short --> int --> long --> float --> double
char --> int
示例:
int a = 100;
double b = a; // int 自动转 double,b = 100.0
byte x = 10;
int y = x; // byte 自动转 int
规则:范围小 → 范围大,自动完成,不需要手动写代码。
强制类型转换(显式)
把范围大的类型转换为范围小的类型,需要强制转换,可能会丢失精度:
double a = 3.14;
int b = (int) a; // 强制转换,b = 3,小数部分丢失
int x = 257;
byte y = (byte) x; // y = 1,因为 byte 范围只有 -128~127,溢出了
语法:(目标类型) 变量名
byte -> short(char) -> int -> long -> float -> double
char类型可以当成一个整数来使用
引用数据类型的转换
只有具备继承 / 实现关系的引用类型才能转换,毫无关联的两个类不能强制转换。 引用类型转换不改变对象本身,只是改变引用变量的编译类型。
| 类型 | 语法 | 是否自动 | 安全性 | 作用 |
|---|---|---|---|---|
| 向上转型 | 父类 引用 = new 子类 () | 自动 | 永远安全 | 实现多态 |
| 向下转型 | 子类 引用 = (子类) 父类引用 | 强制 | 可能抛异常 | 调用子类独有方法 |
class Animal{}
class Dog extends Animal{}
// 向上转型,自动完成,不需要强转
Animal a = new Dog();
Animal a = new Dog();
Dog dog = (Dog) a; //向下强制转型
dog.guard(); // 现在可以调用子类独有方法
变量 instanceof 类型:判断变量运行类型是不是该类或其子类。
if(a instanceof Dog){
Dog dog = (Dog) a;
dog.guard();
}
没有继承关系,不能强制转换
String s = (String)new Integer(100);
// 编译可以通过,但运行抛出ClassCastException
Java运算符
Java 运算符分为以下几类:算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符等。
1. 算术运算符
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 5 + 3 |
8 |
- |
减法 | 5 - 3 |
2 |
* |
乘法 | 5 * 3 |
15 |
/ |
除法 | 5 / 2 |
2(整数除法) |
/ |
除法 | 5.0 / 2 |
2.5 |
% |
取模(求余数) | 5 % 2 |
1 |
++ |
自增 | int a=1; a++; |
a 变成 2 |
-- |
自减 | int a=1; a--; |
a 变成 0 |
- 整数间的数学运算结果 一定是
int类型;有long参与则结果为longa % b结果的正负取决于a的正负
1.1 整数除法
整数除法会截断小数部分,只保留整数:
int a = 5 / 2;
System.out.println(a); // 输出 2,不是 2.5
// 如果想要小数结果,需要至少一个操作数是浮点数
double b = 5.0 / 2;
System.out.println(b); // 输出 2.5
1.2 自增自减
自增自减分为前置和后置:
- 前置:
++a先自增,再使用 - 后置:
a++先使用,再自增
示例:
int a = 1;
int b = ++a;
System.out.println("a = " + a + ", b = " + b);
// 输出:a = 2, b = 2
a = 1;
b = a++;
System.out.println("a = " + a + ", b = " + b);
// 输出:a = 2, b = 1
++ 在前面就是先加后用,在后面就是先用后加。
示例练习:
int i = 5;
int j = i++ + ++i;
// 答案:i = 7, j = 5 + 7 = 12
1.3 字符串拼接
+ 还可以用于字符串拼接,只要有一个操作数是字符串,就是字符串拼接:
String s1 = "Hello" + "World"; // "HelloWorld"
String s2 = "Age: " + 18; // "Age: 18"
String s3 = 10 + 20 + "score"; // "30score"
String s4 = "score" + 10 + 20; // "score1020"
2. 赋值运算符
2.1 基本赋值
= 就是赋值运算符,将右边的值赋给左边的变量。
int a = 10; // 将 10 赋值给 a
可以连续赋值:
int a = b = c = 10; // 三个变量都赋值为 10
2.2 复合赋值运算符
| 运算符 | 等价写法 |
|---|---|
+= |
a += b 等价于 a = a + b |
-= |
a -= b 等价于 a = a - b |
*= |
a *= b 等价于 a = a * b |
/= |
a /= b 等价于 a = a / b |
%= |
a %= b 等价于 a = a % b |
示例:
int a = 10;
a += 5; // a = 15
a *= 2; // a = 30
3. 关系运算符
关系运算符用于比较两个值,结果是布尔值 true 或 false。
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
== |
等于 | 10 == 5 |
false |
!= |
不等于 | 10 != 5 |
true |
> |
大于 | 10 > 5 |
true |
< |
小于 | 10 < 5 |
false |
>= |
大于等于 | 10 >= 10 |
true |
<= |
小于等于 | 10 <= 5 |
false |
示例:
int a = 10;
int b = 20;
boolean result = a > b; // result = false
==比较基本数据类型时比较的是值
==比较引用数据类型时比较的是地址
4. 逻辑运算符
逻辑运算符用于连接多个布尔表达式,结果仍然是布尔值。
| 运算符 | 含义 | 说明 |
|---|---|---|
&& |
短路与 | 所有条件都为 true,结果才为 true |
|| |
短路或 | 只要有一个条件为 true,结果就为 true |
! |
逻辑非 | 取反,true 变 false,false 变 true |
& |
不短路与 | 同 &&,但不会短路 |
| |
不短路或 | 同 ||,但不会短路 |
💡 推荐:大部分情况使用
&&和||,短路可以提高性能。
短路特性
// 短路与:左边已经是 false,右边不会执行
int a = 10;
boolean result = (a > 20) && (++a < 20);
System.out.println(a); // a 还是 10,因为 ++a 没有执行
// 短路或:左边已经是 true,右边不会执行
int b = 10;
boolean result2 = (b < 20) || (++b < 20);
System.out.println(b); // b 还是 10,因为 ++b 没有执行
5. 位运算符
位运算符直接对二进制位进行运算,用于底层编程、性能优化。
| 运算符 | 含义 |
|---|---|
& |
按位与 |
| |
按位或 |
^ |
按位异或 |
~ |
按位取反 |
<< |
左移 |
>> |
右移(带符号) |
>>> |
无符号右移 |
常用技巧:
// 左移一位相当于乘以 2
int a = 5 << 1; // 5 * 2 = 10
// 右移一位相当于除以 2
int b = 10 >> 1; // 10 / 2 = 5
// 异或可以用来交换两个数(不需要临时变量)
int x = 10, y = 20;
x = x ^ y;
y = x ^ y;
x = x ^ y;
// 现在 x = 20, y = 10
位运算常见于权限标志、二进制协议、压缩存储、图形处理等场景。
示例:用位标志表示权限:
int READ = 1; // 0001
int WRITE = 2; // 0010
int EXECUTE = 4; // 0100
int permission = READ | WRITE;
boolean canRead = (permission & READ) != 0;
boolean canExecute = (permission & EXECUTE) != 0;
6. 条件运算符
条件运算符也叫三目运算符,是 if-else 的简化写法:
语法:
条件表达式 ? 表达式1 : 表达式2
执行逻辑:如果条件为 true,返回表达式 1 的值,否则返回表达式 2 的值。
示例:
// 求两个数中的较大值
int a = 10;
int b = 20;
int max = a > b ? a : b;
// max = 20
// 判断成绩是否及格
int score = 85;
String result = score >= 60 ? "及格" : "不及格";
// "及格"