1、 方法的概念以及用处
方法(method):是可以完成某个特定的并且可以重复利用的代码片段
在C语言中,方法被称为"函数"。在Java中不叫函数,叫做"方法"。
假设在以后的开发中,某个功能是可以独立抽取出来的,可以定义为方法,这样只要需要这个功能,就可以直接调用这个方法,而不需要重复编写业务逻辑代码。提高了代码的复用性。
2、 方法的定义以及语法机制
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
注意:[]括号中的内容不是必选项,是可选的。方法体由Java语句构成。
2.1、 关于修饰符列表
目前来说,写成public static 即可
2.2、 关于返回值类型
第一、 返回值类型可以是任何类型,只要是Java中合法的数据类型就行,数据类型包括基本数据类型和引用数据类型;
第二、 什么是返回值?
返回值一般指的是一个方法执行结束后的结果。结果通常是一个数据,所以被称为"值",而且还叫"返回值"。
方法执行结束之后的返回值实际上是给调用者了。谁调用就返回给谁。
第三、 当一个方法执行结束不返回任何返回值时,返回值类型也不能为空白,必须写上void关键字。void表示该方法执行结束后不返回任何返回值。而如果返回值类型是void,那么方法体中不能有"return 值;"这样的语句,可以有"return ;"这样的语句,用来终止当前方法。
第四、 如果返回值类型"不是void",那么在方法体执行结束的时候必须使用"return 值;"这样的语句来完成"值"的返回,如果没有"return 值;"这样的语句,那么编译器会报错。也就是,除了void之外,剩下的都必须有"return 值;"这样的语句。而且return的值类型要和返回值类型一致。
第五、 只要有"return" 关键字的语句执行,当前方法必然结束。return只要执行,当前所在的办法结束。注:不是整个程序结束。
2.3、 方法名
方法名要见名知意。(驼峰命名法)
方法名需要是合法的标识符,且第一个单词首字母小写,之后单词首字母大写。
2.4、 形式参数列表(简称:形参)
形式参数列表中的每一个参数都是"局部变量",方法结束后内存释放。形参的个数是0~N个。
形参有多个的话使用"逗号 , "隔开。(英文的 ,)
形参的数据类型起决定性作用,形参对应的变量名是随意的。
3、 方法的调用
3.1、 语法
类名.方法名(实际参数列表);
实参和形参的类型必须一一对应,另外个数也要一一对应。
3.2、 在方法调用的时候,如果两个方法在同一个类中,那么"类名."可以省略。如果不在同一个类中,“类名.” 不能省略,必须存在。
3.3、 调用方法不一定写到main方法中,其他方法也都可以。
3.4、 break; 语句和 return ;语句的区别
break ; 用来终止switch和离他最近的循环。
return ; 用来终止离他最近的一个方法。
二者不在一个级别。
4、 方法重载(overload)
4.1、 为什么要使用方法重载?
4.1.1、 不使用方法重载的缺点:
缺点1: 代码不美观。(不是最重要的)
缺点2: 程序员需要记更多的方法名。
4.1.2、 使用方法重载的优点:
优点1: 代码整齐美观。
优点2: “功能相似"的,可以让"方法名相同”,更易于以后的代码编写。
4.2、 什么时候需要考虑使用方法重载?
在同一个类中,如果"功能1" 和 “功能2” 他们的功能是相似的,那么可以考虑将他们的方法名一致,这样代码既美观,又便于后期的代码编写(容易记忆,方便使用)。
注意: 方法重载overload不能随便使用,如果两个功能压根不想干,不相似,根本没关系,此时两个方法使用重载机制的话,会导致编码更麻烦。无法进行方法功能的区分。
4.3、 什么时候代码会发生方法重载?
条件1: 在同一个类中
条件2: 方法名相同
条件3: 参数列表不同 {
参数的个数不同算不同
参数的类型不同算不同
参数的顺序不同算不同 }
只要同时满足了以上3个条件,那么我们可以认定方法和方法之间发生了重载机制。
注意: 不管代码怎么写,最终一定能让Java编译器很好的区分开这两个方法。
4.4、 方法重载和方法的返回值类型无关。
方法重载和方法的修饰符列表无关。
5、 方法的递归
5.1、 什么是方法递归?
方法自己调用自己,就是方法递归。
5.2、 使用递归时,必须添加结束条件,没有结束条件,会发生栈内存溢出错误。 (StackOverflowError)
原因: 一直压栈,没有弹栈,栈内存不够用。
5.3、 能够使用循环代替递归的尽量使用循环,循环的执行耗费内存少一些,递归耗费内存相对多一些,另外递归使用不当很容易内存溢出,JVM停止工作。当然,只有极少数情况下,只能用递归,其他代码解决不了问题。
5.4、 当递归有结束条件,并且结束条件合法的时候,也有可能内存溢出。可能是递归的太深了。
5.5、 在实际的开发中遇到递归导致的栈内存溢出错误时怎么办?
第一步: 先检查结束条件是否正确。
第二步: 如果正确,可以调整JVM的栈内存大小。(java -X)。