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

news2024/12/23 13:47:59

该文章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.coloradmin.cn/o/1533081.html

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

相关文章

外包干了5天,技术退步明显。。。。

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

springcloud-Eureka注册中心

如果你要理解这个技术博客博客专栏 请先学习以下基本的知识&#xff1a; 什么是微服务什么是服务拆分什么是springcloud Springcloud为微服务开发提供了一个比较泛用和全面的解决框架&#xff0c;springcloud继承了spring一直以来的风格——不重复造轮子&#xff0c;里面很多的…

ideaSSM 工厂效能管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 工厂效能管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff…

FFmpeg分析视频信息输出到指定格式(csv/flat/ini/json/xml)文件中

1.查看ffprobe帮助 输出格式参数说明: 本例将演示输出csv,flat,ini,json,xml格式 输出所使用的参数如下: 1.输出csv格式: ffprobe -i 4K.mp4 -select_streams v -show_frames -of csv -o 4K.csv 输出: 2.输出flat格式: ffprobe -i 4K.mp4 -select_streams v -show_frames …

若依微服务跑起来-微服务小白入门(1)

背景 若依的基本框架系列&#xff0c;已经构建起来&#xff0c;请参照 小白入门系列 - 鸡毛掸子 这些东西理解&#xff0c;并且实际板砖以后&#xff0c;有必要对现在流行的一些概念做一些升级&#xff0c;现在我们就进入到所谓的cloud版本&#xff0c;其实&#xff0c;前面的…

7.【Linux】进程间通信2(共享内存||消息队列)

共享内存 介绍 1.共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。 2.当共享内存创建出来后&#xff0c;通过系统调用挂接到…

二、阅读器的开发(初始)-- 1、阅读器简介及开发准备工作

1、阅读器工作原理及开发流程 1.1阅读器工作原理简介 电子书&#xff08;有txt、pdf、epub、mobi等格式&#xff09;->解析&#xff08;书名、作者、目录、封面、章节等&#xff09;->&#xff08;通过阅读器引擎&#xff09;渲染 -> 功能&#xff08;字号、背景色、…

力扣热门算法题 56. 合并区间,57. 插入区间,58. 最后一个单词的长度v

56. 合并区间&#xff0c;57. 插入区间&#xff0c;58. 最后一个单词的长度&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.20 可通过leetcode所有测试用例。 目录 56. 合并区间 解题思路 完整代码 Python Java ​编辑 5…

【NLP笔记】预训练+微调范式之OpenAI Transformer、ELMo、ULM-FiT、Bert..

文章目录 OpenAI TransformerELMoULM-FiTBert基础结构Embedding预训练&微调 【原文链接】&#xff1a; BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 【本文参考链接】 The Illustrated BERT, ELMo, and co. (How NLP Cracked Tra…

ASP.NET-Global.asax使用详解

本文介绍了如何使用Global.asax文件来增强ASP.NET Web应用程序的功能。首先&#xff0c;介绍了Global.asax文件的作用和基本功能。接着&#xff0c;详细探讨了在Global.asax中实现定时任务、应用程序级别的错误处理、应用程序启动和结束时执行特定逻辑等功能。随后&#xff0c;…

Macbook m1安装docker详细教程

下载安装包 进入官网 https://www.docker.com/ 下滑找到下载位置 下滑找到Mac对应安装包 等待下载完成即可。 安装 双击打开下载的安装包 将Docker拖到Applications中 安装完成后&#xff0c;找到安装的Docker 双击打开 点击accept同意 进入下面&#xff1a; 点fini…

Chart-based Reasoning: Transferring Capabilities from LLMs to VLMs

Chart-based Reasoning: Transferring Capabilities from LLMs to VLMs 相关链接&#xff1a;arXiv 关键字&#xff1a;Vision-language models、ChartQA、multimodal reasoning、fine-tuning、synthetic data 摘要 本文提出了一种技术&#xff0c;将大型语言模型&#xff08;…

Python分析人民日报关于台湾的报道

【项目背景】 《人民日报》数据挖掘&#xff0c;时间&#xff1a;1949.10.1-2023.12.31 标题含有“台湾”的报道 需要以下内容 1、标题&#xff0c;即上述时间段的报道标题和相应的报道时间、版面 2、包含标题、时间、版面的所有报道内容 3、报道的年份和数量的趋势图 4、…

CV论文--2024.3.21

1、Chain-of-Spot: Interactive Reasoning Improves Large Vision-Language Models 中文标题&#xff1a;Chain-of-Spot&#xff1a;交互式推理改进大型视觉语言模型 简介&#xff1a;在视觉语言理解领域&#xff0c;模型在解释和推理视觉内容方面的熟练程度已经成为许多应用的…

企业组织机构代码查询入口词令直达关键词口令是什么?

什么是企业组织机构代码&#xff1f; 组织机构代码是国内依法注册、依法登记的机关、企事业单位、社会团体&#xff0c;以及其他组织机构颁发一个在全国范围内唯一的、始终不变的代码标识。组织机构代码在单位的运营和管理中发挥着重要作用。 如何查询获取企业组织机构代码&a…

【机器学习】基于萤火虫算法优化的BP神经网络分类预测(FA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】萤火虫算法&#xff08;FA&#xff09;原理及实现 2.设计与实现 数据集&#xff1a; 多输入多输出&#xff1a;样本特征24&#xff0c;标签类别4。…

一些常见漏洞原理

一些漏洞的原理&#xff1a; SQL注入漏洞&#xff1a; SQL注入漏洞主要形成的原因是在数据交互中&#xff0c;前端的数据传入到后台处理时&#xff0c;没有做严格的判断&#xff0c;导致其传入的“数据”拼接到SQL语句中后&#xff0c;被当作SQL语句的一部分执行。 从而导致数…

day65 分层实现商品管理系统

分层实现商品管理系统 事务的特点&#xff0c;隔离级别的分类 在java中如何实现事务的操作 商品信息&#xff1a; 在goods表中作为子表引用class主表的主键作为goods表的外键 有对应主外键关联时也就是n对1的关系时 在使用jdbc技术时goods类对象要包含class类对象作为goods对…

从浏览器地址栏输入 URL 到请求返回发生了什么?

从浏览器地址栏输入 URL 到请求返回发生了什么&#xff1f; 从浏览器地址栏输入 URL 到请求返回发生了什么&#xff1f;简略的答案什么是 URL&#xff1f;DNS域名解析TCP建立连接&#xff1a;三次握手发送HTTP请求消息结构请求报文请求行请求头请求体 响应报文响应行响应头响应…

Vue 计算属性和watch监听

1.1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- 引入vue.js --><script src"node_modules/vue/dist/vue.js"></script> </h…