一、变量是什么?
比喻:变量就像是一个储物盒,用来存放数据。每个盒子有名字(变量名)和类型(能装什么)。
示例:
一、变量是什么?
比喻:变量就像是一个储物盒,用来存放数据。每个盒子有名字(变量名)和类型(能装什么)。
示例:
二、数据类型:盒子的“规格”
Java 的数据类型分为两类:
- 基本数据类型:直接存具体数值(如数字、字符)。
- 引用数据类型:存的是对象的“遥控器”(内存地址)。
1. 基本数据类型(8种)
类型 | 大小 | 范围/示例 | 默认值 |
---|---|---|---|
byte | 1字节 | -128 ~ 127 | 0 |
short | 2字节 | -32768 ~ 32767 | 0 |
int | 4字节 | -21亿 ~ 21亿 | 0 |
long | 8字节 | -9e18 ~ 9e18 | 0L |
float | 4字节 | 小数(如 3.14f) | 0.0f |
double | 8字节 | 更精确的小数(如 3.14) | 0.0d |
char | 2字节 | 单个字符(如 'A' 或 '\u0041') | '\u0000' |
boolean | 1位 | true 或 false | false |
示例:
byte score = 90; // 小整数用 byte
int population = 1400000000; // 常用整数用 int
double price = 19.99; // 小数用 double
char grade = 'A'; // 单个字符
boolean isPassed = true; // 布尔值表示是否通过
整型家族对比表:
类型 | 字节 | 范围 | 示例 |
---|---|---|---|
byte | 1 | -128 ~ 127 | byte b = 100 |
short | 2 | -32768 ~ 32767 | short s = 20000 |
int | 4 | -2³¹ ~ 2³¹-1(约±21亿) | int i = 2147483647 |
long | 8 | -2⁶³ ~ 2⁶³-1 | long l = 100L |
public class IntegerDemo {
public static void main(String[] args) {
// long类型必须加L后缀
long population = 7800000000L; // 78亿
// 查看int的最大值
System.out.println(Integer.MAX_VALUE); // 2147483647
// 错误示例:超出范围
// int error = 2147483648; // 编译报错
}
}
2. 浮点型
对比表:
类型 | 字节 | 特点 | 示例 |
---|---|---|---|
float | 4 | 单精度,后缀F/f | float f = 3.14F |
double | 8 | 双精度(默认) | double d = 3.14 |
代码示例
public class FloatDemo {
public static void main(String[] args) {
// float必须加F后缀
float pi = 3.1415926F;
// 科学计数法
double atom = 1.67e-27; // 1.67×10⁻²⁷
// 精度问题演示
System.out.println(1.1 * 1.1); // 输出1.2100000000000002
}
}
3. 字符型(char)
特点:
- 用单引号包裹单个字符
- 支持Unicode(包括中文)
- 本质是16位无符号整数(0~65535)
代码示例:
public class CharDemo {
public static void main(String[] args) {
char c1 = 'A'; // 英文字符
char c2 = '中'; // 中文字符
char c3 = '\u0041'; // Unicode表示(A)
System.out.println(c1); // A
System.out.println((int)c1); // 65(ASCII码)
}
}
4. 布尔型(boolean)
特点:
- 只有
true
和false
两个值 - 不能与整数转换(与C语言不同)
代码示例:
public class BooleanDemo {
public static void main(String[] args) {
boolean isRaining = true;
boolean hasLicense = false;
// 错误示例:与整数混用
// if (1) { ... } // Java中不允许
}
}
5. 引用数据类型
比喻:引用类型变量是“遥控器”,指向实际对象(如电视机)。
常见类型:
String
(字符串)、数组、类(如Scanner
)、接口等。
示例:
String message = "Hello World"; // 字符串
int[] numbers = {1, 2, 3}; // 数组
Scanner input = new Scanner(System.in); // 对象
三、变量的声明与初始化
1. 声明变量
语法:数据类型 变量名;
int age; // 声明一个整数变量 age(未初始化)
String name; // 声明一个字符串变量 name(未初始化)
2. 初始化变量
语法:数据类型 变量名 = 值;
int age = 25; // 声明并初始化
double price = 19.99; // 小数初始化
char firstLetter = 'J'; // 字符初始化
boolean isStudent = true; // 布尔值初始化
String greeting = "你好!"; // 字符串初始化
注意:未初始化的变量不能直接使用!
int count;
System.out.println(count); // 编译错误:变量未初始化!
3. 变量作用域
public class ScopeDemo {
// 成员变量(类内有效)
int global = 100;
public void method() {
// 局部变量(方法内有效)
int local = 50;
System.out.println(global); // 正确
}
public void anotherMethod() {
// System.out.println(local); // 错误!
}
}
四、类型转换
1. 自动类型转换(小转大)
小范围类型 → 大范围类型(无数据丢失)。
public class AutoConvert {
public static void main(String[] args) {
int a = 100;
double b = a; // int→double(安全)
char c = 'A';
int d = c; // char→int(输出65)
}
}
转换方向:byte → short → int → long → float → double
2. 强制类型转换(大转小)
语法:(目标类型) 值
(可能丢失数据)。
public class ForceConvert {
public static void main(String[] args) {
double price = 99.99;
int intPrice = (int)price; // 强制转换(输出99)
// 数据溢出示例
byte overflow = (byte)200; // 输出-56(溢出)
double price = 19.99;
int intPrice = (int) price; // 强制转 int,得到 19(丢失小数部分)
}
}
五、常量:不可变的盒子
用 final
修饰,值一旦设定不能修改。
命名规范:全大写字母,单词间用下划线分隔。
final double PI = 3.14159; // 常量 PI
final int MAX_SCORE = 100; // 常量 MAX_SCORE
// PI = 3.14; // 错误!常量不能重新赋值
六、 关键注意事项
变量必须先初始化:
int x;
// System.out.println(x); // 编译错误
浮点数比较:
double a = 0.1 + 0.2;
double b = 0.3;
System.out.println(a == b); // false(应判断差值是否<0.00001)
类型溢出:
int max = Integer.MAX_VALUE;
System.out.println(max + 1); // -2147483648(最小值)
字符与字符串区别:
char c = 'A'; // 字符
String s = "A"; // 字符串
// char error = 'AB'; // 编译错误
七、代码示例:综合应用
public class DataTypeDemo {
public static void main(String[] args) {
// 基本类型示例
int age = 20;
double height = 1.75;
char gender = '男';
boolean isMarried = false;
System.out.println("年龄:" + age);
System.out.println("身高:" + height + "米");
System.out.println("性别:" + gender);
System.out.println("婚否:" + isMarried);
// 引用类型示例
String hobby = "打篮球";
int[] scores = {90, 85, 88};
System.out.println("爱好:" + hobby);
System.out.println("分数:" + scores[0]); // 输出第一个分数 90
// 类型转换示例
double price = 19.99;
int intPrice = (int) price; // 强制转换
System.out.println("价格整数部分:" + intPrice); // 输出 19
}
}
总结
- Java的8种基本数据类型及其使用场景
- 变量的声明、初始化和作用域规则
- 类型转换的两种方式及注意事项
- 常见错误及解决方法