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

java方法的学习

方法定义

方法就是一段可以重复使用的代码块。

java方法是语句的集合,它们在一起执行一个功能。

一个功能小工具

  • 给它原料(参数)

  • 它帮你干活

  • 最后给你结果(返回值)

    比如:
    System.out.println() 就是一个方法 → 负责打印
    Math.random() 也是方法 → 负责生成随机数

    System是系统的一个类。out是System下的一个输出对象。println()就是一个方法。

//方法的定义格式修饰符 返回值类型 方法名(参数列表){// 方法体return返回值;}
  1. 修饰符:public static (先固定写)。告诉编译器如何调用该方法。定义了该方法的访问类型。
  2. 返回值类型:
    • 有结果 → 写 int / String /boolean
    • 没结果 → 写void
  3. 方法名:自己起名字(见名知意)
  4. 参数列表:给方法传的原料(可以没有)。参数像是一个占位符。当方法被调用时,传值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
    • 形式参数:在方法被调用时用于接收外界输入的数据。
    • 实参:调用方法时实际传给方法的数据。
  5. return:把结果送回去(void 不用写)
// 定义方法。没有返回值voidpublicstaticvoidsayHello(){System.out.println("Hello Java!");}// 调用sayHello();
// 求两个数的和。有返回值,intpublicstaticintadd(inta,intb){//形式参数returna+b;}// 调用intsum=add(10,20);//实际参数System.out.println(sum);// 30
  1. 方法必须先定义,后调用。不调用,永远不会执行

  2. 方法必须在类里面,不能嵌套方法。不能在方法里面再写一个方法。

  3. 有返回值必须用 return。没有返回值(void)不能 return 值。return一般写到方法的最后一行。

  4. (我们的方法一般写在main方法外面)

    publicclassDemo03{publicstaticvoidmain(String[]args){intmax=max(3,300);System.out.println(max);}//比大小publicstaticintmax(intnum1,intnum2){intresult=0;if(num1==num2){//程序要严谨,每一种情况都要考虑System.out.println("num1==num2");return0;//return还有中止方法的作用,如果num1==num2,放在就在此终止了。}if(num1>num2){result=num1;}else{result=num2;}returnresult;//return一般写到方法的最后一行。用result先接收我要用的值}}

设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的拓展。

方法调用规则

  1. 普通方法调用:对象.方法 ()。普通方法就是没有static关键字。(实例方法;实例变量)
  2. 静态方法调用:直接写方法名 ()。前面加了 static,直接调用!

普通方法:没有 static 关键字

内存角度区别

非静态方法
随着对象创建而存在,每个对象都持有这份方法引用,多个对象就有多份关联。
存在于堆关联的实例空间。
静态方法
随着类加载就进入方法区,只存在一份,被所有对象共享。
类加载完毕就可调用,和对象是否创建无关。

调用步骤:1. 创建的对象。2.对象名.方法名(参数)调用。3.有返回值的方法,可以用变量接收结果,也可以直接打印

普通方法调用(实例方法)

必须 new 对象才能调用!

1. 在本类 main 中调用

publicclassTest{// 普通方法publicvoidsayHello(){System.out.println("hello");}publicstaticvoidmain(String[]args){// 必须先创建对象Testt=newTest();// 对象.方法()t.sayHello();}}

2. 在其他类调用

// 别的类publicclassOtherClass{publicvoidtest(){// 还是要 newTestt=newTest();t.sayHello();}}

静态方法调用(static 方法)

不需要 new 对象!直接用 类名。方法 ()

1. 在本类 main 中调用

publicclassTest{// 静态方法publicstaticvoidstaticMethod(){System.out.println("静态方法");}publicstaticvoidmain(String[]args){// 直接调用staticMethod();// 标准写法:类名.方法()Test.staticMethod();}}

2. 在其他类调用

publicclassOtherClass{publicvoidtest(){// 直接 类名.方法()Test.staticMethod();}}

值传递(java)和引用传递

java只有值传递:基本类型传数值,引用类型传地址,统统都是值传递,原来变量不替换!Java 做不到替换变量,所以 Java 没有引用传递!Java 只有值传递。基本类型:传数值拷贝。引用类型:传地址拷贝。

方法的重载

方法重载:同一个类里,方法名相同,参数列表不同(形参不同),就是重载。(同一个名字的方法,可以干不同的事,根据传的参数自动匹配)

方法重载的三要素(必须同时满足)

  1. 在同一个类里
  2. 方法名必须完全相同
  3. 参数列表必须不同
    • 参数个数不同
    • 参数类型不同
    • 参数顺序不同

与返回值无关!

  • System.out.println(10)、System.out.println(“字符串”)、System.out.println(3.14)。println 就是最经典的方法重载!(java虚拟机来帮我们判断的)

    //方法重载publicclassDemo03{publicstaticvoidmain(String[]args){doublemax=max(3.6,3.7);System.out.println(max);}//比大小publicstaticintmax(intnum1,intnum2){intresult=0;if(num1==num2){//程序要严谨,每一种情况都要考虑System.out.println("num1==num2");return0;//return还有中止方法的作用,如果num1==num2,放在就在此终止了。}if(num1>num2){result=num1;}else{result=num2;}returnresult;}publicstaticdoublemax(doublenum1,doublenum2){doubleresult=0.0;if(num1==num2){//程序要严谨,每一种情况都要考虑System.out.println("num1==num2");return0;//return还有中止方法的作用,如果num1==num2,放在就在此终止了。}if(num1>num2){result=num1;}else{result=num2;}returnresult;}}

可变参数

Java 可变参数(Varargs,全称 Variable Arguments)(可变长参数)是 JDK 5 引入的特性,允许方法接收 0 个、1 个或多个同类型的参数,不用手动定义多个重载方法,简化代码编写。

方法返回值 方法名(参数类型...参数名)//接收任意个数同类型参数publicvoidtest(int...i){System.out.println(i[2]);}
  • 在方法声明中,在指定参数类型后加一个省略号

  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通参数必须在它之前声明。

    核心特点:

    1. 本质是数组,方法内部可以像操作数组一样使用可变参数
    2. 一个方法只能有一个可变参数
    3. 可变参数必须放在方法参数列表的最后一位

核心原理:Java 编译器会把可变参数自动封装成数组,所以:方法定义add(int... nums)add(int[] nums)

。调用时传入的多个参数,会被自动打包成数组传入方法

递归

递归就是A方法调用A方法!就是自己调用自己。方法内部调用自己,就是递归。(把大问题拆成一模一样的小问题)

递归的结构包括两个部分:1.递归头(出口):什么时候不再调用自己(必须有!否则死循环)。

2.递归体(自身调用):什么时候调用自己。

实际开发中,不建议用递归。递归会栈溢出,直接崩程序。(递归每调用一次自己,就会占一块内存。层数一多 → StackOverflowError,但是循环永远不会栈溢出。

http://www.jsqmd.com/news/1005281/

相关文章:

  • RePKG终极指南:轻松提取Wallpaper Engine资源并转换TEX格式
  • Diablo Edit2:暗黑破坏神II角色编辑器完全指南 - 如何快速打造你的完美角色
  • FTM模块死区插入与PWM同步机制:嵌入式电机控制的安全核心
  • 有店铺id查详情 没有查所有
  • 2026朝阳市卡地亚+GP芝柏表手表专业回收,26年精选回收店铺排行榜推荐 - 谊识预商贸
  • 知乎数据获取新方案:zhihu-api让复杂爬虫变简单
  • 10分钟告别网页编辑噩梦:Chrome文本替换插件让你的工作效率飙升300%
  • 2026贵阳市法穆兰+宝玑手表专业回收,26年精选回收店铺排行榜推荐 - 谊识预商务
  • Python自动化AutoCAD的终极指南:用pyautocad解放你的设计工作
  • 2026嘉峪关市卡地亚+GP芝柏表手表专业回收,26年精选回收店铺排行榜推荐 - 谊识预商贸
  • FreeSWITCH 简单图形化界面61 - 基于JSSIP,使用AI工具,编写一个简单的调度平台
  • ENVI分类后处理实战:合并林地耕地、剔除空值,让你的土地利用专题图更‘干净’
  • 华为光猫配置文件解密工具:解锁网络设备的底层秘密
  • ctfshow-web入门SSRFweb351-360wp
  • 魔兽争霸3性能救星:如何让20年老游戏在现代电脑上流畅运行?
  • 2026贺州市卡地亚+GP芝柏表手表专业回收,26年精选回收店铺排行榜推荐 - 谊识预商务
  • 2026年除甲醛市场大揭秘!这些生产厂家凭啥脱颖而出?
  • 新风口已至!工信部定调,手机、电脑全面进入 AI 时代
  • 如何高效批量下载抖音无水印视频?douyin-downloader工具全解析
  • 保姆级教程:手把手搭建Java靶场(JshERP 2.3)并复现Fastjson+MySQL JDBC反序列化漏洞
  • 【程序语言与编译】语法分析:自上而下推导(最左/最右)
  • 专业的上海系统门窗厂家
  • 如何把 AI Agent Harness Engineering 变成卖得出去的产品:定价模型与增长策略
  • 7个可测量的Prompt工程底层技巧:从指令解析到熵值控制
  • 河北铝塑板加工厂家实测排行 核心能力全维度对比 - 奔跑123
  • Android相机有线连接技术拆解:从USB通信到文件传输的完整链路
  • 2026总部看全局、区域看趋势、门店看自己:服装全渠道BI看板的三层架构
  • 2026衡水市百达翡丽+宝珀手表专业回收,26年精选回收店铺排行榜推荐 - 谊识预商务
  • 如何快速搭建实时弹幕数据采集系统:跨平台直播监控终极方案
  • 2026喀什市雅典+天梭手表专业回收,26年精选回收店铺排行榜推荐 - 谊识预商贸