Java编程语言中的方法

Java编程语言中的方法

一、方法(method)/函数(function)的介绍

1、对于一个java程序来说,如果没有“方法”,会存在什么问题?代码无法得到复用。怎么提高复用性,可以定义方法,然后需要使用该功能的时候,直接调用一下方法即可,这样代码就得到复用了。方法定义在类体当中,在一个类当中可以定义多个方法,方法编写的位置没有先后顺序,可以随意,但要注意,方法当中不可以在定义方法

2、在java语言中所有的方法体中的代码都必须遵循自上而下的顺序依次逐行执行

3、main方法不需要程序员手动调用,是由JVM调用的。但是除了main方法之外其他的方法,都需要程序员手动调用,方法只有调用的时候才会执行,方法不调用是不会执行的。

4、方法定义在类体当中,方法定义的先后顺序没有关系,都可以

5、方法怎么定义,语法机制是什么?
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
注意:
(1)方法体由Java语句构成。方法定义之后需要去调用,不调用是不会执行的。
(2)关于修饰符列表:修饰符列表不是必选项,是可选的。
(3)关于返回值类型:首先,返回值类型可以是任何类型,只要是java中合法的数据类型就行,数据类型包括基本数据类型和引用数据类型,也就是说返回值类型可以是:byte short int long float double boolean char String…其次,什么是返回值?返回值一般指的是一个方法执行结束之后的结果。结果通常是一个数据,所以被称为“值”,而且还叫“返回值”。方法就是为了完成某个特定的功能,方法结束之后大部分情况下都是有一个结果的,而体现结果的一般都是数据。数据得有类型。这就是返回值类型。
(4)方法执行结束之后的返回值实际上是给调用者了。谁调用就返回给谁。

(5)当一个方法执行结束不返回任何值的时候,返回值类型也不能空白,必须写上void关键字。所以void表示该方法执行结束后不返回任何结果。
(6)如果返回值类型“不是void”,那么你在方法体执行结束的时候必须使用"return 值;"这样的语句来完成“值”的返回,如果没有“return 值;”这样的语句那么编译器会报错。
(7)“return 值;”这样的语句作用是什么?作用是“返回值”,返回方法的执行结果。
(8)只要有“return”关键字的语句执行,当前方法必然结束。return只要执行,当前所在的方法结束,记住:不是整个程序结束。
(9)如果返回值类型是void,那么在方法体当中不能有“return 值;”这样的语句。但是可以有“return;”语句。这个语句“return;”的作用就是用来终止当前方法的。
(10)方法名只要是合法的标识符就行,要见名知意。(驼峰命名方式)
(11)方法名在标识符命名规范当中,要求首字母小写,后面每个单词首字母大写。。
(12)形式参数列表,简称:形参。注意:形式参数列表中的每一个参数都是“局部变量”,方法结束之后内存释放。形参的个数是:0~N个。
(13)方法体:由Java语句构成。java语句以“;”结尾。方法体当中编写的是业务逻辑代码,完成某个特定功能。在方法体中的代码遵循自上而下的顺序依次逐行执行。在方法体中处理业务逻辑代码的时候需要数据,数据来源就是这些形参。

6、方法定义之后调用语法:类名.方法名(实际参数列表);
注意:
(1)实参和形参的类型必须一一对应,另外个数也要一一对应。
(2)在方法调用的时候,“类名.”是可以省略的。例如:a()方法调用b()方法的时候,a和b方法都在同一个类中,“类名.”可以省略。如果不在同一个类中“类名.”不能省略。

7、break语句和return语句有什么区别?
break用来终止离它最近的循环
return用来终止离它最近的一个方法

二、JVM三块主要的内存:栈内存、堆内存、方法区内存

1、方法区最先有数据:方法区中放代码片段。存放class字节码。堆内存:后面补充。栈内存:方法调用的时候,该方法需要的内存空间在栈中分配。方法不调用是不会在栈中分配空间的。
2、方法只有在调用的时候才会在栈中分配空间,并且调用时就是压栈。方法执行结束之后,该方法所需要的空间就会释放,此时发生弹栈动作。方法调用叫做:压栈,分配空间。方法结束叫做:弹栈,释放空间。
3、栈中存储什么?方法运行过程中需要的内存,以及栈中会存储方法的局部变量。

三、方法递归

1、什么是方法递归?方法自己调用自己,这就是方法递归。
2、当递归时程序没有结束条件,一定会发生:栈内存溢出错误:StackOverflowError所以:递归必须要有结束条件。(这是一个非常重要的知识点)
3、JVM发生错误之后只有一个结果,就是退出JVM。
4、递归假设是有结束条件的,就一定不会发生栈内存溢出错误吗?不一定。假设这个结束条件是对的,是合法的,递归有的时候也会出现栈内存溢出错误。因为有可能递归的太深,栈内存不够了。因为一直在压栈。
5、在实际的开发中,不建议轻易的选择递归,能用for循环while循环代替的,尽量使用循环来做。因为循环的效率高,耗费的内存少。递归耗费的内存比较大,另外递归的使用不当,会导致JVM死掉。(但在极少数的情况下,不用递归,这个程序没法实现,这个需要结合实际情况来做选择)
6、在实际的开发中,假设有一天你真正的遇到了:StackOverflowError那么你怎么解决这个问题?首先第一步:先检查递归的结束条件对不对。如果递归结束条件不对,必须对条件进一步修改,直到正确为止。第二步:假设递归条件没问题,怎么办?这个时候需要手动的调整JVM的栈内存初始化大小。可以将栈内存的空间调大点。第三步:调整了大小,如果运行时还是出现这个错误,没办法,只能继续扩大栈的内存大小。

四、方法重载(overload)

1、“功能相似”的,可以让“方法名相同”,更易于以后的代码编写。在java语言中,是怎么进行方法区分的呢?首先java编译器会通过方法名进行区分。但是在java语言中允许方法名相同的情况出现。如果方法名相同的情况下,编译器会通过方法的参数类型进行方法的区分。
2、什么时候需要考虑使用方法重载?
(1)在同一个类当中,如果“功能1”和“功能2”它们的功能是相似的,那么可以考虑将它们的方法名一致,这样代码既美观,又便于后期的代码编写(容易记忆,方便使用)。注意:方法重载overload不能随便使用,如果两个功能压根不相干,不相似,根本没关系,此时两个方法使用重载机制的话,会导致编码更麻烦。无法进行方法功能的区分。
(2)什么时候代码会发生方法重载?
条件1:在同一个类当中
条件2:方法名相同
条件3:参数列表不同
参数的个数不同算不同
参数的类型不同算不同
参数的顺序不同算不同
(只要同时满足以上3个条件,那么我们可以认定方法和方法之间发生了重载)
注意:
(1)不管代码怎么写,最终一定能让java编译器很好的区分开这两个方法。
(2)方法重载和方法的“返回值类型”无关。
(3)方法重载和方法的“修饰符列表”无关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值