方法与数组¶
方法(method)¶
Java 的方法对比 JS 函数,有几个硬规矩:
- 必须声明返回类型(不返回就写
void); - 必须挂在类里——没有顶层函数;
- 参数必须写类型;
- 支持方法重载(同名、参数列表不同)——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¶
对标 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: 上一章:流程控制 | 下一章:面向对象基础