2 常量与变量
关键字¶
Java 中的关键字都是小写,且不能作为标识符(如变量名、类名)使用。关键字用于定义 Java 程序的结构、控制流程、数据类型等核心逻辑,以下是按功能分类的常见关键字:
类别 | 关键字举例 |
---|---|
访问修饰符 | public(公共)、private(私有)、protected(受保护)、default(默认,无关键字) |
数据类型 | int、double、boolean、char、byte、short、long、float、void、class、interface |
流程控制 | if、else、switch、case、default、for、while、do、break、continue、return |
面向对象 | new、this、super、extends(继承)、implements(实现)、static、final、abstract |
异常处理 | try、catch、finally、throw、throws |
其他核心 | package(包)、import(导入)、enum(枚举)、assert(断言)、synchronized(同步) |
注意:true
、false
、null
虽然常用且符合关键字的“小写”特征,但它们是字面量,并非关键字,不过同样不能作为标识符使用。
标识符¶
标识符是 Java 中用于给类、变量、方法、包等命名的符号。
命名规则(硬性要求)¶
必须遵循以下规则,否则会编译报错:
- 由字母(A-Z、a-z)、数字(0-9)、下划线(
_
)、美元符号($
)组成。 - 不能以数字开头(例如
123Name
是非法的,Name123
是合法的)。 - 不能使用 Java 关键字和字面量(例如
class
、int
、true
不能作为标识符)。 - 区分大小写(例如
Name
和name
是两个不同的标识符)。 - 无长度限制,但建议简洁易懂(过长的标识符会降低代码可读性)。
命名规范(软性建议,行业通用)¶
遵循规范可提高代码的可读性和团队协作效率,主流规范如下:
- 类名/接口名:采用“帕斯卡命名法(大驼峰命名法)”,每个单词首字母大写,其余小写。
示例:
HelloWorld
(类名)、UserService
(接口名)。 - 变量名/方法名:采用“(小)驼峰命名法”,首字母小写,后续单词首字母大写。
示例:
userAge
(变量名)、calculateSum
(方法名)。 - 常量名:全部大写,多个单词之间用下划线(
_
)分隔。 示例:MAX_SCORE
、DB_URL
。 - 包名:全部小写,多层级包用小数点(
.
)分隔,通常以公司域名倒写开头(避免命名冲突)。 示例:com.company.project.util
(工具类包)、com.company.project.entity
(实体类包)。
基本数据类型¶
Java 是强类型语言,变量在使用前必须声明数据类型,且数据类型一旦确定,不可随意更改。Java 数据类型分为两大类:基本数据类型和引用数据类型。
基本数据类型(8种,直接存储值)¶
基本数据类型是 Java 内置的基础类型,直接存储数据本身,而非内存地址,分为四类八种:
类型分类 | 数据类型 | 占用字节 | 取值范围 | 默认值 | 适用场景 |
---|---|---|---|---|---|
整数型 | byte | 1 | -128 ~ 127 | 0 | 存储小范围整数(如状态码) |
short | 2 | -32768 ~ 32767 | 0 | 存储中等范围整数 | |
int | 4 | -2^31 ~ 2^31 - 1(约 -21亿 ~ 21亿) | 0 | 默认整数类型(最常用) | |
long | 8 | -2^63 ~ 2^63 - 1(约 -9e18 ~ 9e18) | 0L | 存储大范围整数(需加 L 后缀) | |
浮点型 | float | 4 | 负数:-3.402823E+38到-1.401298E-45 正数: 1.401298E-45到3.402823E+38(精度约 6-7 位小数) | 0.0F | 单精度浮点数(需加 F 后缀) |
double | 8 | 约 ±1.8e308(精度约 15-17 位小数) | 0.0D | 默认浮点类型(最常用) | |
字符型 | char | 2 | '\u0000'(空格) ~ '\uffff'(65535个字符) | '\u0000' | 存储单个字符(用单引号包裹) |
布尔型 | boolean | 1(理论) | true(真)、false(假) | false | 表示逻辑判断结果 |
在 java 中整数默认是 int 类型,浮点数默认是 double 类型。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
引用数据类型(存储内存地址)¶
引用数据类型不直接存储数据,而是存储数据在内存中的“地址”,通过地址引用实际数据。常见的引用数据类型包括:
- 类(Class):如 String
(字符串类)、Integer
(包装类)、自定义类(如 User
)。
- 接口(Interface):如 List
、Map
。
- 数组(Array):如 int[]
(整数数组)、String[]
(字符串数组)。
- 枚举(Enum)、注解(Annotation)等。
示例代码:
1 2 3 4 5 6 7 8 9 |
|
基本类型与引用类型的核心区别¶
对比维度 | 基本数据类型 | 引用数据类型 |
---|---|---|
存储内容 | 直接存储数据值 | 存储对象的内存地址 |
内存分配位置 | 栈内存(Stack) | 对象存堆内存(Heap),引用存栈内存 |
默认值 | 有明确默认值(如 int 为 0) | 默认值为 null(表示无引用对象) |
赋值方式 | 赋值时直接拷贝值 | 赋值时拷贝的是内存地址(两个引用指向同一对象) |
常量¶
常量是指在程序运行过程中,值不能被修改的量。Java 中定义常量需使用 final
关键字修饰,通常结合命名规范(全部大写)使用。
常量的分类¶
根据作用范围,常量可分为以下两类:
字面值常量¶
直接在代码中写死的值,无需定义,可直接使用,对应基本数据类型和字符串类型:
- 整数常量:如 123
(int 类型)、100L
(long 类型)、0xFF
(十六进制,对应 255)。
- 浮点常量:如 3.14
(double 类型)、2.5F
(float 类型)。
- 字符常量:如 'a'
、'5'
、'中'
。
- 布尔常量:true
、false
。
- 字符串常量:如 "Hello"
、"Java 基础"
(注意用双引号包裹)。
- 空常量:null
(仅引用类型可用,表示无对象引用)。
自定义常量¶
使用 final
关键字定义的常量,一旦赋值,后续无法修改。语法格式:
1 2 |
|
变量¶
变量是程序运行过程中,值可以被修改的量。Java 作为强类型语言,变量必须先声明(指定数据类型),再赋值(赋予具体值),最后才能使用。
变量的声明与赋值¶
声明变量¶
语法:数据类型 变量名;
(仅声明类型,未赋值时,变量为默认值,但局部变量无默认值,必须手动赋值后才能使用)。
赋值变量¶
语法:变量名 = 值;
(赋值符号 =
表示将右侧的值赋给左侧的变量)。
声明并赋值¶
语法:数据类型 变量名 = 值;
(一步完成,简洁高效)。
使用变量时的注意事项¶
- 在同一对花括号中,变量名不能重复。
- 变量在使用之前,必须初始化(赋值)。
- 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太 大可能超出int范围。
- 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是 double, double的取值范围是大于float的,类型不兼容。
类型转换¶
由于 Java 是强类型语言,不同数据类型之间的赋值需要进行“类型转换”。类型转换分为两种:自动类型转换(隐式转换)和强制类型转换(显式转换)。
自动类型转换(隐式转换)¶
当两种数据类型兼容,且目标类型的“取值范围”大于源类型时,Java 会自动完成转换,无需手动干预。
转换规则¶
- 整数型之间:
byte → short → int → long
(范围从小到大,自动转换)。 - 整数型转浮点型:
int → float → double
、long → double
(浮点型范围大于整数型)。 - 字符型转整数型:
char → int
(char 本质是 Unicode 编码值,可自动转为 int)。
核心原则:小范围类型 → 大范围类型(避免数据丢失)。
强制类型转换(显式转换)¶
当两种数据类型兼容,但目标类型的“取值范围”小于源类型时,需要手动使用“强制转换符”(目标类型)
进行转换。
转换规则¶
- 语法:
目标类型 变量名 = (目标类型) 源变量;
- 适用场景:
long → int
、double → int
、float → byte
等(大范围类型 → 小范围类型)。 - 风险:可能导致“数据溢出”或“精度丢失”(因为小范围类型无法完全容纳大范围类型的值)。
不兼容的类型转换(无法转换)¶
与 C/C++ 不同,Java 不允许将
boolean
类型转换为整型,也不允许整型转换为boolean
类型。
若两种数据类型完全不兼容(如 String
与 int
、boolean
与 int
),则无法进行自动或强制转换,否则编译报错。
boolean
类型不能与其他基本数据类型进行转换。
错误示例:
1 2 3 4 5 6 7 |
|