学习笔记--Java方法中的注意事项
Java方法中的注意事项
方法调用
Java的方法在同一个类中调用,可以省略 类名.
/* 方法调用 */ public class MethodTest03{ public static void main(String[] args){ // 调用方法 MethodTest03.m(); // 对于方法的修饰符列表当中有static关键字: “类名.”可以省略 m(); // 调用其他类【不是本类中的】方法 A.doOther(); // 测试省略 // doOther(); 编译报错 } public static void m(){ System.out.println("m method execute !") m2(); // 在本类中,编译通过 } public static void m2(){ System.out.println("m2 method execute !") } } class A{ public static void doOther(){ System.out.println("A's doOther method invoke !") // m2(); 报错 m2()方法 不在 类A 中不能直接调用 } }
方法程序执行
- 方法中的代码是自上而下的顺序执行即可
- 当前程序没有结束,下一行代码是无法执行
示例:
public class MethodTest04{ public static void main(String[] args){ System.out.println("main begin"); m1(); // main暂定等待m1执行完毕,进入m1 System.out.println("main over"); } public static void m1(){ System.out.println("m1 begin"); m2(); // m1暂定m2执行完毕,进入m2 System.out.println("m1 over"); } public static void m2(){ System.out.println("m2 begin"); System.out.println("m2 over"); } } /* 结果分析: main begin m1 begin m2 begin m2 over m1 over main over main方法最先调用,main方法也是最后结束 最后调用的是m2方法,该方法最先结束 */
浅谈return语句
- 带有return关键字的java语句只要执行,那么所在方法结束
- 在“同一作用域”当中,return语句下面不能编写的任何代码
public class MethodTest05{ public static void main(String[] args){ // hi; 报错,方法带括号 hi(); n(); } /* public static int m(int a){ if (a > 10){ return 1; } } 编译器报错:缺少返回语句, 程序无法保证 "return 1;" 百分之百会执行 */ public static int m(){ int a = 10; if (a > 10){ return 1; // 作用域 if }else{ return 0; // 作用域 else } } public static int n(){ int a = 10; if (a > 10){ return 1; // 作用域 if // System.out.println("Hello"); 报错 } System.out.println("Hello"); // 通过 return 0; // 通过 } public static void hi(){ System.out.println("Hi") } }
- 返回值类型中是void的方法当中使用
return ;
public class MethodTest05{ public static void main(String[] args){ m(); } public static void m(){ for(int i = 0; i < 10; i++){ if(i == 5){ return ; // 不是终止for循环,是终止 m() 方法 // 区别 break; 是终止for循环 } System.out.println("i --> " + i); } System.out.println("Hello World!"); } }
Java在JVM(Java虚拟机)中内存分配
-
方法只是定义,不调用,是不会执行的;JVM 中也不会给该方法分配“运行所属”的内存空间
-
在JVM内存划分有三块主要的内存空间(除此之外还有):
- 方法区内存
- 堆内存
- 栈内存
-
关于栈数据结构:
- 栈:stack,是一种数据结构
- 数据结构反应是数据的存储形态
- 数据结构是独立的学科,不属于任何编程语言的范畴
- 作为程序员需要提前精通:数据结构 + 算法【计算机专业必修】
- 常见数据结构:
-
数组
-
队列
-
栈
-
二叉树
-
哈希表
. . . . . .
-
-
关于【栈/Stack】
基础成分:栈顶元素,栈底元素,栈帧
- 栈帧永远指向栈顶元素
- 栈顶元素处于活跃状态,其它元素静止
- 术语:
- 压栈/入栈/push
- 弹栈/出栈/pop
- 栈数据结构存储数据的特点是;
- 先入后出
- 后入先出
-
方法代码片段存在哪里?方法执行的时候执行过程的内存在哪里分配
- 方法代码片段属于.calss字节码文件的一部分,字节码文件在类加载的时候,将其存放在方法区当中。所以JVM中的三块主要内存空间中方法区内存最先有数据。存放了代码片段。
- 代码片段虽然在方法区内存当中只有一份,但是可以被重复调用。每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配。【栈内存中分配方法运行的所属内存空间】
描述:方法在调用的瞬间,会给该方法分配内存空间,会在栈中会发生压栈动作,方法执行结束之后,给该方法分配的内存空间全部释放,此时发生弹栈动作
- 压栈:给方法分配内存
- 弹栈:释放该方法的内存空间
-
局部变量在方法体在声明,局部变量在运行阶段内存在栈中分配
可以解释为什么局部变量生命周期最短,出了大括号就无法使用,因为方法结束后,进行弹栈释放该方法的内存空间,局部变量同样随方法一同释放
结合栈回顾前面方法程序执行示例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了