Skip to content

基础语法

Java 是一种强类型、面向对象的编程语言,具有跨平台、安全性高等特点。

第一个 Java 程序

java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

编译和运行:

bash
javac HelloWorld.java    // 编译
java HelloWorld          // 运行

变量与数据类型

基本数据类型

java
// 整数类型
byte b = 127;           // 1字节,-128 到 127
short s = 32767;        // 2字节
int i = 2147483647;     // 4字节(默认)
long l = 9223372036854775807L;  // 8字节,需要 L 后缀

// 浮点类型
float f = 3.14f;        // 4字节,需要 f 后缀
double d = 3.141592653; // 8字节(默认)

// 字符类型
char c = 'A';           // 2字节,Unicode 字符
char c2 = '\u0041';     // Unicode 编码

// 布尔类型
boolean bool = true;    // true 或 false

引用数据类型

java
// 字符串
String name = "张三";

// 数组
int[] numbers = {1, 2, 3, 4, 5};

// 对象
Person person = new Person();

变量声明

java
// 声明并初始化
int age = 25;
String name = "李四";

// 先声明后赋值
double salary;
salary = 5000.0;

// 同时声明多个变量
int x = 1, y = 2, z = 3;

// 使用 var 关键字(Java 10+)
var message = "Hello";  // 自动推断为 String
var count = 100;        // 自动推断为 int

常量

java
// 使用 final 关键字声明常量
final double PI = 3.14159;
final int MAX_SIZE = 100;

// 常量命名规范:全大写,单词间用下划线
final String APP_NAME = "MyApp";

类型转换

自动类型转换

java
// 小类型到大类型自动转换
byte b = 127;
int i = b;        // byte -> int
long l = i;       // int -> long
float f = l;      // long -> float
double d = f;     // float -> double

// char -> int
char c = 'A';
int code = c;     // 65

强制类型转换

java
// 大类型到小类型需要强制转换
double d = 3.14159;
int i = (int) d;  // 3,精度丢失

long l = 1000L;
int j = (int) l;  // 1000

// 注意溢出问题
int big = 130;
byte b = (byte) big;  // -126(溢出)

字符串转换

java
// 其他类型转字符串
String s1 = String.valueOf(123);      // "123"
String s2 = String.valueOf(3.14);     // "3.14"
String s3 = String.valueOf(true);     // "true"
String s4 = 123 + "";                  // "123"

// 字符串转其他类型
int num = Integer.parseInt("123");           // 123
double d = Double.parseDouble("3.14");       // 3.14
boolean bool = Boolean.parseBoolean("true"); // true

运算符

算术运算符

java
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  取余

// 自增/自减
int x = 5;
System.out.println(x++);  // 5(先返回后加)
System.out.println(x);    // 6
System.out.println(++x);  // 7(先加后返回)

赋值运算符

java
int x = 10;
x += 5;   // x = x + 5  -> 15
x -= 3;   // x = x - 3  -> 12
x *= 2;   // x = x * 2  -> 24
x /= 4;   // x = x / 4  -> 6
x %= 4;   // x = x % 4  -> 2

比较运算符

java
int a = 5, b = 10;

System.out.println(a == b);  // false
System.out.println(a != b);  // true
System.out.println(a > b);   // false
System.out.println(a < b);   // true
System.out.println(a >= 5);  // true
System.out.println(a <= 5);  // true

// 字符串比较
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");

System.out.println(s1 == s2);      // true(字符串常量池)
System.out.println(s1 == s3);      // false(不同对象)
System.out.println(s1.equals(s3)); // true(内容相同)

字符串比较

在 Java 中,== 比较的是引用地址,equals() 比较的是内容。字符串比较应使用 equals() 方法。

逻辑运算符

java
boolean a = true, b = false;

// 与(AND)
System.out.println(a && b);  // false
System.out.println(a && a);  // true

// 或(OR)
System.out.println(a || b);  // true
System.out.println(b || b);  // false

// 非(NOT)
System.out.println(!a);      // false
System.out.println(!b);      // true

// 短路求值
int x = 5;
boolean result = (x > 10) && (x++ > 0);
System.out.println(x);  // 5(短路,x++ 未执行)

三元运算符

java
int age = 18;
String status = age >= 18 ? "成年" : "未成年";
System.out.println(status);  // "成年"

// 嵌套使用
int score = 85;
String grade = score >= 90 ? "A" :
               score >= 80 ? "B" :
               score >= 60 ? "C" : "D";

位运算符

java
int a = 5;   // 0101
int b = 3;   // 0011

System.out.println(a & b);   // 1  (0001) 按位与
System.out.println(a | b);   // 7  (0111) 按位或
System.out.println(a ^ b);   // 6  (0110) 按位异或
System.out.println(~a);      // -6 按位取反
System.out.println(a << 1);  // 10 (1010) 左移
System.out.println(a >> 1);  // 2  (0010) 右移
System.out.println(a >>> 1); // 2  无符号右移

控制流程

条件语句

if...else

java
int score = 85;

if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 80) {
    System.out.println("良好");
} else if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

switch

java
int day = 3;

switch (day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    case 3:
        System.out.println("星期三");
        break;
    default:
        System.out.println("其他");
}

// Java 14+ 新语法
String result = switch (day) {
    case 1 -> "星期一";
    case 2 -> "星期二";
    case 3 -> "星期三";
    default -> "其他";
};

循环语句

for

java
// 基本循环
for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

// 增强型 for 循环(for-each)
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
    System.out.println(num);
}

while

java
int i = 0;
while (i < 5) {
    System.out.println(i);
    i++;
}

do...while

java
int i = 0;
do {
    System.out.println(i);
    i++;
} while (i < 5);

break 和 continue

java
// break - 跳出循环
for (int i = 0; i < 10; i++) {
    if (i == 5) break;
    System.out.println(i);
}
// 输出: 0, 1, 2, 3, 4

// continue - 跳过当前迭代
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) continue;
    System.out.println(i);
}
// 输出: 1, 3, 5, 7, 9

// 带标签的 break
outer:
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (i == 1 && j == 1) break outer;
        System.out.println(i + ", " + j);
    }
}

数组

数组声明与初始化

java
// 声明
int[] arr1;
int arr2[];

// 静态初始化
int[] arr3 = {1, 2, 3, 4, 5};
String[] names = {"张三", "李四", "王五"};

// 动态初始化
int[] arr4 = new int[5];        // 默认值为 0
String[] arr5 = new String[3];  // 默认值为 null

// 先声明后初始化
int[] arr6;
arr6 = new int[]{1, 2, 3};

数组操作

java
int[] arr = {1, 2, 3, 4, 5};

// 访问元素
System.out.println(arr[0]);     // 1
arr[0] = 10;                    // 修改元素

// 数组长度
System.out.println(arr.length); // 5

// 遍历数组
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

// for-each 遍历
for (int num : arr) {
    System.out.println(num);
}

多维数组

java
// 二维数组
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 访问元素
System.out.println(matrix[0][0]);  // 1
System.out.println(matrix[1][2]);  // 6

// 动态创建
int[][] arr = new int[3][4];  // 3行4列

// 遍历
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}

数组工具类

java
import java.util.Arrays;

int[] arr = {5, 2, 8, 1, 9};

// 排序
Arrays.sort(arr);  // [1, 2, 5, 8, 9]

// 二分查找(需要先排序)
int index = Arrays.binarySearch(arr, 5);  // 2

// 填充
int[] arr2 = new int[5];
Arrays.fill(arr2, 100);  // [100, 100, 100, 100, 100]

// 复制
int[] copy = Arrays.copyOf(arr, arr.length);

// 转字符串
System.out.println(Arrays.toString(arr));  // [1, 2, 5, 8, 9]

方法

方法定义

java
public class Calculator {

    // 无返回值方法
    public void printHello() {
        System.out.println("Hello!");
    }

    // 有返回值方法
    public int add(int a, int b) {
        return a + b;
    }

    // 带默认值的方法(方法重载)
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // 可变参数
    public int sum(int... numbers) {
        int total = 0;
        for (int num : numbers) {
            total += num;
        }
        return total;
    }
}

方法调用

java
Calculator calc = new Calculator();

calc.printHello();                  // 调用无返回值方法
int result = calc.add(5, 3);        // 8
int result2 = calc.add(1, 2, 3);    // 6
int result3 = calc.sum(1, 2, 3, 4); // 10

方法重载

java
// 方法名相同,参数列表不同
public class Math {
    public int max(int a, int b) {
        return a > b ? a : b;
    }

    public double max(double a, double b) {
        return a > b ? a : b;
    }

    public int max(int a, int b, int c) {
        return max(max(a, b), c);
    }
}

输入输出

控制台输出

java
System.out.println("Hello");           // 换行输出
System.out.print("Hello");             // 不换行输出
System.out.printf("年龄: %d, 姓名: %s%n", 25, "张三");  // 格式化输出

// 格式化符号
// %d - 整数
// %f - 浮点数
// %s - 字符串
// %c - 字符
// %b - 布尔值
// %n - 换行

控制台输入

java
import java.util.Scanner;

Scanner scanner = new Scanner(System.in);

System.out.print("请输入姓名: ");
String name = scanner.nextLine();

System.out.print("请输入年龄: ");
int age = scanner.nextInt();

System.out.print("请输入工资: ");
double salary = scanner.nextDouble();

System.out.printf("姓名: %s, 年龄: %d, 工资: %.2f%n", name, age, salary);

scanner.close();  // 关闭 Scanner

注释

java
// 单行注释

/*
 * 多行注释
 * 可以跨越多行
 */

/**
 * 文档注释
 * 用于生成 API 文档
 * @param name 姓名
 * @return 问候语
 */
public String greet(String name) {
    return "Hello, " + name;
}

实践示例

java
import java.util.Scanner;

public class StudentManager {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入学生人数: ");
        int count = scanner.nextInt();

        String[] names = new String[count];
        int[] scores = new int[count];

        for (int i = 0; i < count; i++) {
            System.out.print("请输入第 " + (i + 1) + " 个学生的姓名: ");
            names[i] = scanner.next();
            System.out.print("请输入第 " + (i + 1) + " 个学生的成绩: ");
            scores[i] = scanner.nextInt();
        }

        System.out.println("\n学生成绩表:");
        System.out.println("序号\t姓名\t成绩\t等级");
        System.out.println("----------------------------");

        int total = 0;
        int max = scores[0];
        int min = scores[0];

        for (int i = 0; i < count; i++) {
            String grade = getGrade(scores[i]);
            System.out.printf("%d\t%s\t%d\t%s%n", i + 1, names[i], scores[i], grade);

            total += scores[i];
            if (scores[i] > max) max = scores[i];
            if (scores[i] < min) min = scores[i];
        }

        System.out.println("----------------------------");
        System.out.printf("平均分: %.2f%n", (double) total / count);
        System.out.println("最高分: " + max);
        System.out.println("最低分: " + min);

        scanner.close();
    }

    public static String getGrade(int score) {
        if (score >= 90) return "优秀";
        if (score >= 80) return "良好";
        if (score >= 60) return "及格";
        return "不及格";
    }
}