Day007 Java方法基础

news/2025/10/3 20:18:03/文章来源:https://www.cnblogs.com/zhuyouan/p/19124944
Day007 Java方法基础

Java方法

方法的定义及调用

何为方法

System.out.println():System是一个类,out是输出的对象,println()就是一个方法

  • Java方法是语句的集合,他们在一起执行一个功能。
    • 方法是解决一类问题的步骤的有序组合
    • 方法包含于类或对象中
    • 方法在程序中被创建,在其他地方被引用
  • 设计方法的原则:方法的本意为功能块,就是实现某个功能的语句块的集合。在设计方法的时候,最好保持方法的原子性,即一个方法只完成一个功能,这样有利于后期的扩展。
package com.feihong.method;public class MethodDemo01 {public static void main(String[] args) {test();//新建方法就运行成功了//保持main方法内的整洁,多的功能在外整合成方法,再main方法内调用即可}//新建方法举例:for循环输出1000以内能被5整除的数,样式为每行3个,方法名为testpublic static void test() {for (int i = 0; i <= 1000; i++) {if (i % 5 == 0) {System.out.print(i + "\t");}if (i % (5 * 3) == 0) {System.out.println();}}}
}
  • Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般定义一个方法包含以下语法:
    • 方法包含一个方法头和一个方法体。下面是一个方法的所有部分:
      1. 修饰符:修饰符是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
      2. 返回值类型:方法可能会返回值。returnValueType(返回值类型) 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
      3. 方法名:是方法的实际名称。方法名和参数表共同构建成方法签名。
      4. 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
        • 形式参数:在方法调用时用于接收外界输入的数据。
        • 实参:调用方法时实际传给方法的数据。
      5. 方法体:方法体包含具体的语句,定义该方法的功能。
修饰符 返回值类型 方法名(参数类型 参数名){...方法体...return 返回值;
}
package com.feihong.method;public class MethodDemo01 {public static void main(String[] args) {//void就表示无返回值int sum = add(1, 2);//其中的1,2就是实际参数,就是给形参a,b赋上的值System.out.println(sum);}//加法//public static都是修饰符,int就是返回值的类型,add就是方法名,其中()内的int就是参数类型,a和b就是形式参数,用作定义public static int add(int a, int b) {return a + b;//有返回值的一定要写return语句}

方法调用

  • 调用方法:对象名.方法名(实参列表)

  • Java支持两种调用方法的方式,根据方法是否返回值来选择。

    1. 当发放返回一个值的时候,方法调用通常被当做一个值。

      int larger = max(30,40)
      
    2. 如果返回值为void,方法调用一定是一条语句。

      System.out.println("hello,world")
      

了解一下值传递(Java全都是值传递)和引用传递

方法重载

重载就是在一个类中,函数名称相同,但形参不同的函数。

package com.feihong.method;public class MethodDemo02 {public static void main(String[] args) {int max = max(10, 20);System.out.println(max);}//比大小的方法,这里俩个方法体都一样,但是参数类型不一样,但都是方法名都是maxpublic static double max(double num1,double num2){if (num1==num2){System.out.println("num1==num2");return 0;}double result=0;if (num1>num2){result=num1;}else {result=num2;}return result;}public static int max(int num1,int num2){/*return语句要写在外面if (num1>num2){retrun num2;}*/if (num1==num2){System.out.println("num1==num2");return 0;//这里用的是return的另一个意思,即终止方法}int result=0;if (num1>num2){result=num1;}else {result=num2;}return result;}
}
  • 方法的重载的规则:

    • 方法名称必须相同
    • 参数列表必须不同(个数不同或类型不同或者参数排列顺序不同等)
    • 方法的返回值类型可以相同可以不同
    • 仅仅返回类型不同不足以成为方法的重载。
  • 实现理论:

    方法名称相同时,编译器会根据调用方法的参数个体、参数类型等逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。

命令行传参

有时候希望运行一个程序再传递给他消息,就要靠传递命令行参数给main()函数实现。

package com.feihong.method;public class MethodDemo03 {public static void main(String[] args) {//args.length 数组长度for (int i = 0; i < args.length; i++) {System.out.println("args["+i+"]:"+args[i]);}}
}

image-20251003185909262

先生成一个MethodDemo03的class文件,发现无法加载

image-20251003190350170

需返回到src目录,执行全路径才可以识别,此时执行发现没有反应,因为没有传递参数

image-20251003190551681

给予参数this is feihong再执行,输出成功

可变参数(不定项参数)

不确定需要几个放参数时可用,JDK1.5开始,Java支持传递同类型的可变参数给一个方法

public class MethodDemo05 {public static void main(String[] args) {MethodDemo05 methodDemo05 = new MethodDemo05();methodDemo05.test(1,2);//方法只有一个参数,输入两个就会报错}public void test(int i){//一般参数输入的值是固定的,输入多了就会报错,在不确定具体会输入多少值时,就只能多建几个方法,费时费力,就可用可变参数System.out.println(i);}
}
  • 在方法声明中,在指定参数类型后加一个省略号(...)。
  • 一个方法中只能指定一个可变参数,他必须是方法的最后一个参数。任何普通的参数都必须在他之前声明。
package com.feihong.method;public class MethodDemo05 {public static void main(String[] args) {MethodDemo05 methodDemo05 = new MethodDemo05();methodDemo05.test(1,2);//不再报错}public void test(int ...i){//System.out.println(i);//输出了一个怪东西:[I@7dc5e7b4System.out.println(i[0]);//那就可以选择取出数列的第0个,输出为:1}
}
package com.feihong.method;public class MethodDemo04 {public static void main(String[] args) {//调用可变参数的方法printMax(34,3,3,2,56,5);//输出为:The max value is :56.0printMax(new double[]{1,2,3});//输出为:The max value is :3.0}public static  void printMax(double...numbers){if(numbers.length==0){//防止没有字符参数输入System.out.println("No argument passed");return;}double result=numbers[0];//排序for (int i = 0; i < numbers.length; i++) {if(numbers[i]>result){result = numbers[i];}}System.out.println("The max value is :"+result);}
}

递归

一般都为A方法调用B方法,递归则是A方法调用A方法,自己调用自己

  • 利用递归可以用简单的程序来解决一些复杂的问题。他通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出接提过程所需要的多次重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限合集。
  • 递归结构包含两部分:
    • 递归头:什么时候不调用自身方法。没有头,就会陷入死循环。
    • 递归体:什么时候需要调用自身方法。

Java是栈机制,递归在一些计算较深的时候会占用大量内存,所以能不用递归就不用

package com.feihong.method;public class MethodDemo06 {//阶乘//2!=2*1,5!=5*4*3*2*1public static void main(String[] args) {System.out.println(jiecheng(5));//输出为:120}public static int jiecheng(int n){if(n==1){return 1;}else {return n*jiecheng(n-1);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

30天JavaScript挑战 - 从零基础到精通的完整学习指南

30天JavaScript挑战是一个系统性的编程学习项目,通过30天的渐进式课程,涵盖从基础语法到高级概念的完整JavaScript知识体系,帮助学习者从零开始掌握现代JavaScript开发技能。30天JavaScript挑战 项目描述 30天JavaS…

题解:AT_agc057_c [AGC057C] Increment or Xor

题意:很简单了,不再赘述。 做法: 先观察一下打打表,发现首先必须满足 \(a_i\equiv a_{i+\frac{N}2}\pmod {\frac{N}2}\),这里 \(N=2^n\),因为结束状态满足,且这两种操作都不影响他们对 \(\frac{N}{2}\) 取模的关…

怎样切图做网站六盘水网站设计

ENSP默认路由配置 1&#xff0c;配置R1路由器 sys ##进入系统视图模式 [Huawei]sys R1 ##修改名字 [R1]int e0/0/0 ##进入接口 [R1-Ethernet0/0/0]ip add 192.168.1.254 24 ##配置ip地址 [R1-Ethernet0/0/0]undo shut ##开启物理接口 [R1-Ethernet0/0/1]int e0/0/1 [R1-Etherne…

网站建设方面的论文东莞市南城装饰工程东莞网站建设

hello&#xff0c;大家好&#xff0c;本讲我们一起聊一下常见的几个并发工具类的使用和坑&#xff01; 在日常工作中&#xff0c;我们经常会遇到多线程并发问题&#xff0c;比如ThreadLocal、锁、ConcurrentHashMap、CopyOnWriteArrayList等。那么如何正常的使用呢&#xff1f;…

Spring框架常见的注解 - 实践

Spring框架常见的注解 - 实践2025-10-03 20:03 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

C# MVVM模式和Qt中MVC模式的比较 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

图书馆网站建设公司秒拍wordpress插件

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

网站建设关键字优化网页制作基础教程visual studio code

Python面向对象编程 1.面向对象概念介绍1) 面相过程 —— 怎么做&#xff1f;2&#xff09;面向对象 谁来做 2.类和对象2.1类2.2对象2.3类和对象的关系2.4类的设计2.5面向对象设计案例 士兵类设计2.6身份运算符 3.私有属性和私有方法3.1. 应用场景及定义方式 4.继承、多态重写父…

使用 Copilot AI + Blazor 编一个五子棋游戏

1. 创建 Blazor web工程,选Auto2. 打开 GitHub Copilot 窗口,输入提示词 使用 Blazor 编一个五子棋游戏3.复制代码测试 为了方便调试, 我们先把运行模式由 InteractiveAuto 改为 InteractiveServer 打开 App.razor 编辑…

关于VMware虚拟机如何下载-2025.10.3

关于VMware虚拟机如何下载-2025.10.3现在要想下载VMware有以下办法: 一:直接到这个链接:https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion 点击 DOWNLOAD FUSION OR WORKSTATION后在这个…

RAG核心特性:ETL - 指南

RAG核心特性:ETL - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

国庆集训做题10.1 - 10.3

国庆集训做题 CSP-S模拟25 t1 : 爱丽丝的数位划分 题意简述 : 将序列A划分为k个不相交连续非空子序列,求最大的总优美度。 优美度指子序列中十进制表示数字不同的个数,一个方案的优美度是所有子序列优美度的和 首先…

免费申请网站空间网站转化率分析工具

Java线程6种状态和工作原理详解&#xff0c;Java创建线程的4种方式 目录 一、Java线程的六种状态 二、Java线程是如何工作的&#xff1f; 三、BLOCKED 和 WAITING 的区别 四、start() 和 run() 源码分析 五、Java创建线程的所有方式和代码详解 1. 继承Thread类 2. 实现…

政务公开网站建设情况从哪里下载wordpress

以前安装这个软件的时候&#xff0c; 是在windows和mac上&#xff0c;都是图形化的安装方式&#xff0c;但是ubuntu不太一样&#xff0c;需要增加源&#xff0c;然后执行命令。安装的系统版本是2004。 参考链接1&#xff0c;主要命令包含下面几个部分&#xff1a; 第一步&…

XCSY暑期集训模拟赛2T3善良

XCSY暑期集训模拟赛2T3善良暴力(50pts) 对于每个询问,遍历\([l,r]\),统计其中k的数量,时间复杂度为\(O(nm)\)。 for(int i=1;i<=n;i++) cin>>a[i]; while(m--){cin>>l>>r>>k;int ans=0;…

玳瑁的嵌入式日记---0928(ARM--UART) - 指南

玳瑁的嵌入式日记---0928(ARM--UART) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

网站开发需要那些技能电子商务平台中搜索词拆解时

产生原因:因为项目最近设计到了一个Quartz相关的模块&#xff0c;前端需要传递时间参数到后台, 然后后台设置一个新的定时任务, 所以后台需要一个可以实现Date与cron之间的相互转换(因为Quartz需要的Cron格式的数据)&#xff0c;所以就借助java的SimpleDateFormat的格式化,然后…

解决Visual Studio中无法使用scanf和C++万能头的问题

解决Visual Studio中无法使用scanf和C++万能头的问题Visual Studio中无法使用scanf和C++万能头? 来吧,跟我一起操作! 1.在桌面上创建万能头文件, 并命名为stdc++.h: 记得把文件后缀名给打开哟! 2.用记事本打开std…

太仓专业网站建设我想创个网站

目录 项目背景 项目技术栈 项目介绍 项目亮点 项目启动 1.创建SSM&#xff08;省略&#xff09; 2.配置项目信息 3.将前端页面加入到项目中 4.初始化数据库 5.创建标准分层的目录 6.创建和编写项目中的公共代码以及常用配置 7.创建和编写业务的Entity、Mapper、…