办法
1、什么是办法,有什么用?
(能够先看一下一个程序如果没有办法,会呈现什么问题?)
办法(英语单词:method)是能够实现某个特定性能的并且能够被反复利用的代码片段。
办法的呈现,让代码具备了很强的复用性。
在 C 语言中,办法被称为“函数”。
在 java 中不叫函数,叫做办法。
你定义了一个 / 抽取了一个办法进去,而这个办法确无奈实现某个性能,
那么你抽取的这个办法毫无意义。个别一个办法就是一个“性能单元”。
假如在当前的开发中,某个性能是能够独立抽取进去的,倡议定义为办法,这样当前只有须要这个性能,那么间接调用这个办法即可,而不须要反复编写业务逻辑代码。
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:可读性差也能够会牵连到代码的开发效率。
其实计算机内存不差这个。。。。。。
留神:在编码过程中,有一些变量名是必须要定义的。
因为在前面代码中还须要拜访这个数据。反复的拜访这个数据。