由浅到深认识Java语言(7):方法(函数)

该文章Github地址:https://github.com/AntonyCheng/java-notes

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(6):控制流程语句

14.方法(函数)(方法:类的第三成员)

一般情况下,在面向过程的语言中,称为函数,在面向对象的语言中称为方法,所以 java 中我们称之为方法,通过方法将代码封装在一起,能够提高代码的效率;

我们通过统计学校人数这样一个示例来初识方法:

import java.util.*;
class demo{public static void main(String[] args){Scanner scanner = new Scanner(System.in);System.out.println("你想知道我们学校的人数么(想/不想=1/0):");int agree  = scanner.nextInt();if(agree == 1){ThePeopleAmount(); //这里是方法的调用}else if(agree == 0){System.out.println("ok!");}else{System.out.println("错误!请重新输入!");}}public static void ThePeopleAmount(){ //这是一个方法//我们来统计一个学校的人数int gradeOne = 1000; //高一int gradeTwo = 1200; //高二int gradeThree = 800; //高三int all = gradeThree+gradeTwo+gradeOne;System.out.println("我们学校一共有"+all+"人!");}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方法的定义

定义格式:

权限修饰符 (静态)标识 返回值类型 方法名(参数列表){方法的内容
}

注意:权限修饰符可有可无,标识处也可以不为静态的标识;

示例如下:

public static int method(int a,int[] arr){//方法内容如下:……
}

返回值类型

  • 所谓的返回值就是方法执行完后,要返回的值;

  • 返回给方法的调用处;

  • 定义方法时,方法的返回值类型必须和具体的返回值类型完全相同;

    public static int name(){ //方法数据类型是 int//方法的内容return 10;			  //返回值数据类型是 int
    }
    
  • return 之后不能有语句,因为程序是顺序执行的;

  • 如果方法的返回值处事具体的数据类型,那么方法里必须有 return + 具体类型的值;

依然以统计人数举例:

import java.util.*;
class demo{public static void main(String[] args){Scanner scanner = new Scanner(System.in);System.out.println("你想知道我们学校的人数么(想/不想=1/0):");int agree  = scanner.nextInt(); //此时数据类型和方法数据类型一致if(agree == 1){int all = ThePeopleAmount(); //这里是方法的调用System.out.println("我们学校一共有"+all+"人!");}else if(agree == 0){System.out.println("ok!");}else{System.out.println("错误!请重新输入!");}}public static int ThePeopleAmount(){ //这是一个整数方法//我们来统计一个学校的人数int gradeOne = 1000; //高一int gradeTwo = 1200; //高二int gradeThree = 800; //高三int all = gradeThree+gradeTwo+gradeOne;return all; // 让ThePeopleAmount() == 300;}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

示例:

打印金字塔:

import java.util.*;
class demo{public static void main(String[] args){Scanner scanner = new Scanner(System.in);System.out.println("你确定要打印金字塔吗?(是/否=1/0)");int agree = scanner.nextInt();if(agree == 1){System.out.println("请问你要打印几个金字塔?");int x = scanner.nextInt();if (x <= 0){System.out.println("请输入正确数据!");}else{System.out.println("这是你的金字塔:");for(int i = 0; i < x; i++){TheBeautiful();}}}else if( agree == 0){System.out.println("okk!");}else{System.out.println("请输入正确的数字!");}}public static void TheBeautiful(){for(int i=0; i<3;i++){for(int j=0; j<2-i;j++){System.out.print(" ");}for(int k = 0; k<i+1;k++){System.out.print("* ");}System.out.println();}}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参数列表

参数列表是为了暴露出在调用方法时,可以传入方法内部,供方法内部使用的值;

参数列表是由多个参数组成的列表,多个参数之间使用 ”,“ 隔开;

public static int addParam(int a,int b){int sum = a+b;return sum;
}

参数列表有两个维度:

  1. 形式参数列表:在方法定义时使用的参数列表;
  2. 实际参数列表:在方法调用时使用的参数列表;

方法的调用

使用一个方法就是所谓方法的调用,让方法中的方法体运行,这就是方法的调用;

方法定义好以后没有调用,方法是不会执行的;

  • 方法的调用格式:

    方法名(实参列表);

  • 实参列表该怎么写:

    实参列表的写法必须参看形参列表,也就是说实参列表的个数,数据类型,顺序必须和形参列表完全相同;

示例一:

public static void main(String[] args){MethodOne(10); //只要是一个 int 就行MethodTwo(1,2);MethodTwo(3,"name");
}
public static void MethodOne(int a){System.out.println("MethodOne");
}
public static void MethodTwo(int a,int b){System.out.println("MethodTwo");
}
public static void MethodThree(int a,String name){System.out.println("MethodThree");
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

示例二:

创建一个两数相乘的方法,将两数作为参数,调用此方法获得结果并且打印此结果;

import java.util.*;
class demo{public static void main(String[] args){Scanner scanner = new Scanner(System.in);System.out.println("请输入第一个数:");int a = scanner.nextInt();System.out.println("请输入第二个数:");int b = scanner.nextInt();System.out.println(Method(a,b));}public static int Method(int a,int b){System.out.println("你的答案是:");int result = a*b;return result;}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

递归(了解)

定义:程序调用自身的编程技巧称为递归,方法内调用的方法执行的动作恰好和本方法一样,我们就可以调用这个方法本身,根据不同参数再执行一遍;

**注意:**为了防止无休止的调用,递归程序必须有一个结束的点,即不再执行程序的条件;

**示例一:**求阶乘;

import java.util.*;
class demo{public static void main(String[] args){//求阶乘Scanner scanner = new Scanner(System.in);System.out.println("你要计算的阶乘:");int num = scanner.nextInt();System.out.println(Method(num));}public static int Method(int num){if(num==1){  //不再执行程序的条件return 1;}else{return num * Method(num - 1);}}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

而上述代码只能运行到 16 的阶乘,因为 int 类型是 32 位,最高达到 2 31 − 1 2^{31}-1 2311

所以我们可以把代码改写成 long 型;

import java.util.*;
class demo{public static void main(String[] args){//求阶乘Scanner scanner = new Scanner(System.in);System.out.println("你要计算的阶乘:");long num = scanner.nextInt();System.out.println(Method(num));}public static long Method(long num){if(num==1){return (long)1;}else{return num * Method(num - 1);}}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**示例二:**求斐波那契数列;

import java.util.*;
class demo{// 1 1 2 3 5 8 13 21 34...public static void main(String[] args){Scanner scanner = new Scanner(System.in);System.out.println("请输入第一个数:");int a = scanner.nextInt();System.out.println("请输入第二个数:");int b = scanner.nextInt();fbnq(a,b);}public static int fbnq(int a,int b){if((a+b)<100){System.out.print(a+" ");return fbnq(b,a+b);}else{return 0;}}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方法的重载

定义:

在一个类中,多个方法的方法名相同,但方法的参数列表不同,是可以同时存在的,并且构成了方法的重载;

参数列表不同指的是参数的数据类型不同:

  • 方法名相同,参数列表的个数不同
  • 方法名相同,参数列表的数据类型不同
  • 方法名相同,参数列表的顺序不同
  • 方法的重载和返回值类型,权限修饰符无关
public static void m1(int a){}
public static void m1(int b){}
//以上两种不互为重载
public static void m2(int a,double b){}
public static void m2(double a,int a){}
//以上两种互为重载
public static void m3(int a){}
public static int m3(int a){}
//以上两种不互为重载

示例如下:

import java.util.*;
class demo{public static void main(String[] args){Method(1,2);Method();}public static void Method(int a,int b) {System.out.println("int a,int b");}public static void Method(){System.out.println("void");}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方法重载的意义:

让开发者更加直观方便地使用一个方法,实现一种固定的功能,但是参数是可选的;

下一章:由浅到深认识Java语言(8):数组&二维数组

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

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

相关文章

C语言——sizeof与strlen的对比

一.sizeof 我们在学习操作符的时候&#xff0c;就了解到了sizeof操作符&#xff0c;它的作用是求参数所占内存空间的大小&#xff0c;单位是字节。如果参数是一个类型&#xff0c;那就返回参数所占的字节数。 #include <stdio.h>int main() {int a 10;size_t b sizeo…

GEE入门及进阶教程|在 Earth Engine 中过滤图像集合

Earth Engine API 为 ImageCollection 类型提供了一组过滤器&#xff0c;过滤器可以根据空间、时间或属性特征来限制 ImageCollection&#xff0c;即可将图像从 ImageCollection 中分离出来以进行检查或操作。 图1 1 Earth Engine 中应用于图像集合的过滤、映射…

AugmentedReality之路-创建工程及主界面(1)

本文从零创建1个工程&#xff0c;并添加1个BasicMap和1个主界面&#xff0c;主界面包含Start AR和Stop AR两个按钮 1、创建移动端工程并打包运行 创建1个空工程&#xff0c;选择C&#xff0c;Mobile&#xff0c;Scalable&#xff0c;勾选StarterContent 通过Edit->Proje…

云原生网络魔术师:Docker高级网络实战演练与深度解析

在Docker的世界中&#xff0c;网络无疑是一块充满魔力的土地。当我们超越了基础的网络配置&#xff0c;步入Docker高级网络领域时&#xff0c;你会发现一个全新的、强大而灵活的网络模型正在等待你的探索。本文将带你亲历Docker高级网络实战操作&#xff0c;揭开overlay网络、自…

【数据分享】2012-2023年中国范围的逐年NPP/VIIRS夜间灯光数据(免费获取)

在之前的文章中我们分享了2012-2023年全球范围逐年NPP/VIIRS夜间灯光数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff01;很多小伙伴在拿到数据后&#xff0c;反映数据太大了&#xff0c; 有450G&#xff0c;下载非常不方便&#xff01;这个数据的范围是全球的&…

手撕算法-删除链表的倒数第 N 个结点

描述 思路 快慢指针&#xff0c;快指针先走N步&#xff0c;走不够N步返回空。慢指针和快指针一起走&#xff0c;当快指针到达终点&#xff0c;即快指针为null时&#xff0c;慢指针到达倒数第N个节点。因为要删除倒数第N个&#xff0c;所以要记录之前的节点pre&#xff0c;假设…

Qualcomm AI Hub-示例(二)模型性能分析

文章介绍 模型性能分析&#xff08;Profiling&#xff09; 当模型尝试部署到设备时&#xff0c;会面临许多重要问题&#xff1a; 目标硬件的推理延迟是多少&#xff1f;该模型是否符合一定的内存预算&#xff1f;模型能够利用神经处理单元吗&#xff1f; 通过在云端的物理设…

从零开始学HCIA之网络基础知识02

1、TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;参考模型&#xff0c;它是当下实际的业界标准。 2、TCP/IP这个名字来自该协议簇中两个非常重要的协议&#xff0c;一个是IP&#xff08;Internet Protocol&#xff09;&#xff0c;另一个是T…

Django 三板斧、静态文件、request方法

【一】三板斧 【1】HttpResponse &#xff08;1&#xff09;介绍 HttpResponse是Django中的一个类&#xff0c;用于构建HTTP响应对象。它允许创建并返回包含特定内容的HTTP响应。 &#xff08;2&#xff09;使用 导入HttpResponse类 from django.http import HttpResponse创…

Linux:Prometheus的源码包安装及操作(2)

环境介绍 三台centos 7系统&#xff0c;运行内存都2G 1.prometheus监控服务器&#xff1a;192.168.6.1 主机名&#xff1a;pm 2.grafana展示服务器:192.168.6.2 主机名&#xff1a;gr 3.被监控服务器&#xff1a;192.168.6.3 …

二叉树的遍历及线索二叉树试题解析

一、单项选择题 01.在下列关于二叉树遍历的说法中&#xff0c;正确的是( C ). A.若有一个结点是二叉树中某个子树的中序遍历结果序列的最后一个结点&#xff0c;则它一定是该子树的前序遍历结果序列的最后一个结点 B.若有一个结点是二叉树中某个子树的前序遍历结果序列的最后一…

多态的左膀右臂,向上转型与重写

同一个引用 调用了 同一个方法&#xff0c;但是因为引用的对象不一样&#xff0c;所表现的行为不一样&#xff0c;我们把这种思想称为&#xff1a;多态 目录 1.向上转型 1.1.向上转型定义 1.2.向上转型的优缺点 1.3.向上转型的内存指向 1.4.向上转型的三种方式 1.5.向下…