环境部署
计算机组成
-
硬件
主要组成部分:中央处理器(CPU)、内存(RAM)、存储设备(硬盘)、主板、显卡(GPU)、电源、输入输出设备
-
软件
系统软件:Windows、Linux、IOS、Android等等
应用软件:微信、QQ、office办公软件
JDK-JRE-JVM
组件 | 全称 | 描述 |
---|---|---|
JDK | Java开发工具包 (Java Development Kit) | 包含JRE和开发工具(如编译器javac),用于开发和编译Java程序。 |
JRE | Java运行时环境 (Java Runtime Environment) | 包含JVM和核心类库,用于运行Java程序,但不包含开发工具。 |
JVM | Java虚拟机 (Java Virtual Machine) | 负责执行Java字节码,实现跨平台特性。 |
JAVA程序执行流程
编写Java源代码 (.java) → 由javac编译为字节码 (.class) →使用java命令运行class文件 → 垃圾回收(GC)
字节码 (.class)文件会被加载的内存中的方法区,此外,方法区还会存储静态变量和常量池(Java 8以前)
环境变量
- 配置path:让javac和java命令可以在全局使用
- 配置classpath:让class文件可以在全局被找到
第一个Java程序
// 仪式感要有
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
关键字
类别 | 关键字 |
---|---|
访问控制 | public , private , protected |
类、方法和变量修饰符 | class , interface , abstract , final , static , synchronized , volatile , transient , native , strictfp |
程序控制 | if , else , switch , case , default , while , do , for , break , continue , return |
异常处理 | try , catch , finally , throw , throws |
包和导入 | package , import |
基本类型 | boolean , byte , char , short , int , long , float , double , void |
其他 | new , this , super , instanceof , enum , assert |
未使用的保留字 | goto , const |
加上
goto
和const
一共52个
注释
-
单行注释:
// ……
-
多行注释:
/*
……
*/
-
文档注释:通常用于生成 API 文档
/**
*……
*……
*……
*/
标识符命名
命名规则
- 由字母、数字、下划线和美元符号组成;
- 不能由数字开头;
- 不能是关键字;
命名规范
- 类名与接口名:大驼峰
- 方法名与变量名:小驼峰
- 常量名:全大写、下划线分割
- 包名:全小写、不同层级用点隔开(包其实就是文件夹,用点隔开即为文件路径)
常量
常量类型 | 定义 | 示例 |
---|---|---|
字面常量 | 直接写在代码中的固定值。 | 10:整数常量,表示整数值 10。 |
3.14:浮点数常量,表示浮点数值 3.14。 | ||
'A':字符常量,表示字符 A。 | ||
"Hello":字符串常量,表示字符串 "Hello"。 | ||
true:布尔常量。 | ||
false:布尔常量。 | ||
null:空常量。 | ||
final 常量 |
通过 final 关键字定义的变量,其值在初始化后不能被修改。 |
final int MAX_VALUE = 100;:定义一个整型常量 MAX_VALUE ,值为 100。 |
final double PI = 3.14;:定义一个双精度浮点型常量 PI ,值为 3.14。 |
||
类常量 | 在类中定义的 static final 常量,属于类而不是对象。 |
public static final int MAX_VALUE = 100;:在类中定义一个整型常量 MAX_VALUE ,值为 100。 |
接口常量 | 在接口中定义的常量,默认是 public static final 的。 |
interface Constants { public static final String DEFAULT_NAME = "Unknown"; public static final int MAX_SIZE = 100; }:在接口中定义字符串常量 DEFAULT_NAME 和整型常量 MAX_SIZE 。 |
系统常量 | Java 标准库中预定义的常量。 | Integer.MAX_VALUE:int 类型的最大值,值为 2147483647。 |
Math.PI:圆周率 π 的值,约为 3.141592653589793。 | ||
Math.E:自然对数的底数 e 的值,约为 2.718281828459045。 | ||
自定义常量 | 开发者根据需求自定义的常量。 | public static final String APP_NAME = "MyApp";:定义一个字符串常量 APP_NAME ,值为 "MyApp"。 |
变量
基本格式
数据类型 变量名 = 初始化值;
变量的分类
变量类型 | 描述 | 特点 | 默认值 | 作用域 | 使用场景 |
---|---|---|---|---|---|
局部变量 | 定义在方法或代码块内部的变量。 | 必须显式初始化。生命周期限于方法或代码块内。无访问修饰符。 | 无默认值,必须显式初始化,否则编译错误。 | 仅在定义它的方法或代码块内有效。 | 用于存储方法中的临时数据或计算结果。 |
实例变量 | 定义在类中方法外的变量,属于对象的一部分。 | 每个对象有独立的实例变量存储空间。可以使用访问修饰符(如 public 、private )。 |
默认值由 Java 分配(如 0 、0.0 、false 、null )。 |
在类的所有非静态方法中有效。 | 用于描述对象的属性或状态。 |
静态变量 | 使用 static 关键字定义的变量,属于类而不是对象。 |
所有对象共享一块存储空间(方法区)。可以使用访问修饰符。常用于常量或共享数据。 | 默认值由 Java 分配(如 0 、0.0 、false 、null )。 |
在整个类中有效,可通过类名直接访问。 | 用于定义常量或共享数据(如计数器、配置值)。 |
数据类型
基本数据类型
整数类型
基本数据类型 | 所占字节数 | 比特位数 | 范围 |
---|---|---|---|
byte |
1 | 8 | -2⁷ 到 2⁷-1(-128 到 127) |
short |
2 | 16 | -2¹⁵ 到 2¹⁵-1 |
int |
4 | 32 | -2³¹ 到 2³¹-1 |
long |
8 | 64 | -2⁶³ 到 2⁶³-1 |
long类型变量在定义的时候要在结尾加L
小数类型
基本数据类型 | 所占字节数 | 比特位数 |
---|---|---|
float |
4 | 32 |
double |
8 | 64 |
float类型变量在定义的时候要在结尾加F
布尔类型
true false
字符类型
char:占2个字节,共16位
char类型的数值范围是 0 到 65535(2¹⁶ - 1),用于表示 Unicode 字符,每个字符对应一个唯一的整数值。
数字字母-字符对应关系
字符范围 | 编码值(十进制范围) |
---|---|
0 到 9 |
48-57 |
A 到 Z |
65-90 |
a 到 z |
97-122 |
基本数据类型的运算
-
自动类型提升
当一个表达式中包含多个不同类型的数据时,表达式的最终数据类型会自动提升为参与运算的数据中范围最大、精度最高的数据类型。这是为了确保计算过程中不会丢失数据或精度。
- 数值范围小的与范围大做运算,会自动提升为范围大的;
- byte/short/char做运算,包括自己与自己,都会自动提升为int。
- 小类型转大类型不会产生精度损失
范围大小:byte\short\char<int<long<float<double
-
强制类型转换
- 使用强转符进行转换:()
- 强制类型转换可能会产生精度损失:目标类型的范围无法表示源类型的所有值
向下转型:子类类型 变量名 = (子类类型) 父类引用
引用数据类型
-
数组
-
类
-
接口
后续单独进行总结
运算符
常见运算符一览表
运算符类别及说明 | 运算符 | 描述 |
---|---|---|
算术运算符:用于基本的数学运算。 | + | 加法 |
- | 减法 | |
*** | 乘法 | |
/ | 除法 | |
% | 取模(取余) | |
++ | 自增(前缀或后缀) | |
-- | 自减(前缀或后缀) | |
关系运算符:用于比较两个值的大小或相等性。 | == | 等于 |
!= | 不等于 | |
> | 大于 | |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 | |
逻辑运算符:用于布尔值的逻辑运算。 | && | 逻辑与(短路与) |
|| | 逻辑或(短路或) | |
! | 逻辑非 | |
位运算符:用于对整数类型的二进制位进行操作。 | & | 按位与 |
| | 按位或 | |
^ | 按位异或 | |
~ | 按位取反 | |
<< | 左移 | |
>> | 右移(带符号) | |
>>> | 无符号右移 | |
赋值运算符:用于将值赋给变量。 | = | 简单赋值 |
+= | 加后赋值 | |
-= | 减后赋值 | |
*= | 乘后赋值 | |
/= | 除后赋值 | |
%= | 取模后赋值 | |
&= | 按位与后赋值 | |
|= | 按位或后赋值 | |
^= | 按位异或后赋值 | |
<<= | 左移后赋值 | |
>>= | 右移后赋值 | |
>>>= | 无符号右移后赋值 | |
条件运算符:用于简化条件判断。 | ? : | 三元运算符(条件 ? 表达式1 : 表达式2) |
instanceof:用于检查对象的类型。 | instanceof | 检查对象是否为某个类的实例 |
注意事项
- 大多数运算符(如算术、关系、逻辑、位运算等)适用于基本数据类型
- 某些运算符(如
=
、==
、!=
、+
、instanceof
等)可以用于引用类型 - 当其他类型与字符串使用
+
运算符连接时,Java 会自动将非字符串类型转换为字符串,转换规则如下:- 基本数据类型(如
int
、double
、boolean
等)会直接转换为对应的字符串形式 - 对象会调用其
toString()
方法转换为字符串
- 基本数据类型(如
方法
基本格式
没有返回值,返回值类型部分就写
void
修饰符 返回类型 方法名(参数列表) {
// 方法体
return 返回值;
}
方法的修饰符
修饰符类型 | 修饰符 | 描述 |
---|---|---|
访问修饰符 | public |
方法可以被任何类访问。 |
protected |
方法可以被同一包内的类以及子类访问。 | |
默认(无修饰符) | 方法可以被同一包内的类访问。 | |
private |
方法只能被定义它的类访问。 | |
非访问修饰符 | static |
方法属于类,而不是类的实例。可以通过类名直接调用。 |
final |
方法不能被子类重写。 | |
abstract |
方法没有方法体,必须在子类中实现。 | |
synchronized |
方法在同一时间只能被一个线程访问,用于多线程同步。 |
方法的分类
方法类别 | 描述 |
---|---|
实例方法 | 属于对象,需要通过对象实例调用。可以访问实例变量和其他实例方法。 |
静态方法 | 属于类,通过类名直接调用。不能访问实例变量或实例方法。 |
构造方法 | 用于创建对象时初始化对象的状态。方法名与类名相同,无返回类型。 |
重载方法 | 在同一个类中,方法名相同但参数列表不同。用于实现类似功能但参数不同的操作。 |
重写方法 | 子类重新定义父类或接口的方法。用于实现多态。 |
抽象方法 | 没有方法体,必须在子类中实现。 |
final 方法 | 不能被子类重写。 |
同步方法 | 使用 synchronized 修饰,用于多线程同步。 |
语句结构
种类 | 定义 | 名称 | 格式 | 使用场景 |
---|---|---|---|---|
顺序结构 | 程序按照代码的书写顺序依次执行。 | 语句1; 语句2; 语句3; | 默认的程序执行方式,适用于简单的线性逻辑。 | |
选择结构 | 根据条件判断选择执行不同的代码块。 | if | if (条件) { 代码块 } | 单一条件判断,条件为真时执行代码块。 |
if-else | if (条件) { 代码块1 } else { 代码块2 } | 双条件判断,条件为真时执行代码块1,否则执行代码块2。 | ||
if-else if-else | if (条件1) { 代码块1 } else if (条件2) { 代码块2 } else { 代码块3 } | 多条件判断,依次检查条件,满足哪个条件就执行对应的代码块。 | ||
switch | switch (变量) { case 值1: 代码块1 break; case 值2: 代码块2 break; default: 默认代码块 } | 多分支选择,根据变量的值跳转到对应的 case 分支执行代码块。 | ||
三元运算符 | 条件 ? 表达式1 : 表达式2 | 简化双条件判断,适用于简单的条件赋值或返回。 | ||
循环结构 | 循环结构会重复执行某段代码,直到条件不再满足(即条件为 false )为止。 |
for | for (初始化; 条件; 更新) { 代码块 } | 适用于已知循环次数的场景。 |
while | while (条件) { 代码块 } | 适用于未知循环次数,先判断条件再执行代码块。 | ||
do-while | do { 代码块 } while (条件); | 适用于未知循环次数,先执行代码块再判断条件。 | ||
增强 for 循环 | for (数据类型 变量 : 集合) { 代码块 } | 适用于遍历数组或集合。 | ||
控制语句 | 用于改变程序的执行流程。 | break | break; | 跳出循环或 switch 语句。 |
continue | continue; | 跳过当前循环的剩余部分,进入下一次循环。 | ||
return | return 返回值; | 从方法中返回值并结束方法。 | ||
异常处理 | 用于处理程序运行时的异常,确保程序的健壮性。 | try-catch | try { 代码块 } catch (异常类型 e) { 处理异常 } | 捕获并处理异常,防止程序崩溃。 |
try-catch-finally | try { 代码块 } catch (异常类型 e) { 处理异常 } finally { 最终代码块 } | 无论是否发生异常,finally 块中的代码都会执行。 | ||
throw | throw new 异常类型("错误信息"); | 手动抛出异常,用于自定义异常处理逻辑。 | ||
throws | 返回类型 方法名() throws 异常类型 { 代码块 } | 声明方法可能抛出的异常,调用者需处理或继续抛出。 |