Java非构造方法(普通方法)
一、什么是普通方法
普通方法就是定义在类里面、用来描述对象能"做什么"的代码块。
构造方法是"出生时的初始化",普通方法是"出生后能干的事"。
点击查看代码
class Student {
String name;
int age;
// 构造方法——出生设置
Student(String name, int age) {
this.name = name;
this.age = age;
}
// 普通方法——出生后的行为
void read() {
System.out.println(name + "正在读书");
}
}
二、普通方法的语法结构
[权限修饰符] [static] 返回值类型 方法名([参数列表]) {
// 方法体
return 返回值; // 如果有返回值>
}
逐个拆开看:
| 组成部分 | 说明 | 是否必须 |
|---|---|---|
| 权限修饰符 | public / private / protected / 默认 | 可选(默认是包可见) |
| static | 加了属于类,不加属于对象 | 可选 |
| 返回值类型 | void(无返回值)或具体类型(int/String 等) | 必须写 |
| 方法名 | 驼峰命名,见名知意 | 必须 |
| 参数列表 | 传入的数据,可为空 | 可选 |
| return | 有返回值时必须,无返回值时可省略或 return; | 视情况 |
三、与构造方法的对比
| 对比项 | 构造方法 | 普通方法 |
|---|---|---|
| 方法名 | 与类名一致 | 自定义 |
| 返回值 | 没有(连 void 都不写) | 必须声明(写 void 或具体类型) |
| 调用时机 | new 时自动调用 | 必须手动调用 |
| 调用方式 | new 类名() | 对象名.方法名() |
| 能否重载 | ✅ 能 | ✅ 能 |
| 能否被 static 修饰 | ❌ 不能 | ✅ 能 |
四、普通方法的调用
4.1 非 static 方法(实例方法)
必须通过对象调用:
点击查看代码
Student stu = new Student("小明", 20);
stu.read(); // ✅ 通过对象调用
stu.setAge(21); // ✅
4.2 static 方法(类方法)
通过类名直接调用,不需要 new:
点击查看代码
class MathUtil {
static int add(int a, int b) {
return a + b;
}
}
// 调用
int result = MathUtil.add(3, 5); // ✅ 不用 new
4.3 方法内部调用
同一类里的方法可以互相调用:
点击查看代码
class Student {
String name;
void read() {
System.out.println(name + "正在读书");
writeNote(); // ✅ 直接调用同类其他方法
}
void writeNote() {
System.out.println(name + "在做笔记");
}
}
五、返回值
5.1 有返回值
点击查看代码
int getAge() {
return this.age;
}
调用时可以接收:
点击查看代码
int a = stu.getAge();
System.out.println(a);
5.2 无返回值(void)
点击查看代码
void read() {
System.out.println(name + "正在读书");
// 不需要 return,或者写 return; 提前结束
}
点击查看代码
class Student {
// 版本1:输出一句话
void read() {
System.out.println(name + "正在读书");
}
// 版本2:读指定书名
void read(String book) {
System.out.println(name + "正在读《" + book + "》");
}
// 版本3:读指定书若干页
void read(String book, int pages) {
System.out.println(name + "正在读《" + book + "》,已读" + pages + "页");
}
}
调用时编译器自动匹配:
点击查看代码
stu.read(); // 调用版本1
stu.read("Java入门"); // 调用版本2
stu.read("Java入门", 50); // 调用版本3
七、参数传递
7.1 基本类型——值传递
点击查看代码
void change(int x) {
x = 100;
}
int a = 10;
stu.change(a);
System.out.println(a); // 还是 10,没变
7.2 引用类型——地址的拷贝
点击查看代码
void changeAge(Student s) {
s.age = 100;
}
Student stu = new Student("小明", 20);
stu.changeAge(stu);
System.out.println(stu.age); // 100,变了
八、常见错误
| 错误 | 原因 | 修正 |
|---|---|---|
| 方法里写 void 但又有 return 值 | void 表示无返回值 | 去掉 void 写具体类型,或去掉 return 的值 |
| 非 static 方法在 main 里直接调用 | main 是 static,不能直接调非 static | 先 new 对象再调用 |
| 方法名和类名一样但写了返回值 | 这不是构造方法,是普通方法 | 确认意图:要构造方法就删返回值,要普通方法就改名 |
| 重载时只改返回值不改参数 | 不算重载,编译报错 | 改参数列表 |
| 忘记 return | 声明了返回值但没写 return | 补上 return 对应类型的值 |
九、核心结论
1.普通方法描述对象的行为,有返回值类型(写 void 或具体类型)。
2.非 static 方法必须通过对象调用,static 方法通过类名调用。
3.普通方法可以重载,规则跟构造方法一样——看参数列表。
4.Java 只有值传递,引用类型传的是地址的拷贝。
5.方法里 this 同样指向当前对象(非 static 方法中)。

浙公网安备 33010602011771号