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中的三块主要内存空间中方法区内存最先有数据。存放了代码片段。
    • 代码片段虽然在方法区内存当中只有一份,但是可以被重复调用。每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配。【栈内存中分配方法运行的所属内存空间】

    描述:方法在调用的瞬间,会给该方法分配内存空间,会在栈中会发生压栈动作,方法执行结束之后,给该方法分配的内存空间全部释放,此时发生弹栈动作

    • 压栈:给方法分配内存
    • 弹栈:释放该方法的内存空间
  • 局部变量在方法体在声明,局部变量在运行阶段内存在栈中分配

    可以解释为什么局部变量生命周期最短,出了大括号就无法使用,因为方法结束后,进行弹栈释放该方法的内存空间,局部变量同样随方法一同释放

    结合回顾前面方法程序执行示例



Java方法


合集总目录:学习笔记--Java合集



学习笔记--Java方法中的注意事项的更多相关文章

  1. [学习笔记]Java代码中各种类型变量的内存分配机制

    程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: (1) 寄存器 这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而 ...

  2. Java学习笔记之---方法和数组

    Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...

  3. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  4. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

  5. 并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理

    (1)jdk中原子类的使用: jdk5中提供了很多原子类,它会使变量的操作变成原子性的. 原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程 ...

  6. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  7. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar中的类解压后放在运行jar中

    前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中 使用7z打开压缩包,查看所有依赖的jar都被解压以包名及class的方式存储在了运行jar中,此时jar的 ...

  8. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中

    本文需要参考前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中 上文是导出的运行的依赖jar被放在了子目录中,本文是将依赖jar放在可运行jar的本身,这样发布的 ...

  9. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中

    工程创建可参考前文: [学习笔记] 在Eclipse中使用Hibernate,并创建第一个工程,数据库为Oracle XE 在工程上鼠标右键: 找到java 选择 Runable JAR file N ...

  10. Web安全学习笔记 SQL注入中

    Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...

随机推荐

  1. es 排序突然很慢的原因

    今天突然之间发现一个访问es的查询很慢.由刚上线之前测试的100ms直接到了5s左右.瞬间懵逼. 这个用户索引大概200w的数据. 查询语句如下 GET /user/_search{"fro ...

  2. matplotlib学习:搞明白plt. /ax./ fig

    原文章一:https://zhuanlan.zhihu.com/p/93423829,原文章二:https://jishuin.proginn.com/p/763bfbd23e20    感谢作者的讲 ...

  3. vue 的时间格式化

    大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...

  4. SHA256/SHA512码计算方式

    (1)Windows系统计算SHA256/SHA512码的方式: certutil -hashfile yourfilename SHA256/SHA512 以计算readme.txt文档进行说明: ...

  5. Redis 常用的数据结构简介与实例测试【Redis 系列二】

    〇.都有哪些数据结构? Redis 提供了较为丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合).Zset(有序集合). 随着 Redis 版本的 ...

  6. Windows10 LTSC版,比Win7还干净

    在Windows操作系统的发展历程中,每一个版本都承载着微软对用户需求的深度理解和技术创新.其中,Windows 7以其稳定.高效和简洁的特点,赢得了众多用户的喜爱. 然而,随着技术的不断进步和用户需 ...

  7. switch的穿透

      // switch 的 穿透         // 什么是switch的穿透         // 如果在 switch 中没有定义break , switch 会从定位的程序,一直执行到所有sw ...

  8. 手动解压安装mysql8.0 on windows my.ini

    1.解压"mysql-8.0.24-winx64.zip"到d:\Soft 2.在"D:\Soft\mysql-8.0.24-winx64"目录新建一个my.i ...

  9. 使用腾讯元宝+markmap生成思维导图

    AI可以帮助我们进行提炼和总结, 节省了大量搜索资料和查阅的时间,像上图这张思维导图,就是使用腾讯元宝大模型进行内容提炼,再使用markmap生成思维导图,下面讲解下详细实现步骤: 一.工具准备 腾讯 ...

  10. Django-CBV和跨域请求伪造

    1. django模式 def users(request): user_list = ['alex','oldboy'] return HttpResponse(json.dumps((user_l ...