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

Java基础学习笔记-5

前言

Java编程语言是一门广泛应用于软件开发领域的高级编程语言。它的强大特性和跨平台性使其成为许多开发者的首选语言。本文将介绍一些Java编程的关键概念,包括函数重载、可变参数、值传递、递归等,这些概念是Java编程的基础,对于理解和掌握Java语言至关重要。

Java基础学习笔记-1
Java基础学习笔记-2
Java基础学习笔记-3
Java基础学习笔记-4

1. 函数重载(Function Overloading)

函数重载是一种 Java 编程中的常见概念,它允许在同一个类中定义多个具有相同名称但不同参数列表的方法。以下是一个函数重载的示例:

public class Demo01 {public static void main(String[] args) {f01(1.0);f01(1);}public static void f01(double money) {System.out.println("f01(double money) 被调用了");}public static int f01(int age) {System.out.println("f01(int age) 被调用了");return 100;}
}

请注意,函数重载与返回值无关,只与参数列表有关。

2. 可变参数(Varargs)

可变参数是 Java 中一种强大的功能,允许方法接受不定数量的参数。以下是一个可变参数的示例:

public class Demo02 {public static void main(String[] args) {f01(new int[]{1,3,5,7,9});f01();f01(1);f01(1, 2);f01(1, 2, 3);}public static void f01(int... x) {System.out.println("f01(int...) 被调用了");System.out.println(Arrays.toString(x));}
}

无论传递多少参数,可变参数方法将它们视为一个整数数组。

3. 可变参数与增强型for循环

在 Java 中,可变参数与增强型for循环可以结合使用,以处理不定数量的参数。以下是一个示例:

public class Demo03 {public static void main(String[] args) {f01(new int[]{1,3,5,7,9});f01();f01(1);f01(1, 2);f01(1, 2, 3);}public static void f01(int... arr) {System.out.println("f01(int...) 被调用了");// 自动循环arr数组,也知道何时结束,每次取出一个送到变量a上for (int a : arr) { // foreach输出(增强版for循环),没有下标了System.out.println(a);}}
}

上面的示例演示了如何使用可变参数来接受不定数量的整数参数,并且使用增强型for循环遍历这些参数。这使得处理不定数量的参数变得更加方便。

4. 基本数据类型的值传递

在 Java 中,基本数据类型的传递是按值传递的,这意味着方法接收的是原始值的副本,而不是原始变量本身。以下是一个示例:

public class Demo04 {public static void main(String[] args) {int y = 10;f01(y); // y实参。都是值传递。System.out.println("Y:" + y);}/*x,形参*/public static void f01(int x) {System.out.println(x);x++;System.out.println(x);}
}

在这个示例中,f01方法接收了变量y的值,然后对这个值进行了操作。但是,这不会影响到原始变量y的值,因此在打印y时仍然输出10。

5. 数组的值传递

与基本数据类型不同,数组在传递给方法时也是按值传递的。然而,数组的值是数组的引用,而不是数组的内容。这意味着在方法内对数组的操作会影响到原始数组。以下是一个示例:

import java.util.Arrays;public class Demo05 {public static void main(String[] args) {int[] y = {10, 20, 30};f01(y); // y实参。都是值传递。System.out.println("y: " + Arrays.toString(y));}/*x,形参*/public static void f01(int[] x) {System.out.println(Arrays.toString(x));x[1]++;System.out.println(Arrays.toString(x));}
}

在这个示例中,f01方法接收了整数数组y的引用。当在方法内部修改数组元素时,原始数组也会受到影响,因此在打印y时,第二个元素的值已经被修改。

6. 递归列出文件

在 Java 编程中,递归是一种强大的技术,可用于处理文件和目录的层次结构。以下是一个示例程序,演示如何递归地列出指定目录下的所有文件和子目录中的文件:

import java.io.File;public class Demo06 {public static void main(String[] args) {showFiles(new File("D:\\202203\\正科\\08_补充\\附件\\a"));}/*展示文件夹下所有的文件,包含子文件夹下的文件*/public static void showFiles(File file) {File[] files = file.listFiles(); // 枚举该文件夹file对象下的文件或文件夹对象for (File f : files) {if (f.isFile()) System.out.println(f.getName()); // 文件if (f.isDirectory()) showFiles(f); // 递归调用文件夹}}
}

这个示例中,我们使用了递归方法showFiles来遍历指定目录下的所有文件和子目录。具体步骤如下:

  1. showFiles方法接受一个File对象作为参数,该对象表示要列出文件的目录。
  2. 使用listFiles方法获取目录下的所有文件和子目录,并将它们存储在files数组中。
  3. 使用增强型for循环遍历files数组中的每个文件或目录。
  4. 对于每个元素,我们检查它是否是一个文件(f.isFile())。如果是文件,我们打印文件名。
  5. 如果元素是一个目录(f.isDirectory()),则递归调用showFiles方法,以便继续遍历该目录的内容。

这个示例展示了如何使用递归来处理文件和目录结构,是处理文件系统操作的常见用例之一。

7. 递归求和

递归是一种函数调用自身的编程技巧。以下是一个递归的示例:

public class Demo07 {public static void main(String[] args) {System.out.println(sum(100));}public static int sum(int count) {if (count == 1) return 1; // 结束条件return sum(count-1) + count; // 递归表达式}
}

这个示例演示了一个递归函数sum,它从1递归到给定的正整数count并计算总和。递归的结束条件是count等于1,然后通过递归表达式sum(count-1) + count计算总和。

递归是一种强大的编程技巧,可以用于解决许多问题,但需要小心处理递归的结束条件,以避免无限递归。

总结

本文详细介绍了Java编程中的几个重要概念,包括函数重载、可变参数、值传递和递归。这些概念是Java编程的基础,对于编写高效、灵活的Java代码至关重要。通过学习本文中的示例和解释,读者可以更好地掌握这些概念,提高自己的Java编程技能。无论是初学者还是有经验的开发者,都可以从本文中获得有价值的知识,帮助他们在Java编程领域取得成功。在未来的项目中,这些概念将成为解决复杂问题和开发强大应用程序的重要工具。

相关文章:

Java基础学习笔记-5

前言 Java编程语言是一门广泛应用于软件开发领域的高级编程语言。它的强大特性和跨平台性使其成为许多开发者的首选语言。本文将介绍一些Java编程的关键概念,包括函数重载、可变参数、值传递、递归等,这些概念是Java编程的基础,对于理解和掌…...

合同交付类项目如何高效管理?

美国项目管理协会(PMI)保罗格蕾斯曾说:“当今社会,一切都是项目,一切也将成为项目。”在“万事皆项目”的背景下,企业在运营过程中会产生大量的项目型业务活动,例如:举办市场活动、产品研发、进行企业内训、采购招标、工程建设等等。那么按照…...

两性养生网站源码 生活类减肥网站源码 健康网模板源码 支持QQ登录和百度主动推送

本套模板非常适合生活类,两性类,减肥类等等类型的网站,这类型网站比较好做流量,因为客户群体众多, 可以自行改内容为其他类型网站模板总体非常简洁漂亮,配色合理,视觉舒服,并且配合…...

CentOS7安装Jenkins(更改默认运行的端口号8080->16060)

第一步: 端口号为默认8080 的安装是:Jenkins安装配置 第二步:将默认运行端口8080—>16060 首先修改配置文件 修改配置文件:vi /etc/sysconfig/jenkins修改内容:# 服务监听端口JENKINS_PORT"16060"然后…...

Java开发之Mysql【面试篇 完结版】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、知识体系二、Mysql-优化1. 优化-如何定位慢查询① 问题引入② 解决方案③ 问题总结④ 实战面试 2. 优化-sql执行很慢,如何解决① 问题引入② 解…...

【实战】十二、自动化测试 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十九)

文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

【人月神话】重新探索人月神话:软件工程的现实与挑战

人月神话是一篇由美国软件工程师弗雷德里克布鲁克斯所写的软件工程经典之作,最早发表于1975年。这篇文章的全名是《人月神话:软件工程的神话与现实》(The Mythical Man-Month: Essays on Software Engineering),它涵盖…...

电阻和电容

目录 1、常见的电阻器 2、电容 ​编辑 1、常见的电阻器 对于电阻需要了解三个参数(查询电阻的数据手册): 1、封装:就是电阻的尺寸或者大小,看焊在你的pcb板上是否合适。 2、标称:电阻的电阻大小、精度、…...

01-Java-日志框架

1 日志技术概述 1.1 什么是日志技术 ​ 日志技术是一种记录和存储应用程序运行时信息的技术。它可以捕获应用程序的状态、事件、错误和警告等信息,并将其保存到日志文件或其他存储介质中。日志技术可以帮助开发人员和运维团队了解应用程序的运行情况,进…...

【js】map、filter、reduce、fill(待补充...)

const arr [{ id: 1, flag: true },{ id: 2, flag: true },{ id: 3, flag: false },{ id: 4, flag: true }, ]map:返回的是对每个元素进行操作后的结果数组,这个数组的长度和原数组相同 const result arr.map((item: any) > {return item.flag fa…...

【JPC出版】第二届能源与电力系统国际学术会议 (ICEEPS 2023)

第二届能源与电力系统国际学术会议 (ICEEPS 2023) 2023 2nd International Conference on Energy and Electrical Power Systems 第二届能源与电力系统国际学术会议 (ICEEPS 2023)将于2023年10月27日至29日在中国厦门举行。ICEEPS 将汇集能源科学、电气工程和电力系统领域的…...

51单片机的简易篮球计分器倒计时仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

51单片机的简易篮球计分器倒计时仿真设计( proteus仿真程序原理图报告讲解视频) 1.主要功能:2.仿真3. 程序代码4. 原理图5. 设计报告6. 设计资料内容清单&&下载链接 51单片机的简易篮球计分器倒计时仿真设计( proteus仿真程序原理图报告讲解视频…...

医院安全不良事件报告系统源码 PHP+ vue2+element+ laravel8+ mysql5.7+ vscode开发

不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”,结合预存上百套已正在使用的模板,帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件、意…...

Mybatis -- 读取 DATE 类型字段时可能遇到的问题(夏令时问题)

在使用 MYBATIS 读取数据库字段的时候,我们一般需要为查询字段指定数据类型。特别是当我们使用 mybatis generator 去生成对应的接口代码时,会自动按照数据库字段类型生成响应映射规则的代码。   如下,左侧是 date 类型生成的字段映射规则&…...

第10节-PhotoShop基础课程-选区工具

文章目录 前言1.矩形选区 shift 是正方形1.任意比例2.等比绘制 先点击再按shift3.中心绘制1.任意比例 先点击再按Alt2.等比绘制 先点击再按Alt Shift 4.移动选区 按住空格 2.椭圆选区1.椭圆选区2.正圆选区 shift键3.中心圆选区 Alt Shift 3.选取选项1. 选区1.建立选区2.加选 s…...

【C++】C++动态内存管理

🏳️‍🌈C/C内存分布 说明: 1.我们的代码并非放在代码段里的,而是以文件的形式存在磁盘上的。 代码经过编译链接形成的二进制指令,才是放进代码段里的。(即可执行代码) 2.“abcd”如果没有被c…...

Java中使用JTS实现WKT字符串读取转换线、查找LineString的list中距离最近的线、LineString做缓冲区扩展并计算点在缓冲区内的方位角

场景 Java中使用JTS对空间几何计算(读取WKT、距离、点在面内、长度、面积、相交等): Java中使用JTS对空间几何计算(读取WKT、距离、点在面内、长度、面积、相交等)_jts-core_霸道流氓气质的博客-CSDN博客 JavaGeoTools实现WKT数据根据EPSG编码进行坐标系转换&…...

【异步VS多线程】异步VS多线程区别

异步VS多线程区别 1、异步 异步概念:异步是并发编程的一种形式,在同一时刻可以独立于主程序外,可以并发执行另外一些任务。异步的实现方式有两种: 第一种:通过 async TASK来实现异步,第二种:通…...

【nosql】redis之高可用(主从复制、哨兵、集群)搭建

redis群集有三种模式 redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster集群,下面会讲解一下三种模式的工作方式,以及如何搭建cluster群集 ●主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从…...

js如何实现数组去重的常用方法

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 Set(ES6)⭐ 使用 filter 和 indexOf⭐ 使用 reduce⭐ 使用对象属性⭐ 使用 includes 方法(ES6)⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Map相关知识

数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...