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. 【winform】 WeifenLuo.WinFormsUI.Docking.dll 组件学习

    这个组件是用来 对窗体的布局用的,可搭建一个管理系统的ui框架. 使用例子:https://blog.csdn.net/zzzzzzzert/article/details/80791554

  2. 基于pulp的线性优化问题:微电网日前优化调度(复现)

    摘录来源:(71条消息) 微电网日前优化调度入门:求解一道数学建模题_我不是玉的博客-CSDN博客 学习记录与复现 问题描述 问题出自第十届"中国电机工程学会杯"全国大学生电工数学 ...

  3. windows7 + Qt(MSVC2017) + VS2019安装配置

    在windows下使用qt时调用QWebEngineView 库会报错,即使在pro文件QT += webenginewidgets也找不到, 而在MinGW和MSVC2015的路径下我并没有找到这个 ...

  4. SwiftObject 杂记

    一.前言 看了一段时间的Swift,慢慢转变了一些对Swift的看法. Swift作为苹果新晋的开发语言.具有模板编程.函数编程.协议多继承.vTable静态绑定.值引用类型区分.Option类型等动 ...

  5. exception EXC_RESOURCE - WAKEUPS 分析(二)

    一.问题: 直播助手在使用ReplayKit2 Extension的过程中,ReplayKit2的Upload进程工作在后台模式,苹果对处于后台的进程进行了内存和CPU资源的限制. 对于内存: 每种E ...

  6. MySQL学习笔记-数据控制语言

    SQL-数据控制语言(DCL) DCL语句用于管理数据库用户,控制数据库的访问权限 一. 管理用户 1. 查询用户 # 访问mysql数据库 use mysql; #查询user表 select * ...

  7. itest(爱测试)开源接口测试&敏捷测试管理平台8.1.0发布

    (一)itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1,又有丰富的统计分析.可按测试包分配测试用 ...

  8. vue3项目安装依赖报错 npm ERR! code ERESOLVE

    vue3项目安装依赖报错 npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While reso ...

  9. MS SQL SERVER 创建表、索引、添加字段等常用脚本

    创建表: if not exists ( select 1 from sysobjects where id=object_id('PayChannelNm') ) create table [dbo ...

  10. Diffusers实战

    Smiling & Weeping ---- 一生拥有自由和爱,是我全部的野心 1. 环境准备 %pip install diffusers from huggingface_hub impo ...