《JAVA从入门到精通视频》笔记七:方法、JVM内存结构

1.方法
       方法是可以完成某个特定功能的并且可以被重复利用的代码片段。在C语言中,方法被称为“函数”。在java中,叫做方法。

2.方法的语法机制
[修饰符列表] 返回值类型 方法名(形式参数列表){
       方法体;
}
注:以上中括号[]里面的内容表示不是必须的,是可选的。

3.形式参数列表
       形式参数列表中的每一个参数都是局部变量,方法结束之后内存释放。形参的个数是:0~N个。
       形参的数据类型起决定性作用,形参对应的变量名是随意的。

4.方法体
       方法体当中编写的是业务逻辑代码,完成某个特定功能。在方法体中的代码遵循自上而下的顺序依次执行。在方法体中处理业务逻辑代码的时候需要数据,数据来源就是形参。

5.方法的调用
类名.方法名(实参);
注意:a()方法调用b()方法的时候,a和b方法都在同一个类中,那么“类名.”可以省略。如果不在同一个类中,“类名.”不能省略。

6.使用方法时注意:
       1)程序开始执行的时候是先执行main方法(入口)。main方法不需要程序员手动调用,是由JVM调用的。
       2)方法是定义在类体中的,方法定义的先后顺序没有要求,可以定义在main方法前,也可以定义在main方法后。
       3)方法名要见名知意。方法名在标识符命名规范当中,要求首字母小写,后面每个单词首字母大写。
       4)当一个方法有返回值的时候,可以选择不接收,这是允许的。

7.JVM内存结构
       JVM中主要的三块内存空间:栈、堆、方法区。
       方法区: 类加载器classloader将硬盘上的xxx.class字节码文件装载到JVM的时候,会将字节码文件存放到方法区当中。也就是说方法区中存储的是代码片段。 方法区中最先有数据。
       栈: 在方法被调用的时候,该方法需要的内存空间在栈中分配。方法不调用是不会在栈中分配空间的。方法只有在调用的时候才会在栈中分配空间,并且调用的时候就是压栈;方法执行结束之后,该方法所需要的空间就会释放,此时发生弹栈动作。

8.方法重载
1)java编译器首先会通过方法名进行方法的区分。但是在java语言中允许方法名相同的情况出现,如果方法名相同,编译器会通过方法的参数类型进行方法的区分。
2)方法重载的优点
       - 代码整齐美观;
       - 功能相似的,可以让方法名相同,更易于以后代码的编写。
3)方法重载的条件
       - 在同一个类中;
       - 方法名相同;
       - 参数列表不同(个数/类型/顺序)。
       只要同时满足以上三个条件,那么我们可以认定方法和方法之间发生了重载机制。
注意:方法重载与方法的返回值类型、方法的修饰符列表无关。

9.方法递归
1)什么是方法递归?
       方法自己调用自己,这就是方法递归。
2)当递归时程序没有结束条件,一定会发生栈内存溢出错误(StackOverFlowError),所以递归必须要有结束条件。
3)即使在方法递归时,方法中有结束条件且结束条件是对的,也有可能发生栈内存溢出错误,这是因为可能递归的太深了,栈内存不够了。
4)在实际的开发中,不建议轻易的选择递归,能用for循环或者while循环代替的尽量使用循环,因为相对来说循环的效率更高,耗费的内存少;递归耗费的内存比较大。另外递归的使用不当,会导致JVM死掉。
5)解决StackOverFlowError问题:
       首先:先检查递归结束的条件对不对,如果递归结束条件不对,必须对条件进一步修改,直到正确为止。
       第二步:若递归条件没问题,需要手动调整JVM的栈内存初始化大小,将栈内存空间调大点。
       第三步:调整了大小,如果运行的时候还是出现了这个错误,那只能继续扩大栈的内存大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java从入门到精通需要学习的内容很多,包括Java基础知识,数据结构,算法,Java集合框架,Java8新特性,操作系统,网络原理,Java多线程及并发编程,Java的IO模型及网络编程,JVM,Mysql,JavaWeb等等。建议按照以下步骤学习Java: 1. 从Java基础知识开始学习,包括语法、变量、运算符、控制流等等。可以通过教材、在线教程或者视频课程学习。 2. 掌握数据结构和算法,这是编程的基础。了解常见的数据结构如数组、链表、栈、队列、树等,以及常见的算法如排序、查找、递归等。 3. 学习Java集合框架,包括List、Set、Map等常用的数据结构。了解它们的特点、用法和性能。 4. 深入学习Java的高级特性,如Java8新特性、Lambda表达式、函数式编程等。这些特性可以提高代码的简洁性和可读性。 5. 学习操作系统和网络原理,了解计算机系统的运行原理和网络通信的基本知识。 6. 掌握Java多线程和并发编程,这是开发高性能应用的基础。 7. 学习Java的IO模型和网络编程,掌握如何进行文件读写和网络通信。 8. 深入了解JVM,包括内存管理、垃圾回收等。这对于优化性能和解决内存泄漏问题非常重要。 9. 学习数据库Mysql,了解数据库的基本概念、SQL语言和常见的数据库操作。 10. 学习JavaWeb开发,包括Servlet、JSP、MVC框架等。掌握常见的Web开发技术和框架。 11. 可以通过阅读书籍、参加培训班、实践项目等方式加深对Java的理解和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值