[Java 基础]变量,装东西的盒子
Java 是一门强类型的编程语言,它对变量的数据类型有严格的限定。在定义变量时必须声明变量的类型,在为变量赋值时必须赋予和变量同一种类型的值,否则程序会报错。变量必须先声明后使用。
在 Java 中,变量可以分为三类:
- 局部变量(Local Variables):在方法或代码块中定义,只能在该范围内使用。
- 成员变量(Instance Variables):属于某个对象,在类中定义,不需要手动初始化。
- 类变量(静态变量)(Static Variables):使用
static
关键字修饰,属于类本身,所有对象共享。
如何声明变量?按照下面这种格式:
类型 变量名 = 值/变量
比如:
int a = 1;
boolean isBigHandsomeGuy = true;
在 Java 中,变量的数据类型分为两种,即基本数据类型和引用数据类型。
Java 数据类型概览:
数据类型 | 分类 | 数据范围 | 默认值 | 代码示例 | 注意点 |
---|---|---|---|---|---|
byte | 整数类型 | -128 到 127 | 0 | byte b = 100; | 占 1 字节,适用于小范围整数,包装类型是 Byte |
short | 整数类型 | -32,768 到 32,767 | 0 | short s = 30000; | 占 2 字节,使用较少,包装类型是 Short |
int | 整数类型 | -2^31 到 2^31-1 | 0 | int i = 100000; | 默认整数类型,占 4 字节,包装类型是 Integer |
long | 整数类型 | -2^63 到 2^63-1 | 0L | long l = 10000000000L; | 需要 L 后缀,占 8 字节,包装类型是 Long |
float | 浮点类型 | 约 ±3.4E-38 到 ±3.4E+38 | 0.0f | float f = 3.14f; | 需要 f 后缀,占 4 字节,精度有限,包装类型是 Float |
double | 浮点类型 | 约 ±1.7E-308 到 ±1.7E+308 | 0.0d | double d = 3.1415926; | 默认浮点类型,占 8 字节,精度较高,包装类型是 Double |
char | 字符类型 | 单个 Unicode 字符 | '\u0000' (空字符) | char c = 'A'; | 占 2 字节,可存储 Unicode 字符,包装类似是 Character |
boolean | 布尔类型 | true 或 false | false | boolean flag = true; | 占 1 字节,不能转换为整数,包装类型是 Boolean |
String | 引用类型 | - | null | String str = "Hello"; | 不是基本数据类型,属于 class |
数组 | 引用类型 | - | null | int[] arr = {1,2,3}; | 数组长度不可变,默认 null |
这里类型就好比是装东西的盒子,要学会根据不同的东西使用不同的类型(不同的东西装进适合的盒子中):
int age = 30; // 存储年龄
int numberOfStudents = 150; // 存储学生数量
double pi = 3.14159265359; // 存储圆周率
float temperature = 25.5f; // 存储温度
boolean isBigHandsomeGuy = true;
既然变量有类型,那不同的类型能不能互相转换?答案是能。
类型转换有两种方式,一种是自动转换,另一种是强制转换。见名知意,自动转换是自动的,不需要你显示的指明,强制转换不是自然的,需要你强制的指定。
分别举一个例子你就很清楚的知道了:
byte b = 1;
int c = b;
int b = 4;
byte c = (byte) b;
你可能比较好奇,什么情况下我要使用自动转换,什么情况下要使用强制转换呢?很好理解,如果两种类型兼容,并且是从小范围转为大范围,就能自动转换,否则就要手动转换。
有一点需要注意的是,强制类型转换可能会导致精度丢失(就好比你非要将大瓶子塞到小瓶子中,就把小瓶子塞爆了)。
double d = 9.99;
int num = (int) d; // double 强制转换为 int,精度丢失
System.out.println(num); // 输出 9
变量,在于变,如果不想让某个变量的值在程序运行过程中不会改变,可以使用 final
关键字声明它为常量:
final double PI = 3.14159;
:::danger
常量一旦赋值,就不能修改,否则会编译错误。
:::
- 全部字母大写 (All Uppercase Letters): 常量名中的所有字母都应使用大写形式。
- 单词间使用下划线分隔 (Underscore Between Words): 如果常量名由多个单词组成,单词之间应使用下划线
_
来连接。
比如:
final int MAX_LOGIN_ATTEMPTS = 5;
final double PI_VALUE = 3.14159;
final String DEFAULT_ERROR_MESSAGE = "An unknown error occurred.";
final long REFRESH_INTERVAL_SECONDS = 60L;
使用变量也要遵循规范,定义好的命名,可以参考:https://www.yuque.com/u22375957/adzviy/nd5w31pqevvm2za3
规则 (必须遵守):
- 只能包含字母、数字、下划线 (
_
) 或美元符号 ($
)。 - 不能以数字开头。
- 不能使用 Java 的关键字(如
int
,class
,public
等)作为变量名。 - 变量名是大小写敏感的 (
age
和Age
是两个不同的变量)。
规范 (推荐遵守,提高可读性):
- 见名知意: 变量名应清晰地表达其存储内容的含义(例如,用
userName
而不是un
或x
)。 - 驼峰命名法 (Camel Case):
- 变量名和方法名: 第一个单词首字母小写,后续单词首字母大写 (e.g.,
firstName
,calculateTotalScore
)。 - 类名: 每个单词的首字母都大写 (e.g.,
Student
,HelloWorld
)。
- 变量名和方法名: 第一个单词首字母小写,后续单词首字母大写 (e.g.,
- 避免使用单个字母作为变量名(除了在循环等临时场景下,如
i
,j
,k
),除非含义非常明确。 - 避免使用中文或特殊符号作为变量名(还真有中文编程:https://www.eyuyan.com/index.htm),虽然 Java 理论上支持,但通常极不推荐(太 low,显得很不专业)。
有惊喜:
char c1 = '\u6211';
char c2 = '\u559c';
char c3 = '\u6b22';
char c4 = '\u4f60';System.out.println("" + c1 + c2 + c3 + c4);