第一部分:Java变量

理解变量的概念,学习如何声明和使用变量

学习目标

掌握变量声明、初始化和使用的方法,理解变量命名规则

1

什么是变量?

变量是程序中的基本存储单元,具有名称、类型和值。

变量相当于内存中的一个"命名容器",用于存储数据。

变量在内存中的表示

0x7A3F
age = 25
0x7B42
name = "张三"
0x7C85
price = 99.99
0x7D28
isStudent = true
2

变量声明与初始化

Java是强类型语言,变量必须先声明后使用

// 变量声明语法
数据类型 变量名;

// 变量初始化语法
数据类型 变量名 = 初始值;

// 示例:
int age; // 声明一个整数变量
age = 25; // 初始化变量
double price = 99.99; // 声明并初始化
3

变量命名规则

  • 由字母、数字、下划线(_)和美元符号($)组成
  • 不能以数字开头
  • 不能使用Java关键字(如int、class等)
  • 区分大小写(myVar 和 myvar 是不同的变量)
  • 使用有意义的名称(推荐使用驼峰命名法)
// 合法变量名
int studentAge;
double accountBalance;
String firstName;

// 非法变量名
int 2students; // 不能以数字开头
double class; // class是关键字
String first name; // 不能包含空格
4

变量作用域

变量的作用域决定了它在代码中的可见范围。

  • 类变量(静态变量) - 整个类可见
  • 实例变量 - 对象实例可见
  • 局部变量 - 方法或代码块内可见
public class ScopeExample {
    // 类变量
    static int classVar = 10;

    // 实例变量
    int instanceVar = 20;

    public void myMethod() {
        // 局部变量
        int localVar = 30;
    }
}

学习小贴士

1. 变量命名要具有描述性,避免使用单个字母(循环计数器除外)

2. 局部变量使用前必须初始化,否则会编译错误

3. 尽量缩小变量的作用域,减少命名冲突的可能性

第二部分:Java常量

学习如何定义和使用不可变的值

学习目标

掌握final关键字的使用,理解常量的应用场景

1

什么是常量?

常量是在程序运行期间值不会改变的量。

使用final关键字定义常量,常量名通常使用大写字母。

// 常量声明语法
final 数据类型 常量名 = 值;

// 示例:
final double PI = 3.14159;
final int MAX_USERS = 1000;
final String COMPANY_NAME = "码咚咚科技";
2

常量的特点

  • 值在初始化后不可更改
  • 必须在声明时或在构造函数中初始化
  • 提高代码可读性和可维护性
  • 避免"魔法数字"(意义不明确的数字)
  • 编译器可以进行优化
// 错误示例:常量不能被重新赋值
final int MAX_VALUE = 100;
MAX_VALUE = 200; // 编译错误
3

常量与字面量

字面量是直接在代码中表示固定值的符号。

整数字面量

int decimal = 100; // 十进制
int octal = 0144; // 八进制
int hex = 0x64; // 十六进制
int binary = 0b1100100; // 二进制

浮点数字面量

float f = 3.14f; // float需要f后缀
double d = 3.14; // 默认double
double sci = 1.23e4; // 科学计数法(12300.0)

字符字面量

char a = 'A';
char tab = '\t'; // 转义字符
char unicode = '\u0041'; // Unicode字符

字符串字面量

String s1 = "Hello";
String s2 = "多行文本" +
        "支持换行";

学习小贴士

1. 对于程序中不会改变的值,优先使用常量而不是变量

2. 常量名使用全大写字母和下划线分隔单词(如MAX_VALUE)

3. 使用枚举类型代替一组相关的常量

第三部分:Java数据类型

理解Java的8种基本数据类型和引用类型

学习目标

掌握8种基本数据类型的特性,理解自动装箱和拆箱

1

数据类型分类

Java数据类型分为基本类型引用类型两大类。

// 基本类型:存储实际值
int num = 10;

// 引用类型:存储对象的内存地址
String name = "张三";

基本类型有8种,引用类型包括类、接口、数组等。

2

8种基本数据类型

Java提供了8种基本数据类型:

数据类型 大小 范围 默认值
byte 1字节 -128 到 127 0
short 2字节 -32,768 到 32,767 0
int 4字节 -2^31 到 2^31-1 0
long 8字节 -2^63 到 2^63-1 0L
float 4字节 约 ±3.40282347E+38F 0.0f
double 8字节 约 ±1.7976931348623157E+308 0.0d
char 2字节 \u0000 到 \uffff '\u0000'
boolean 未明确定义 true 或 false false
3

数据类型选择

根据数据特性和需求选择合适的数据类型:

  • 整数:优先使用int,大数值用long
  • 小数:优先使用double,节省内存用float
  • 字符:使用char表示单个字符
  • 布尔值:boolean表示真/假
  • 节省内存:byte和short用于数组或特定场景
// 整数类型选择
int age = 25; // 常用整数
long population = 7800000000L; // 大整数

// 浮点类型选择
float price = 19.99f; // 单精度
double pi = 3.1415926535; // 双精度(默认)
4

类型转换

Java中的类型转换分为自动转换强制转换

// 自动转换(小类型->大类型)
int a = 100;
long b = a; // 自动转换为long

// 强制转换(大类型->小类型)
double x = 9.87;
int y = (int)x; // 强制转换为int,结果为9

强制转换可能导致数据丢失或精度降低

5

包装类与自动装箱

Java为每个基本类型提供了对应的包装类:

// 基本类型和包装类对应关系
byte → Byte
short → Short
int → Integer
long → Long
float → Float
double → Double
char → Character
boolean → Boolean

自动装箱:基本类型自动转换为包装类对象

自动拆箱:包装类对象自动转换为基本类型

// 自动装箱示例
Integer num = 10; // 编译器自动转换为Integer.valueOf(10)

// 自动拆箱示例
int n = num; // 编译器自动转换为num.intValue()

学习小贴士

1. 默认使用int和double,除非有特殊需求

2. 浮点数比较时不要使用==,应使用差值小于某个极小值

3. 包装类用于泛型集合(如List

第四部分:动手练习

通过实践巩固所学知识

练习1:变量声明与使用

  • 声明不同类型的变量(int, double, boolean, String)
  • 给变量赋予合理的初始值
  • 修改变量的值并打印输出
// 示例代码
public class VariablePractice {
    public static void main(String[] args) {
        // 声明并初始化变量
        int studentCount = 45;
        double averageScore = 87.5;
        boolean isPassed = true;
        String courseName = "Java编程";

        // 修改并输出变量值
        studentCount = 48;
        System.out.println("课程名称: " + courseName);
        System.out.println("学生人数: " + studentCount);
        System.out.println("平均分: " + averageScore);
        System.out.println("是否通过: " + isPassed);
    }
}

练习2:常量应用

  • 定义数学常量(π、重力加速度等)
  • 定义业务常量(最大登录次数、折扣率等)
  • 在计算中使用这些常量
public class ConstantPractice {
    // 定义常量
    static final double PI = 3.14159;
    static final int MAX_LOGIN_ATTEMPTS = 5;

    public static void main(String[] args) {
        double radius = 5.0;
        // 使用常量计算圆面积
        double area = PI * radius * radius;
        System.out.println("圆面积: " + area);

        int attempts = 3;
        // 使用常量判断
        if (attempts >= MAX_LOGIN_ATTEMPTS) {
            System.out.println("账户已锁定");
        } else {
            System.out.println("还可尝试" + (MAX_LOGIN_ATTEMPTS - attempts) + "次");
        }
    }
}

练习3:数据类型转换

  • 实现不同数值类型之间的转换
  • 字符串与数值类型的相互转换
  • 处理转换中的边界情况
public class TypeConversionPractice {
    public static void main(String[] args) {
        // 数值类型转换
        int intValue = 100;
        long longValue = intValue; // 自动转换
        double doubleValue = 123.456;
        int fromDouble = (int) doubleValue; // 强制转换

        // 字符串转数值
        String numberStr = "12345";
        int num = Integer.parseInt(numberStr);

        // 数值转字符串
        String priceStr = String.valueOf(99.99);
        String scoreStr = "" + 95; // 简单写法

        // 处理转换异常
        try {
            int invalid = Integer.parseInt("abc");
        } catch (NumberFormatException e) {
            System.out.println("数字格式错误!");
        }
    }
}

第五部分:常见问题与总结

解决学习过程中的常见疑问

问题1:变量未初始化

  • 错误信息:variable might not have been initialized
  • 原因:局部变量使用前未赋值
  • 解决方案:声明变量时初始化或在使用前赋值
// 错误示例
int count;
System.out.println(count); // 编译错误

// 正确做法
int count = 0; // 声明时初始化
// 或
int count;
count = 10; // 使用前赋值

问题2:类型不匹配

  • 错误信息:incompatible types
  • 原因:试图将不兼容的类型赋值给变量
  • 解决方案:使用类型转换或选择合适的数据类型
// 错误示例
int num = 3.14; // double无法自动转为int

// 正确做法
int num = (int)3.14; // 强制转换
// 或
double num = 3.14; // 使用double类型

问题3:整数溢出

  • 现象:大整数计算得到错误结果
  • 原因:超出数据类型的表示范围
  • 解决方案:使用更大范围的数据类型(如long)
// 错误示例
int a = 2000000000;
int b = 2000000000;
int sum = a + b; // 溢出,得到负数

// 正确做法
long a = 2000000000L;
long b = 2000000000L;
long sum = a + b; // 正确结果

关键概念总结

  • 变量:可变的存储单元,需要声明类型和名称
  • 常量:不可变的值,使用final关键字声明
  • 基本数据类型:8种,包括4种整数、2种浮点、1种字符、1种布尔
  • 类型转换:自动转换(小->大),强制转换(大->小)
  • 包装类:基本类型对应的对象形式,支持自动装箱/拆箱

学习成果检查清单

  • ✅ 理解变量的概念并能正确声明变量
  • ✅ 掌握常量的定义和使用场景
  • ✅ 熟悉8种基本数据类型及其范围
  • ✅ 能够进行正确的类型转换
  • ✅ 了解包装类和自动装箱/拆箱机制
  • ✅ 完成所有动手练习