跳转至

方法与数组

方法(method)

Java 的方法对比 JS 函数,有几个硬规矩:

  1. 必须声明返回类型(不返回就写 void);
  2. 必须挂在类里——没有顶层函数;
  3. 参数必须写类型
  4. 支持方法重载(同名、参数列表不同)——JS 没有这个。
static int add(int a, int b) {   // 返回 int,两个 int 参数
    return a + b;
}
static int add(int a, int b, int c) {  // 重载:三个参数
    return a + b + c;
}

static 是什么

static 方法属于"类本身",不依赖对象就能调用。对标 JS:就像挂在对象/模块上的普通函数。 第 07 章讲对象后,你会看到"实例方法"(不带 static)。main 方法必须是 static,因为程序启动时还没有对象。

可变参数 varargs

static int sum(int... values) { }   // int... 等价于 int[]
sum(1, 2, 3, 4);                    // 随便传几个

对标 JS 的剩余参数 function sum(...values)

数组

int[] arr = new int[3];          // 定长 3,元素默认 0
String[] names = {"Tom", "Jerry"};   // 创建并赋值
arr.length;                      // 长度(属性,不是方法)
Arrays.toString(arr);            // 打印内容 [10, 20, 0]
Arrays.sort(arr);                // 排序

数组是定长的

Java 数组创建后长度不可变。JS 的 Array 能随意 push,Java 数组不行。 要"动态长度",用 List(第 13 章)或 ArrayList

完整可运行示例

package com.javaglm.language.ch06;

import java.util.Arrays;

/**
 * 第 06 章 · 方法与数组。
 * 方法:必须有返回类型、必须挂在类里、参数要写类型。
 * 数组:长度固定(创建后不可变),要"动态长度"请用 List(第 13 章)。
 */
public class MethodsArraysDemo {

    public static void main(String[] args) {
        // 1. 调用方法
        int s = add(2, 3);
        System.out.println("add(2,3) = " + s);

        // 2. 方法重载(同名、参数不同)—— JS 没有这个特性
        System.out.println("add(1,2,3)   = " + add(1, 2, 3));
        System.out.println("add(1.5,2.5) = " + add(1.5, 2.5));

        // 3. 可变参数 varargs(本质是数组)
        System.out.println("sum = " + sum(1, 2, 3, 4, 5));

        // 4. 数组:声明 + 创建 + 访问
        int[] arr = new int[3];        // 长度为 3,元素默认 0
        arr[0] = 10;
        arr[1] = 20;
        System.out.println("arr = " + Arrays.toString(arr));   // [10, 20, 0]
        System.out.println("arr.length = " + arr.length);     // 3

        // 5. 数组创建时直接赋值
        String[] names = {"Tom", "Jerry", "Spike"};
        for (String name : names) {
            System.out.println("name = " + name);
        }

        // 6. 数组是定长的:下面这行会运行时抛异常
        // arr[5] = 99;  // ArrayIndexOutOfBoundsException

        // 7. 排序
        int[] nums = {5, 2, 8, 1};
        Arrays.sort(nums);
        System.out.println("sorted = " + Arrays.toString(nums));  // [1, 2, 5, 8]
    }

    /** 两个 int 相加。返回类型写在方法名前面。 */
    static int add(int a, int b) {
        return a + b;
    }

    /** 重载:三个 int。JS 做不到真正的重载,只能靠 arguments/默认值模拟。 */
    static int add(int a, int b, int c) {
        return a + b + c;
    }

    /** 重载:double 版本。 */
    static double add(double a, double b) {
        return a + b;
    }

    /** 可变参数:int... 等价于 int[]。 */
    static int sum(int... values) {
        int total = 0;
        for (int v : values) {
            total += v;
        }
        return total;
    }
}

前端人对照

JS Java 备注
function add(a,b){} int add(int a,int b){} 返回类型 + 参数类型
重载(不支持) 真正的重载 按参数列表区分
...rest int... values 可变参数
[1,2,3](可变长) int[](定长) 动态长度用 List
arr.length arr.length 都是属性
arr.push() 不存在 List.add()

:octicons-arrow-left-16: 上一章:流程控制 | 下一章:面向对象基础