一、方法定义 (MethodDefine)
1、是什么
方法(Method) 是 可实现某一特定功能 且 可被重复使用 的代码片段。
Java中的方法Method其实就是C语言(C++)中的函数Function
2、作用
① 方法可实现某一特定功能
② 方法可实现代码的模块化重用
3、注意点
- 方法定义在类体当中
- 一个类体中可定义多个方法
- 方法的定义无先后顺序
- 方法体中不能再定义方法 (方法的定义不能嵌套包含)
- 方法体中的程序自上而下依次逐行执行
4、🔺语法机制
[修饰符列表] 返回值类型 方法名(形式参数列表) {
方法体;
}
解释:
-
修饰符列表
可选项,不是必须的
[]:中括号里面的内容是可选的。 -
返回值类型
① 可以是任何类型
② 除void以外,其他返回值类型的方法体最后必须要有【return 值;】语句,否则报错。 如果返回值类型是void,那么方法体中不能有【return 值;】语句,否则报错。 但可以有【return;】语句,【return;】语句是用于终止当前的方法。
③【return 值;】中的"返回值"(数据)必须与方法的返回值类型对应相同。 -
方法名
见名知意
小驼峰命名法:第一个单词首字母小写,其他单词首字母大写 -
形式参数列表 (形参)
① 形参中的参数都是局部变量,方法结束后立即释放内存空间。
② 形参的个数0~N个,参数有多个用逗号分隔。
③ 形参的数据类型起决定性作用 -
方法体
由java语句组成,java语句以英语半角分号";"结尾。
这是一个比喻
方法 = 工厂
参数 = 原材料
方法体 = 加工
返回值 = 产出物
二、方法的调用(MethodInvoke)
1、🔺语法机制
① 静态方法的调用 (有带static)
类名.静态方法名(实参);
② 实例方法的调用 (不带static)
引用.实例方法名(实参);
解释:
-
实际参数列表 (实参)
实参和形参的数据类型和个数要一一对应 -
静态方法的调用中
同类调用,[类名.]可省略。
跨类调用,[类名.]不可省略。 -
方法调用的过程
① 找到方法的调用处
② 传递参数
③ 执行方法体
④ [带着返回值]返回调用处
-
注意
方法必须调用才能执行
可以使用变量的形式去接收方法的返回值
变量的数据类型要和返回值类型一致
2、“栗子”
"栗子1"
// 1、代码执行顺序:遵循自上而下的依次执行顺序
/* 2、方法的调用:
5. 类名.方法名(实际参数列表)
同类调用,[类名.]可省略。 ————>若a方法和b方法在同一个类中,a调用b,[类名.]可省略
跨类调用,[类名.]不可省略。 ————>若a方法和b方法在不一个类中,a调用b,[类名.]不可省略
*/
public class MethodTest01 {
public static void main(String[] args) {
System.out.println("main begin!");
MethodTest01.m1(); // 可省略成 m1();
System.out.println("main over");
}
public static void m1() {
System.out.println("MethodTest01's m1 begin!");
MethodTest01.m2(); // 可省略成 m1();
System.out.println("MethodTest01's m1 over");
}
public static void m2() {
System.out.println("MethodTest01's m2 begin!");
A.m1();
System.out.println("MethodTest01's m2 over");
}
}
class A{
public static void m1() {
System.out.println("A's m1 begin!");
A.m2();
System.out.println("A's m1 over");
}
public static void m2() {
System.out.println("A's m2 begin!");
System.out.println("*************************");
System.out.println("A's m2 over");
}
}
/* 运行结果:
main begin!
MethodTest01's m1 begin!
MethodTest01's m2 begin!
A's m1 begin!
A's m2 begin!
*************************
A's m2 over
A's m1 over
MethodTest01's m2 over
MethodTest01's m1 over
main over
*/
"栗子2"
// 分析以下代码,编译器会报错吗?
public class MethodTest02 {
public static void main(String[] args) {
int result = m();
System.out.println(result);
}
public static int m() {
boolean flag = false;
if (flag) {
return 1;
}
}
/* 编译报错:This method must return a result of type int
该方法必须返回一个int类型的结果
分析原因:编译器只负责检查java语法是否合法,不负责运行程序。
编译器只知道flag变量是boolean类型,认为flag的值可能是true,也有可能是是false。
【return 值;】可能执行不到,因此编译报错。
*/
// 正确代码
// (注:编译运行时记得将以上错误的方法注释掉)
// 第一种写法
public static int m() {
boolean flag = false;
if (flag) {
return 1;
}
return 0;
}
// 第二种写法:三目运算符
public static int m() {
boolean flag = false;
return flag? 1: 0;
}
}
