1. 方法
- 类拥有的代码块,具有独立功能。
- 调用时,在栈中创建独立空间,执行完毕后释放。
- 方法签名:方法名+参数列表。
1.1语法
// 声明方法:
修饰符 返回值类型 方法名(参数列表) { // 统称方法头
// 方法体
}
// 示例:
void 方法名(参数类型... 形参名) { // 可变参数
// ...
}
- 参数数量可以为0或多个。
- 调用方法的方式:
- 无参:
方法名();
- 有参:
方法名(参数);
- 接收返回值:
数据类型 变量名 = 方法名(参数);
- 无参:
1.2函数
- 方法必须属于某个类,函数可以不属于。
- Java仅有方法,C仅有函数,C++和Python取决于是否在类中。
1.3注意事项
- 返回值:
- 定义方法时需明确返回值类型,无返回值用
void
。 return
会立即结束方法,且只能有一个返回值。void
类型可省略return
或单独用来结束方法体。
- 定义方法时需明确返回值类型,无返回值用
- 参数:
- 方法定义时,参数类型与变量名要成对出现,多参数间用逗号分隔。
- 形式参数:方法定义中的参数。如:
void setAge(int number)
。 - 实际参数:调用方法时的参数。如:
setAge(10)
。 - 实参类型影响传递方式:基本类型传值,引用类型传地址。
- 方法结束方式:
- 正常结束:遇到返回字节码指令,可能返回值。
- 异常结束:遇到未处理异常,不返回值。
2 方法重载
- 同类中多个同名但参数不同的方法。
2.1注意
- 编译时多态性:编译阶段确定调用方法。
- 方法重写是运行时多态性。
2.2示例
public class MethodDemo {
public static void fn(int a) { /* ... */ }
public static int fn(double a) { /* 参数类型不同 */ }
public static int fn(int a, int b) { /* 参数个数不同 */ }
}
3 构造方法
- 初始化对象的特殊方法。
- 创建对象时自动调用,也可接受参数以定制对象。
- 类中若无构造方法,编译器提供默认无参构造方法。
3.1格式
- 方法名与类名相同。
- 无返回值类型,可重载。
3.2示例
public class Student {
public Student() {
// 无参构造方法
}
public Student(String name, int age) {
this.name = name;
this.age = age;
// 有参构造方法
}
}
4 可变参数
- 使用省略号
...
表示接受任意数量参数。 - 参数被封装为数组,通过数组对象访问。
- 一个方法中只能有一个可变参数,且需放在最后。
4.1使用格式
/**方法的doc文档**/
返回值类型 方法名(参数类型... 形参名) { }
5. 桥接方法(Bridge Method)
- Java编译器生成的方法,用于泛型和类型擦除。
- 不直接出现在代码中,但存在于字节码中。
5.1意义
- 使用Java反射API中
getMethods()
时可见。 Method
类的isBridge()
判断是否为桥接方法。
5.2示例
背景:
public class Parent<T> {
public T doSomething(T param) {
return param;
}
}
public class Child extends Parent<String> {
@Override
public String doSomething(String param) {
return param;
}
}
class 中会在 Child 中生成:
public Object doSomething(Object param) {
return doSomething((String) param);
}