方法
1、什么是方法,有什么用?
(可以先看一下一个程序如果没有方法,会出现什么问题?)
方法(英语单词:method)是可以完成某个特定功能的并且可以被重复利用的代码片段。
方法的出现,让代码具有了很强的复用性。
在C语言中,方法被称为“函数”。
你定义了一个/抽取了一个方法出来,而这个方法确无法完成某个功能,
那么你抽取的这个方法毫无意义。一般一个方法就是一个“功能单元”。
假设在以后的开发中,某个功能是可以独立抽取出来的,建议定义为方法,这样以后只要需要这个功能,那么直接调用这个方法即可,而不需要重复编写业务逻辑代码。
2、方法最难实现的是:
- 根据业务怎么进行方法的抽取。
- 方法返回值类型定义为什么?
- 方法的名字叫什么?
- 方法的形式参数列表定义为 什么?
- ....
一个方法就是一个独立的功能。
3、方法的定义
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
4、方法的每一个细节学习
1、修饰符列表:可选项,目前先写成:public static
2、怎么理解返回值?返回值是一个方法执行结束之后的结果。
3、返回值类型都可以指定哪些类型?
4、返回值和“return语句”的关系。
5、方法名只要是合法的标识符就行,首字母小写,后面每个单词首字母大写。见名知意。
6、形式参数列表
7、方法体:方法体当中的代码遵循自上而下的顺序依次逐行执行。
8、方法怎么调用?“类名.”什么时候可以省略?
实际参数列表,简称实参。(调用方法时传递的实际数据。)
实参和形参的关系是一一对应。
5、JVM的内存结构中三块比较重要的内存空间。
存储代码片段,存储xxx.class字节码文件,这个空间是最先有数据的,类加载器首先将代码加载到这里。
后面讲(面向对象)
stack栈当中存储什么?
每个方法执行时所需要的内存空间(局部变量)。
6、关于数据结构中的栈数据结构
原则:
- 后进先出
- 先进后出
栈数据结构相关的术语:
- 栈帧:永远指向栈顶部的元素(栈顶元素具有活跃权。)
- 栈顶元素
- 栈底元素
- 压栈,入栈,进栈,push
- 弹栈,出栈,pop
昨天还聊了一些:什么是数据结构?什么是算法?
有一本书:数据结构与算法。
数据结构和算法的选择很重要,选择对了程序的执行效率大大提升。
可以很好的优化程序。
7、分析程序运行过程中的内存变化
方法只定义不调用是不会执行的。
方法调用时:压栈 (在栈中给该方法分配空间)
方法执行结束时:弹栈(将该方法占用的空间释放,局部变量的内存也释放。)
方法重载overload
1、什么情况下我们考虑使用方法重载机制?
当功能相似的时候,建议将方法名定义为一致的,
这样代码美观,又方便编程。
注意:如果功能不相似,坚决要让方法名不一致。
2、代码满足什么条件的时候构成了方法重载?
条件1:在同一个类当中
条件2:方法名相同
条件3:形式参数列表不同(类型、个数、顺序)
注意:
方法重载和返回值类型无关,和修饰符列表无关。
3、方法重载的优点?
代码美观
方便代码的编写
方法递归
1、需要理解什么是方法递归?
方法自身调用自身。
2、使用递归的时候,必须添加结束条件,没有结束条件,会发生栈内存溢出错误。
StackOverflowError
原因:一直压栈,没有弹栈,栈内存不够用。
3、会画出递归方法的内存结构图。
递归的过程当中可以将图画出来。
4、能够使用循环代替递归的尽量使用循环,循环的执行耗费内存少一些,递归耗费内存相对多一些,另外递归使用不当很容易内存溢出,JVM停止工作。
当然,只有极少数情况下,只能用递归,其它代码解决不了问题。
5、当递归有结束条件,并且结束条件合法的时候,就一定不会内存溢出吗?
也不一定。可能递归的太深了。
6、分享了一些递归方面的经验在实际的开发中遇到递归导致的栈内存溢出错误是怎么办?
第一步:先检查结束条件是否正确。
第二步:如果正确,可以调整JVM的栈内存大小。(java -X)
我们要一味地将变量缩减吗?代码缩减吗?这样好吗?
public class Test{
public static void main(String[] args){
/*
int i = 100;
System.out.println(i);
*/
System.out.println(100);
boolean flag = test();
if(flag){
...
}
// 缩减之后的
if(test()){
....
}
}
public static boolean test(){
return true;
}
}
太计较变量的数量会有什么后果呢?(运行效率不会低)
- 后果1:代码的可读性差。
- 后果2:可读性差也可以会牵连到代码的开发效率。
其实计算机内存不差这个。。。。。。
注意:在编码过程中,有一些变量名是必须要定义的。
因为在后面代码中还需要访问这个数据。重复的访问这个数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。