「Java基本语法」变量的使用

146 阅读6分钟

变量定义

变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。

语法

数据类型 变量名 [= 初始值];

示例:声明与初始化

public class VariableDemo {
    public static void main(String[] args) {
        int age;          // 声明变量
        age = 25;          // 赋值
        System.out.println("Age: " + age); // 输出:Age: 25
    }
}

运行结果

Age: 25

代码解析

  1. Java源文件保存为“VariableDemo.java”。
  2. int age声明了一个整型变量age。
  3. age = 25将值25赋给age变量。

示例:未初始化错误

public class UninitializedError {
    public static void main(String[] args) {
        int number;
        System.out.println(number); // 编译错误:未初始化
    }
}

错误原因:局部变量必须初始化后才能使用。

变量的数据类型

Java是强类型语言,变量声明时必须明确变量的数据类型。常见数据类型分为两类:

1.基本数据类型

整数:byte(1字节)、short(2字节)、int(4字节)、long(8字节)

浮点数:float(4字节)、double(8字节)

字符:char(2字节,Unicode)

布尔:boolean(1位,true/false)

2.引用数据类型

类(如String)、接口、数组等。

示例:基本类型使用

public class PrimitiveTypes {
    public static void main(String[] args) {
        byte b = 127;          // -128~127
        short s = 32767;       // -32768~32767
        int i = 2147483647;    // -2^31~2^31-1
        long l = 9223372036854775807L; // 添加L后缀

        float f = 3.14f;       // 添加f后缀
        double d = 3.1415926535;

        char c = 'A';          // Unicode字符
        boolean bool = true;

        System.out.println("byte: " + b);
        System.out.println("short: " + s);
        System.out.println("int: " + i);
        System.out.println("long: " + l);
        System.out.println("float: " + f);
        System.out.println("double: " + d);
        System.out.println("char: " + c);
        System.out.println("boolean: " + bool);
    }
}

运行结果

byte: 127
short: 32767
int: 2147483647
long: 9223372036854775807
float: 3.14
double: 3.1415926535
char: A
boolean: true

说明:Java源文件保存为“PrimitiveTypes.java”。

示例:引用类型(String)

public class StringDemo {
    public static void main(String[] args) {
        String greeting = "Hello, Java!";
        System.out.println(greeting); // 输出:Hello, Java!
    }
}

运行结果

Hello, Java!

说明:Java源文件保存为“StringDemo.java”。

变量的类型转换

类型转换分为自动类型转换和强制类型转换。

1.自动类型转换(隐式)

小范围类型 → 大范围类型。

int → long → float → double

char → int

2.强制类型转换(显式)

大范围类型 → 小范围类型(如 double → int),可能丢失精度。

示例:自动转换

public class AutoConversion {
    public static void main(String[] args) {
        int numInt = 100;
        double numDouble = numInt; // int → double
        System.out.println("numDouble: " + numDouble); // 输出:100.0
    }
}

运行结果

numDouble: 100.0

说明:Java源文件保存为“AutoConversion.java”。

示例:强制转换

public class ForceConversion {
    public static void main(String[] args) {
        double pi = 3.14159;
        int piInt = (int) pi; // double → int
        System.out.println("piInt: " + piInt); // 输出:3

        long bigNum = 123456789L;
        int smallNum = (int) bigNum; // 可能溢出
        System.out.println("smallNum: " + smallNum); // 输出:123456789(若未溢出)
    }
}

运行结果

piInt: 3
smallNum: 123456789

说明:Java源文件保存为“ForceConversion.java”。

示例:字符串转换

public class StringConversion {
    public static void main(String[] args) {
        String numStr = "123";
        int numInt = Integer.parseInt(numStr); // 字符串 → int
        System.out.println("numInt: " + numInt); // 输出:123

        String piStr = "3.14";
        double piDouble = Double.parseDouble(piStr); // 字符串 → double
        System.out.println("piDouble: " + piDouble); // 输出:3.14
    }
}

运行结果

numInt: 123
piDouble: 3.14

说明:Java源文件保存为“StringConversion.java”。

3.常见错误与解决方法

  1. 类型不匹配:int x = "123";(编译错误)。→使用Integer.parseInt()或Double.parseDouble()转换字符串。
  2. 强制转换溢出:int y = (int) 1e20;(结果不可预测)。→检查数值范围避免溢出。

变量的作用域

变量的作用域决定了其可访问的范围。Java中常见作用域包括:

  1. 类变量(静态变量):用static修饰,类加载时初始化。
  2. 实例变量:属于对象,无static修饰。
  3. 局部变量:在方法或代码块中声明,仅在该范围内有效。

示例

public class ScopeDemo {
    static String classVar = "Class Variable"; // 类变量
    String instanceVar = "Instance Variable"; // 实例变量

    public void printVariables() {
        String localVar = "Local Variable"; // 局部变量
        System.out.println(classVar);
        System.out.println(instanceVar);
        System.out.println(localVar);
    }

    public static void main(String[] args) {
        ScopeDemo demo = new ScopeDemo();
        demo.printVariables();
        // System.out.println(localVar); // 错误:局部变量不可访问
    }
}

运行结果

Class Variable
Instance Variable
Local Variable

代码解析

  1. Java源文件保存为“ScopeDemo.java”。
  2. classVar和instanceVar可在整个类中访问。
  3. localVar仅在printVariables方法内有效。

示例:代码块作用域

public class BlockScope {
    public static void main(String[] args) {
        int x = 10;
        {
            int y = 20; // y仅在此代码块内有效
            System.out.println("x + y: " + (x + y)); // 输出:30
        }
        // System.out.println(y); // 错误:y不可访问
    }
}

运行结果

x + y: 30

说明:Java源文件保存为“BlockScope.java”。

常见错误及解决方法

1.未初始化变量

错误:int x; System.out.println(x);(编译错误)。

解决方案:声明时初始化或赋值后使用。

2.作用域错误

错误:在方法外访问局部变量。

解决方案:确保变量在正确的作用域内访问。

3.类型不匹配

错误:String s = 123;(编译错误)。

解决方案:使用String.valueOf(123)或"" + 123。

知识总结

  1. 变量要先声明后使用,并且要指定数据类型和名称。
  2. 基本数据类型包括int、double、char等,引用类型如String。
  3. 类型转换分自动类型转换和强制类型转换,强制转换可能丢失精度。
  4. 变量作用域决定其可访问范围,包括类变量、实例变量和局部变量。

理论练习

选择题:以下哪项是合法的变量名?

A.123name    B._age    C.class    D.int

答案:B

解析:变量名不能以数字开头,且不能是关键字。

填空题:String 类型属于____类型。

答案:引用

填空题:int 类型占____字节。

答案:4

代码分析:以下代码的输出是什么?

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

答案:10

解析:强制转换会丢弃小数部分。

实操练习

练习:编写程序,声明并初始化一个String类型变量、一个int类型变量、一个double类型变量和一个 boolean 类型变量,输出它们的值。

答案:

public class Practice {
    public static void main(String[] args) {
        String name = "Bob";
        int age = 30;
        double price = 9.99;
        boolean isAvailable = true;
        System.out.println("Name: " + name + ", Age: " + age
                + "Price: " + price + ", Available: " + isAvailable);
    }
}

运行结果

Name: Bob, Age: 30Price: 9.99, Available: true

说明:Java源文件保存为“Practice.java”。

练习:编写程序,将double类型变量3.14强制转换为int,并输出结果。

答案:

public class Practice {
    public static void main(String[] args) {
        double pi = 3.14;
        int piInt = (int) pi;
        System.out.println("piInt: " + piInt); // 输出:3
    }
}

运行结果

piInt: 3

说明:Java源文件保存为“Practice.java”。

练习:编写程序,将String类型"123.45"转换为double类型,并输出结果。

答案:

public class Practice {
    public static void main(String[] args) {
        String numStr = "123.45";
        double numDouble = Double.parseDouble(numStr);
        System.out.println("numDouble: " + numDouble); // 输出:123.45
    }
}

运行结果

numDouble: 123.45

说明:Java源文件保存为“Practice.java”。

练习:编写程序,演示局部变量和实例变量的作用域差异。

答案:

public class Practice {
    String instanceVar = "Instance"; // 实例变量

    public void printVars() {
        String localVar = "Local"; // 局部变量
        System.out.println(instanceVar);
        System.out.println(localVar);
    }

    public static void main(String[] args) {
        Practice p = new Practice();
        p.printVars();
        // System.out.println(localVar); // 错误:局部变量不可访问
    }
}

运行结果

Instance
Local

说明:Java源文件保存为“Practice.java”。