Learn
Java/02-variables-and-types

变量与类型

Java 是强类型静态语言:每个变量都必须声明类型,类型在编译时确定。

1. 8 大基本类型

类型大小范围默认值字面量示例
byte8-128 ~ 1270byte b = 100;
short16-32768 ~ 327670short s = 1000;
int32-2³¹ ~ 2³¹-10int n = 42;
long64-2⁶³ ~ 2⁶³-10Llong l = 100L;
float32IEEE 7540.0ffloat f = 3.14f;
double64IEEE 7540.0ddouble d = 3.14;
char16Unicode'\u0000'char c = 'A';
boolean-true/falsefalseboolean b = true;
基本类型
public class Main {
    public static void main(String[] args) {
        byte b = 100;
        short s = 1000;
        int i = 100_000;
        long l = 100_000_000L;
        float f = 3.14f;
        double d = 3.14159;
        char c = 'A';
        boolean ok = true;
 
        System.out.println("byte: " + b);
        System.out.println("int: " + i);
        System.out.println("long: " + l);
        System.out.println("double: " + d);
        System.out.println("char: " + c);
        System.out.println("boolean: " + ok);
    }
}
💡下划线分隔数字

Java 7+ 允许数字字面量用下划线分隔提高可读性:int n = 1_000_000;。

2. 引用类型

类、接口、数组都是引用类型,默认值是 null:

String s = "Hello";      // 字符串
int[] arr = {1, 2, 3};   // 数组
Object obj = new Object();

3. final 常量

final double PI = 3.14159;
final int MAX = 100;

4. 类型转换

4.1 自动转换(小→大)

byte → short → int → long → float → double

4.2 强制转换(大→小)

可能丢失精度,需显式声明:

类型转换
public class Main {
    public static void main(String[] args) {
        int a = 10;
        double d = a;            // 自动:int -> double
        System.out.println("自动:int -> double: " + d);
 
        double pi = 3.14159;
        int truncated = (int) pi;  // 强制:double -> int(截断小数)
        System.out.println("强制:double -> int: " + truncated);
 
        int big = 200;
        byte small = (byte) big;   // 强制:int -> byte(溢出)
        System.out.println("强制:200 -> byte: " + small);
    }
}
⚠️强制转换可能溢出

byte 只有 8 位,200 强制转换后会变成 -56(因为高位被截断,只保留 11001000,这是 -56 的补码)。业务代码中应避免类似陷阱。

5. 算术运算

算术运算
public class Main {
    public static void main(String[] args) {
        int a = 10, b = 3;
        System.out.println(a + b);   // 13
        System.out.println(a - b);   // 7
        System.out.println(a * b);   // 30
        System.out.println(a / b);   // 3   整数除法
        System.out.println(a % b);   // 1
        System.out.println((double) a / b);  // 3.3333...
 
        // 自增
        int n = 5;
        n++;     // 6
        ++n;     // 7
        System.out.println(n);
    }
}

6. Scanner 读输入

Scanner
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入你的名字:");
        String name = sc.nextLine();
        System.out.print("请输入年龄:");
        int age = sc.nextInt();
        System.out.println("你好," + name + ",你" + age + "岁。");
        sc.close();
    }
}

7. 实战:圆面积

圆面积
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        final double PI = 3.14159;
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入半径:");
        double r = sc.nextDouble();
        double area = PI * r * r;
        System.out.printf("半径 %.2f 的圆面积 = %.2f%n", r, area);
        sc.close();
    }
}

🎯 练习

BMI 计算器
// 任务:读取身高(米)与体重(公斤),输出 BMI
// BMI = 体重 / (身高²),保留 2 位小数
// 期望:身高 1.75,体重 70 -> BMI 是 22.86
 
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("身高(米):");
        double h = sc.nextDouble();
        System.out.print("体重(公斤):");
        double w = sc.nextDouble();
        // 补全代码
    }
}

小结

  • ✅ 8 大基本类型 + 引用类型
  • ✅ final 声明常量
  • ✅ 自动类型转换(小→大);强制转换 (T)v(大→小)
  • ✅ Scanner 读控制台输入
  • ✅ 整数除法会截断小数部分

下一章 流程控制。