Java零基础_零基础学Java必备的学习笔记(九)Java方法详细解析

方法

一、什么是方法,有什么用?

(能够先看一下一个程序若是没有方法,会出现什么问题?)java

方法(英语单词:method)是能够完成某个特定功能的而且能够被重复利用的代码片断。算法

方法的出现,让代码具备了很强的复用性。编程

  • 在C语言中,方法被称为“函数”。markdown

  • 在java中不叫函数,叫作方法。数据结构

你定义了一个/抽取了一个方法出来,而这个方法确没法完成某个功能,数据结构和算法

那么你抽取的这个方法毫无心义。通常一个方法就是一个“功能单元”。ide

假设在之后的开发中,某个功能是能够独立抽取出来的,建议定义为方法,这样之后只要须要这个功能,那么直接调用这个方法便可,而不须要重复编写业务逻辑代码。函数

二、方法最难实现的是:

根据业务怎么进行方法的抽取。oop

方法的返回值类型定义为 什么?学习

方法的名字叫什么?

方法的形式参数列表定义为 什么?

....

一个方法就是一个独立的功能。

三、方法的定义

[修饰符列表] 返回值类型 方法名(形式参数列表){

方法体;

}
复制代码

四、方法的每个细节学习

一、修饰符列表:可选项,目前先写成:public static

二、怎么理解返回值?返回值是一个方法执行结束以后的结果。

三、返回值类型均可以指定哪些类型?

四、返回值和“return语句”的关系。

五、方法名只要是合法的标识符就行,首字母小写,后面每一个单词首字母大写。见名知意。

六、形式参数列表

七、方法体:方法体当中的代码遵循自上而下的顺序依次逐行执行。

八、方法怎么调用?“类名.”何时能够省略?

实际参数列表,简称实参。(调用方法时传递的实际数据。)

实参和形参的关系是一一对应。

五、JVM的内存结构中三块比较重要的内存空间。

方法区:

存储代码片断,存储xxx.class字节码文件,这个空间是最早有数据的,类加载器首先将代码加载到这里。

堆内存:

后面讲(面向对象)

栈内存:

stack栈当中存储什么?

每一个方法执行时所须要的内存空间(局部变量)。

六、关于数据结构中的栈数据结构

原则:

  • 后进先出

  • 先进后出

栈数据结构相关的术语:

  • 栈帧:永远指向栈顶部的元素(栈顶元素具备活跃权。)

  • 栈顶元素

  • 栈底元素

  • 压栈,入栈,进栈,push

  • 弹栈,出栈,pop

昨天还聊了一些:什么是数据结构?什么是算法?

有一本书:数据结构与算法。

数据结构和算法的选择很重要,选择对了程序的执行效率大大提高。

能够很好的优化程序。

七、分析程序运行过程当中的内存变化

方法只定义不调用是不会执行的。

方法调用时:压栈 (在栈中给该方法分配空间)

方法执行结束时:弹栈(将该方法占用的空间释放,局部变量的内存也释放。)

方法重载overload

一、什么状况下咱们考虑使用方法重载机制?

当功能类似的时候,建议将方法名定义为一致的,

这样代码美观,又方便编程。

注意:若是功能不类似,坚定要让方法名不一致。

二、代码知足什么条件的时候构成了方法重载?

  • 条件1:在同一个类当中

  • 条件2:方法名相同

  • 条件3:形式参数列表不一样(类型、个数、顺序)

注意:

方法重载和返回值类型无关,和修饰符列表无关。

三、方法重载的优势?

  • 代码美观

  • 方便代码的编写

方法递归

一、须要理解什么是方法递归?

方法自身调用自身。

二、使用递归的时候,必须添加结束条件,没有结束条件,会发生栈内存溢出错误。

StackOverflowError

缘由:一直压栈,没有弹栈,栈内存不够用。

三、会画出递归方法的内存结构图。

递归的过程中能够将图画出来。

四、可以使用循环代替递归的尽可能使用循环,循环的执行耗费内存少一些,递归耗费内存相对多一些,另外递归使用不当很容易内存溢出,JVM中止工做。

固然,只有极少数状况下,只能用递归,其它代码解决不了问题。

五、当递归有结束条件,而且结束条件合法的时候,就必定不会内存溢出吗?

也不必定。可能递归的太深了。

六、分享了一些递归方面的经验在实际的开发中遇到递归致使的栈内存溢出错误是怎么办?

第一步:先检查结束条件是否正确。

第二步:若是正确,能够调整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:可读性差也能够会牵连到代码的开发效率。

其实计算机内存不差这个。。。。。。

注意:在编码过程当中,有一些变量名是必需要定义的。

由于在后面代码中还须要访问这个数据。重复的访问这个数据。

最后

推荐给你们个比较详细的Java零基础教程,下面这个是我看过的以为挺不错的,值得观看收藏。

分享给你们,点这里

www.bilibili.com/video/BV1Rx…

看完若是对你有帮助,感谢点赞支持~

相关文章
相关标签/搜索