← 返回上一页

第2章: 数据类型与变量

掌握 Java 数据类型和变量的使用

🏠 生活类比:收纳箱与标签

变量就像你家里的收纳箱:
每个箱子贴一个标签(变量名),标明里面放什么
箱子有不同尺寸(数据类型):小箱子放硬币(byte),大箱子放衣服(long)
int age = 25; → 贴了“age”标签的中号箱子,里面放了数字 25

💡 数据类型决定箱子大小,变量名是箱子标签,是箱子里的东西。

🔢 8种基本类型 📦 引用类型 🔄 类型转换 📝 命名规范

Java 程序结构

public class MyClass { // 类定义 public static void main(String[] args) { // 主方法 // 程序代码 System.out.println("Hello"); } }

基本规则

注释

// 单行注释 /* * 多行注释 * 可以跨越多行 */ /** * 文档注释 * 用于生成 API 文档 * @param args 参数说明 */

变量命名规则

📝 命名规则

✅ 合法命名

myName, _count, $price

userName, MAX_VALUE

firstName, getAge

❌ 非法命名

2name(数字开头)

my-name(含连字符)

class(关键字)

命名规范

类型 规范 示例
类名 大驼峰命名法 MyClass, StudentInfo
方法名/变量名 小驼峰命名法 myName, getAge
常量名 全大写+下划线 MAX_VALUE, PI
包名 全小写 com.example.demo
⚠️ 注意: Java 关键字不能用作变量名,如:class, int, public, void, return 等。

数据类型

Java 是强类型语言,所有变量必须先声明类型才能使用。

📊 Java 八大基本数据类型

🔢

byte

1字节 整数

🔢

short

2字节 整数

🔢

int

4字节 整数

🔢

long

8字节 整数

🔵

float

4字节 浮点

🔵

double

8字节 浮点

📝

char

2字节 字符

boolean

1位 布尔值

基本数据类型(8种)

类型 大小 范围 默认值 示例
byte 1字节 -128 ~ 127 0 byte b = 100;
short 2字节 -32768 ~ 32767 0 short s = 1000;
int 4字节 -2^31 ~ 2^31-1 0 int i = 100000;
long 8字节 -2^63 ~ 2^63-1 0L long l = 100000L;
float 4字节 单精度浮点数 0.0f float f = 3.14f;
double 8字节 双精度浮点数 0.0d double d = 3.14;
char 2字节 Unicode 字符 '\u0000' char c = 'A';
boolean 1位 true 或 false false boolean b = true;

选择数据类型的建议

// 整数:一般使用 int,大数字用 long int age = 25; // 年龄 long worldPopulation = 7800000000L; // 世界人口 // 浮点数:一般使用 double double price = 99.99; // 价格 double pi = 3.14159265359; // 精确计算 // 字符:使用 char char grade = 'A'; // 等级 char chinese = '中'; // 中文字符 // 布尔:使用 boolean boolean isStudent = true; // 是否是学生 boolean hasPermission = false; // 是否有权限
💡 提示: 实际开发中,int 和 double 最常用。byte 和 short 主要用于节省内存。

数据类型示例

public class DataTypeDemo { public static void main(String[] args) { // 整数类型 int age = 25; long population = 7800000000L; // 浮点类型 float price = 99.99f; double pi = 3.14159265359; // 字符类型 char grade = 'A'; // 布尔类型 boolean isStudent = true; // 输出 System.out.println("年龄: " + age); System.out.println("人口: " + population); System.out.println("价格: " + price); System.out.println("π: " + pi); System.out.println("等级: " + grade); System.out.println("是学生: " + isStudent); } }

变量声明与初始化

声明变量

// 声明单个变量 int age; String name; // 声明多个变量 int x, y, z; // 声明并初始化 int count = 0; String message = "Hello"; // 常量(使用 final 关键字) final double PI = 3.14159; final int MAX_SIZE = 100;
💡 提示: 常量名通常使用全大写字母,单词间用下划线分隔。

引用数据类型

引用类型存储的是对象的引用(地址),而不是值本身。

String(字符串)

// 创建字符串 String name = "Alice"; String greeting = "Hello, World!"; // 字符串拼接 String fullName = "Alice" + " " + "Smith"; // 常用字符串方法 int length = name.length(); // 获取长度: 5 String upper = name.toUpperCase(); // 转大写: ALICE String lower = name.toLowerCase(); // 转小写: alice boolean contains = name.contains("li"); // 包含判断: true char firstChar = name.charAt(0); // 获取字符: A int index = name.indexOf("li"); // 查找位置: 1 String sub = name.substring(0, 3); // 截取: Ali boolean empty = name.isEmpty(); // 是否为空: false String replaced = name.replace("li", "LI"); // 替换: ALIce // 字符串比较 String s1 = "hello"; String s2 = "Hello"; System.out.println(s1.equals(s2)); // false(区分大小写) System.out.println(s1.equalsIgnoreCase(s2)); // true(忽略大小写)
💡 提示: 字符串是不可变的,每次操作都会产生新字符串对象。

数组

// 声明数组 int[] numbers; String[] names; // 创建数组 numbers = new int[5]; // 创建长度为5的数组,默认值为0 names = new String[]{"Alice", "Bob", "Charlie"}; // 声明并初始化 int[] scores = {90, 85, 92, 88, 95}; // 访问数组元素 int firstScore = scores[0]; // 90(索引从0开始) int lastScore = scores[4]; // 95 // 数组长度 int length = scores.length; // 5 // 遍历数组 for (int i = 0; i < scores.length; i++) { System.out.println(scores[i]); } // 增强for循环遍历 for (int score : scores) { System.out.println(score); }

基本类型 vs 引用类型

特性 基本类型 引用类型
存储内容 实际值 对象地址
存储位置 栈内存 堆内存
默认值 0、false等 null
赋值方式 值拷贝 引用拷贝
// 基本类型赋值:值拷贝 int a = 10; int b = a; // b = 10 a = 20; // 修改a System.out.println(b); // b仍然是10 // 引用类型赋值:引用拷贝 int[] arr1 = {1, 2, 3}; int[] arr2 = arr1; // arr2指向同一数组 arr1[0] = 100; // 修改arr1 System.out.println(arr2[0]); // arr2[0]也变成100

类型转换

自动类型转换(隐式)

小范围类型自动转换为大范围类型。

byte b = 10; int i = b; // byte → int(自动转换) int num = 100; long l = num; // int → long(自动转换) float f = 3.14f; double d = f; // float → double(自动转换)

强制类型转换(显式)

大范围类型转换为小范围类型,可能丢失精度。

double d = 3.14; int i = (int)d; // 3(小数部分丢失) long l = 100L; int num = (int)l; // long → int int x = 128; byte b = (byte)x; // 可能溢出
⚠️ 注意: 强制类型转换可能导致数据丢失或溢出!

🎯 互动练习:数据类型判断

判断以下变量声明是否正确:

int age = 25.5;
String name = "Alice";
char c = "A";
long num = 100L;
double price = 99.99f;

📝 章节练习

练习 1:选择题

以下哪个不是 Java 的基本数据类型?





练习 2:选择题

以下变量命名哪个是合法的?





练习 3:代码填空

声明一个整型变量 age 并赋值为 25:

练习 4:编程练习

编写代码:声明变量存储以下信息

  • 姓名(String):张三
  • 年龄(int):25
  • 身高(double):175.5
  • 是否学生(boolean):true

练习 5:类型转换

写出以下代码的输出结果:

double d = 9.87; int i = (int)d; System.out.println(i);

输出结果是:

本章小结

← 上一章 下一章 →