java基本知识

代码规范

  1. {}四个空格的缩进
  2. 函数和函数中间应该有一个空行
  3. if和else即使只有一句话,也要加上{}
  4. 类名首个单词的首字母大写StudentManager,一般是名词
  5. 函数首个单词的首字母小写printStudentInfo(),一般以动词开头
  6. 标识符只能有字母数字_$组成(语法上不允许有中文)
  7. 标识符首字母不能是 数字
  8. 不能是Java的关键字,public static
  9. 见名知意 可以缩写 影响到见名知意就不要缩写 尽量使用驼峰命名法
  10. maxAge MaxAge MAX_AGE
  11. 类名首字母必须大写 包名全部小写 变量名首字母小写 常量名全部大写

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、标准类库和开发工具(javacjdbjarjlink 等),开发 Java 程序必须安装 JDK
JRE Java Runtime Environment Java 运行环境,传统上包含 JVM + Java 核心类库;现代 JDK 发行版通常不再单独提供独立 JRE,实际学习和开发直接安装 JDK 即可
JVM Java Virtual Machine Java 虚拟机,负责加载和运行 Java 字节码,实现跨平台

简化理解:JDK = JVM + 标准类库 + 开发工具。早期常说 JDK = JRE + 开发工具,但现代 JDK 已经弱化了单独安装 JRE 的概念。

image-20260725085246505

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数据类型

image-20260725085444016

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

初始值

  1. int类型默认值是:0
  2. double类型默认值是:0.0
  3. boolean类型默认值是:false
  4. String类型默认值是:null
  5. int[]类型默认值是:null
  6. Student[]类型默认值是:null
  7. 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 参与则结果为 long
  • a % 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. 关系运算符

关系运算符用于比较两个值,结果是布尔值 truefalse

运算符 含义 示例 结果
== 等于 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 ? "及格" : "不及格";
// "及格"
上一篇
下一篇