Java基础快速入门: 类型转换、键盘录入与标识符
内容纲要
- 类型转换
1.1 隐式转换(自动类型提升)
1.2 强制类型转换
1.3 类型转换案例分析 - 键盘录入
- 标识符
- 小结
类型转换
在 Java 中,不同数据类型的变量进行运算或赋值时,经常涉及 类型转换。转换分为两类:
- 隐式转换:自动发生,小范围类型 → 大范围类型
- 强制转换:手动干预,大范围类型 → 小范围类型
1 ) 隐式转换(自动类型提升)
概念: 将取值范围小的数据类型赋值给取值范围大的数据类型,可以直接赋值,系统会自动完成类型提升
基本规则:“小的给大的,可以直接给”
int a = 10;
double b = a; // int → double,自动提升
System.out.println(b); // 输出 10.0
这里 int(4 字节)赋值给 double(8 字节)时,10 被自动提升为 10.0,整个过程对开发者透明,称为 隐式转换
数据类型从小到大级别(内存占用与表示范围):
byte → short / char → int → long → float → double
注意:float 虽只占 4 字节,但能表示的数据范围比 long(8 字节)更大,因为浮点数采用科学记数法存储,牺牲精度换取范围
运算细节:当一个小的数据类型与大的数据类型一起运算时,小的会先提升为大的类型,然后进行运算
int a = 10;
double b = 12.3;
double c = a + b; // a 提升为 10.0,运算后结果 22.3
特殊规则:byte、short、char 这三种类型在参与运算时,无论是否存在更高类型,都会先提升为 int,然后再计算
byte a = 10;
byte b = 20;
int c = a + b; // 正确,结果为 int
// byte c = a + b; // 编译错误,a+b 结果为 int,不能直接赋值给 byte
2 )强制类型转换
概念:将取值范围大的数据或变量赋值给取值范围小的类型时,不能直接赋值,必须使用 强制转换语法
格式:目标类型 变量名 = (目标类型) 值/变量;
int a = 10;
byte b = (byte) a; // 强制转换:int → byte
精度损失问题:当大类型数据超出小类型范围,或浮点数转整数时,会发生精度丢失(直接截断,不是四舍五入)
double num1 = 12.9;
int num2 = (int) num1; // 结果为 12,小数点后全部丢失
比喻:将 8 升桶里的水倒入 4 升桶,如果超过容量就会洒出——精度损失
建议:在程序中尽量减少强制转换的使用,避免不可预期的数据损失
3 )类型转换案例分析
请判断以下代码是否存在问题,如有请指出并修正
byte a = 3;
byte b = 4;
byte c = a + b;
byte d = 3 + 4;
错误定位:第三行 byte c = a + b; 会出现编译错误
错误原因 :a 和 b 均为 byte 类型,根据特殊规则,运算时会先各自提升为 int,然后执行 int + int,结果也是 int。把 int 赋值给 byte(大 → 小),属于非法操作,需要强制转换。
修正方案 :先将 a + b 整体用括号提升优先级,再对运算结果进行强转:
byte c = (byte) (a + b); // 正确
为什么不报错:byte d = 3 + 4; ?
- Java 存在 常量优化机制。编译时,3 + 4 会被立即计算为 7,然后判断 7 是否在 byte 范围内(-128~127):
- 在范围内 → 编译通过,直接赋值。
- 超出范围 → 编译失败。
byte d = 300 + 4; // 编译错误,304 超出 byte 范围
同理,long num = 1234567890; 不加 L 可能会报错,因为整数常量默认是 int;如果数值超出 int 范围,必须加 L 后缀:
long big = 12345678901L; // 必须加 L
键盘录入
为什么需要键盘录入?
- 之前我们赋值的变量都是直接在代码中写死的,例如 int a = 10;
- 若想让数据由用户在运行时输入,就需要使用 Scanner 实现键盘录入,使程序更灵活
实现步骤(固定模式,初学者可先记住):
1 ) 导包:必须在类定义之上
import java.util.Scanner;
2 ) 创建 Scanner 对象
Scanner sc = new Scanner(System.in);
其中 sc 是变量名,可以自定义,其余为固定格式。
3 ) 接收数据
int a = sc.nextInt(); // 接收整数
变量名 a 可自定义。
4 )完整示例:
import java.util.Scanner;
public class Demo1Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个整数:");
int a = sc.nextInt();
System.out.println("你输入的是:" + a);
}
}
当程序运行到 sc.nextInt() 时,会暂停并等待用户在控制台输入数据,按下回车后,输入值被赋值给变量 a,后续可自由使用。
标识符
1 ) 什么是标识符?
标识符就是程序员在编写代码时给 类、方法、变量 等自定义的名字。
2 )组成规则
合法的标识符只能由以下字符组成:
- 数字
0~9 - 字母
A~Z、a~z - 下划线
_和美元符号$
3 ) 注意事项
- 不能以数字开头(如 2b ❌)
- 不能是 Java 关键字(如 class、public 等小写关键字 ❌)
- 严格区分大小写(Class ✅,因首字母大写,不是关键字)
4 ) 常见命名约定(Java 江湖规矩)
| 命名法 | 规则 | 应用场景 | 示例 |
|---|---|---|---|
| 小驼峰 | 单单词:全小写;多单词:第一个单词首字母小写,其余单词首字母大写 | 变量、方法 | name, firstName |
| 大驼峰 | 每个单词首字母都大写 | 类 | Student, GoodStudent |
遵守命名约定可大幅提高代码可读性,避免写出 aaaaaaabbbbbbbb 这种令人迷惑的名字
小结
- 隐式转换:小类型自动提升为大类型,注意
byte/short/char参与运算时必先提升为int - 强制转换:大类型→小类型需 (目标类型) 强转,可能发生精度损失
- 常量优化:编译时将对常量表达式求值并检查范围,合理利用可简化代码
- 键盘录入:通过 Scanner + nextInt() 实现用户交互,让变量值动态化
- 标识符:自定义名称必须遵守规则,并遵循驼峰命名约定,提升代码质量
更多推荐
所有评论(0)