当前位置: 首页 > news >正文

4.方法的使用

方法是指一段具有独立功能的代码块,只有被调用时才会执行

方法的主要作用体现在:

  1. 代码组织:将原本挤在一起的臃肿代码按照功能进行分类管理

    • 例如:将用户注册的验证逻辑、数据库操作、结果返回等分离成不同方法
  2. 提高复用性:相同功能的代码只需编写一次,多处调用

    • 例如:计算两个数最大值的方法可以在程序多个地方复用

方法的定义和调用

public static void 方法名() {// 方法体
}调用方式:方法名();

注意:

        1.平级关系:方法之间是并列关系,不允许嵌套定义

            错误示例:

public static void methodA() {public static void methodB() { // 不允许在方法内定义方法// ...}
}

        2.调用执行:方法不调用就不会执行

                即使定义了多个方法,如果没有调用它们,这些方法都不会执行

        3.执行顺序:方法的定义顺序与执行顺序无关,执行顺序取决于调用顺序

方法的内存机制

        方法在内存中的生命周期

  1. 未调用时:存放在方法区的字节码文件中
  2. 调用时:进入栈内存运行
  3. 执行完毕:从栈内存中退出

         Java内存结构(部分)     

           方法区:存储加载的字节码(.class)文件

                        字节码文件是源代码编译后的结果,保留了原代码的结构

           栈内存:方法运行时使用的内存区域                 

                        遵循"先进后出"的原则,方法调用形成调用栈

public static void main(String[] args) {System.out.println("开始");getMax();System.out.println("结束");
}public static void getMax() {int num1=10;int num2=20;int max = num1>num2?num1:num2;System.out.println(max);
}

  代码执行流程详解

        

  1. main方法入栈:虚拟机自动调用main方法,main方法进入栈内存
  2. 打印"开始":执行第一条语句,控制台输出"开始"
  3. 调用getMax方法
    • getMax方法进入栈内存
    • 执行getMax方法体:
      • 定义变量num1=10, num2=20
      • 计算最大值并存储在max变量中
      • 打印最大值20到控制台
  4. getMax方法出栈:方法执行完毕,退出栈内存
  5. 继续执行main方法:打印"结束"
  6. main方法出栈:程序执行完成

带参数方法的定义和调用

public static void 方法名(数据类型 变量名) {// 方法体
}
// 多个参数:
public static void 方法名(数据类型 变量1, 数据类型 变量2, ...) {// 方法体
}调用方法:方法名(参数值)

  参数类型

  • 形参(形式参数):方法定义时声明的参数  
  • 实参(实际参数):方法调用时传入的具体值

带返回值的定义和调用

public static 返回的数据类型 方法名(数据类型 变量名,……){方法体; return 值}调用的方式:返回的数据类型  变量名 = 方法名(参数值)

方法通用定义格式

public static 返回值类型 方法名(数据类型 变量名,……){方法体;return 数据;
}

定义方法时,要做到两个明确:

        明确参数:主要明确参数的类型和数量

        明确返回值类型:主要时明确方法操作完毕后是否有结果数据,如果有,写对应的数据类型,如果没有,写void

方法的常见问题

        1.方法不调用不执行

        2.方法与方法之间是平级关系,不能嵌套定义

        3.方法的编写顺序和执行顺序无关

        4.方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写,如果要写return,后面不能跟具体的数据

        5.return语句下面,不能编写代码,因为永远执行不到,属于无效代码x

http://www.xdnf.cn/news/1215109.html

相关文章:

  • OmniParser:提升工作效率的视觉界面解析工具
  • 【深度学习新浪潮】3D城市建筑多样化生产的研发进展调研
  • Kafka 单机多 Broker 实例集群搭建 | 详情
  • 【机器学习】机器学习新手入门概述
  • 如何将DICOM文件制作成在线云胶片
  • React 服务端渲染(SSR)详解
  • Java注解与反射:从自定义注解到框架设计原理
  • 构建智能体(Agent)时如何有效管理其上下文
  • Python奇幻之旅:从零开始的编程冒险
  • 光谱相机自动调焦曝光控制
  • 关于MyBatis 的懒加载(Lazy Loading)机制
  • 基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(六)
  • STM32F1 Flash的操作
  • 如何将word里面的英文引号改为中文引号?如何将Times New Roman字体的符号改为宋体?
  • 1.5.Vue v-for 和 指令修饰符
  • Flow Model Flow Matching
  • lesson28:Python单例模式全解析:从基础实现到企业级最佳实践
  • Apache FOP实践——pdf模板引擎
  • 借助 Wisdom SSH 的 AI 助手构建 Linux 开发环境
  • leetcode热题——搜索二维矩阵Ⅱ
  • Apache Ignite 集群标识(Cluster ID)和集群标签(Cluster Tag)
  • 论文阅读:《多目标和多目标优化的回顾与评估:方法和算法》
  • Redis实现数据传输简介
  • jmeter读取上游接口并遍历数组数据并进行压测
  • 【Qt】QTime::toString(“hh:mm:ss.zzz“) 显示乱码的原因与解决方案
  • 学习游戏制作记录(冻结敌人时间与黑洞技能)7.30
  • 基于C-MTEB/CMedQAv2-rerankingv的Qwen3-1.7b模型微调-demo
  • 深度学习与图像处理案例 │ 图像分类(智能垃圾分拣器)
  • 通达OA服务器无公网IP网络,如何通过内网穿透实现外网远程办公访问OA系统
  • 三十二、【Linux网站服务器】搭建httpd服务器演示虚拟主机配置、网页重定向功能