方法的概述
方法: 封装了特定功能的代码块
好处
1.提高代码的复用性 //可以把重复的内容封装到方法内, 需要使用此功能就调用一次方法
(方法里可以写循环,但是循环里不可以写方法,只能调用方法)
2.方法可以实现数据的传递 //今天学方法可以实现数据在一个类中多个方法内传递
区分方法和函数
Java中单独有函数概念[函数式编程], 所以在Java中不习惯把方法叫函数
方法: method
函数: function
方法的定义格式
参数和返回值
1.形式参数[形参]: 在定义方法时, 要求调用者传递的参数 //实际上做运算的参数[数据]
(形参: 是对调用者启动方法的要求)
2..实际参数[实参]: 在调用方法时, 真实传递给方法的数据 //实参: 是真实的数据, 是实际参与运算的
(实参: 是调用者真实传递给方法的数据)
有形参就必须有实参, 无形参就不可以有实参
要什么给什么 -->方法的形参要什么, 调用者启动方法时就需要传递什么
返回值:
调用完方法时,得到的结果; //返回值是一个具体的数据
如果方法调用完毕能得到一个具体的数据 -->称这个方法有返回值
如果方法调用完毕能得到一个具体的数据但是没有返回给调用者 -->称这个方法无返回值
如果方法调用完毕没有得到一个具体的数据 -->称这个方法无返回值
要区分方法的结果和效果
无参无返回值方法
无参无返回值方法: 定义方法时没有形参, 调用完方法时没有结果的方法 //没有结果不代表没有效果
格式:
public static void 方法名(){
方法体;
}
格式解释:
//今天定义方法 无脑写public
public: Java中的访问权限修饰符 -->公共的[是Java中最大的访问权限:整个模块内都可以访问]
//今天定义方法 无脑写static -->原因是 今天的方法都是在main方法中调用, 而main方法时static修饰的
static: Java中的状态修饰符 -->静态的[被static修饰的方法随着类的加载而加载]
void: 无返回值 -->此关键字只在方法知识点上用,只表示无返回值
方法名: 方法名给程序员使用, 使用方法就是调用方法的方法名
命名规则: 小驼峰
(): 方法定义格式上, 方法名后方的小括号内写的是 形式参数[形参]
如果此时看到小括号内没有任何东西, 就代表这个方法是一个无形参的方法!
{}: 代码块 -->包裹逻辑体[方法体]
方法体: 逻辑功能代码
无参无返回值方法的调用格式:n
方法名(); //无参无返回值方法的调用格式只有这一种
无参无返回值方法的流程图
无参无返回值方法的调用内存图
有参无返回值方法
有参无返回值方法: 在定义方法的时候定义了形式参数, 但是方法执行完毕后没有结果返回给调用者 -->重点: 方法的参数传递问题
定义格式:
public static void 方法名(形式参数){
方法体;
}
格式解释:
形式参数列表:
形式参数: 向调用者索要启动方法时的数据 //要什么就写什么
列表: 说明形式参数的数量可以不止一个, 可以是多个 !
形式参数列表的格式:
方法名(数据类型1 形参名1, 数据类型2 形参名2,....)
形式参数列表上的变量定义格式 和 普通变量的定义格式 不同的是少了变量赋值的操作 -->原因是因为: 形式参数列表上的变量要等到调用方法时 由 实际参数赋值
有参无返回值方法的执行流程图
有参无返回值方法的内存图
无参有返回值方法[跳过]
有参有返回值方法[方法的完全体]
有参有返回值方法: 调用方法时需要传递数据, 方法调用完毕后会产生结果返回给调用者的方法;
定义格式:
public static 返回值类型 方法名(){
方法体;
return 返回值;
//return后方不可以写代码了!
}
格式解释:
返回值类型: 方法结果[简称返回值]数据的数据类型
方法返回值类型可以是基本数据类型, 也可以是引用数据类型
如果使用: 拿具体的数据类型名称 去替换 返回值类型 这个位置!
return:
1. 结束方法 -->当方法执行到return语句 方法会立刻结束
2. 把方法的结果[返回值]返回给调用者
返回值: 方法的结果 //要求: 返回值数据的类型必须和返回值类型一致! -->返回值类型约束了返回值的类型
注意: 一个方法只能有一个返回值 //一个方法只能返回一个结果
有返回值方法的调用格式
1.直接调用: 虽然方法执行了, 但是我们忽略了方法的结果 -->无意义
2.输出调用: System.out.println(方法调用);-->有意义, 可以看到方法的结果, 但是不够好, 不能继续实现调用结果的使用
3.赋值调用.var: 拿变量接收方法调用完毕后的结果, 后续可以继续使用方法的结果
格式: 返回值类型 变量名 = 方法名(实参); //快捷键: 方法名(实参).var[强烈建议]
方法的注意事项
1.方法必须定义在类中,其他方法外 //方法与方法之间是并列关系, 不能嵌套, 不能交叉
2.方法要先定义 后调用 --> 不调用不执行, 调用几次执行几次
3.方法必须要在其他方法内调用!
4.当方法被调用时,会立刻进入到方法内执行, 当方法内的代码执行完毕才会继续执行调用方法后方的代码
5.形式参数是局部变量, 但是形式参数可以再方法内不赋值直接使用 //因为此变量是形参
6.如果方法有形参, 那么调用方法时需要传递实际参数[要什么给什么]
7.实参可以是常量,实参也可以是变量, 实参变量的名字没必要和形参变量的名字一致
8.形参实参匹配时, 必须一致的是: 数量, 类型, 类型顺序
9.定义了返回值类型的方法必须有返回值[返回值的类型必须和返回值类型一致]
这里的getSum(scores)调用函数,且括号里是个数组符合下面形参要求的int型数组
10.方法的返回值类型 变相的决定了方法的调用方式有几种 :
无返回值方法[void] : 直接调用
有返回值方法 : a.直接调用 b.输出调用 c.赋值调用
return关键字
在方法内用
作用:
1.结束方法 -->当方法执行到return语句, 方法会立刻结束
2.把方法的结果[返回值]返回给调用者
注意:
1.return后方只可以接 一个结果, 不可以同时返回多个结果 -->如果一定要返回多个结果, 可以把多个结果放到[数组/集合]中,把容器返回 //方法的返回值类型就必须是 容器类型
1.一个方法内只能有一个return吗?错误的, 一个方法内可以有多个return语句, 但是多个return不能同时执行!
2.无返回值的方法内 可以有return吗?可以有, 但是无返回值方法内的return语句只用来结束方法, return的后方不可以接任何值;
3.break 和 return 的区别 :
break 只能结束循环或者switch语句
return 是用来结束方法的 -> 退出的级别是比break高
方法参数传递问题
形参是基本数据类型
形参是引用数据类型
方法的重载特性
方法的重载特性: Overload
现象级: 在同一个类中, 出现了多个同名方法且代码不报错;
方法重载特性是 服务调用者的一个方法特性, 可以让调用者更方便的使用方法 -->未来我们使用的非常多,定义的非常少
方法重载的条件
1.必须得在同一个类中
2.必须方法名同名
3.必须形参列表不一样[个数不一样, 类型不一样, 类型顺序不一样]
4.与 返回值类型, 形参名, 方法体 无关
重载方法的调用 : 不要慌 !
JVM会根据调用方法时,传递的实际参数去启动最匹配的方法 !
可变参数
可变参数 : 关于形参的一种定义格式
可变参数的定义格式 : //可变参数在形参位置定义
方法名(数据类型...变量名)
当方法的形参是可变参数类型,此方法调用时可以传入任意个此类型的实参
注意事项 :
1. 可变参数的本质是数组
2. 可变参数形参的后面 不可以有任意类型的其他形参 //可变参数后面不要再写形参了 !
3. 可变参数的前面 可以有任意类型的其他形参 // 可变参数只能作为最后一个形参
定义方法时的技巧
1. 定义方法时 需不需要定义形参列表 : //一般情况 : 能定义形参就定义形参
a. 如果此方法需要方法外部[调用者]提供数据,那么这个方法就定义成有形参的方法
b. 此方法如果定义了形参,能让方法的复用性增强,那么最好给方法定义形参
2. 定义方法时 到底是定义成有返回值方法还是定义成无返回值方法 :
看你需不需要方法返回一个结果,让调用者继续使用 :
要 : 定义成有返回值
不要 : 定义成无返回值
真正要不要返回值 : 看需求 !!
如果更看重的是 动作 : 建议 void //打印
如果更看重的是 动作做完后的结果 : 建议 有返回值方法 //获取
方法调用时调错的技巧
1. 调用时 方法名报错 :
a. 要么没这个方法
b. 要么方法名写错了
2. 调用时 实参列表报错 : 形参和实参不匹配
3. 调用时 整个调用方法的语句报错 : 调用方式错了