当前位置: 首页 > 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编程领域取得成功。在未来的项目中,这些概念将成为解决复杂问题和开发强大应用程序的重要工具。

http://www.lryc.cn/news/163343.html

相关文章:

  • 合同交付类项目如何高效管理?
  • 两性养生网站源码 生活类减肥网站源码 健康网模板源码 支持QQ登录和百度主动推送
  • CentOS7安装Jenkins(更改默认运行的端口号8080->16060)
  • Java开发之Mysql【面试篇 完结版】
  • 【实战】十二、自动化测试 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十九)
  • 【人月神话】重新探索人月神话:软件工程的现实与挑战
  • 电阻和电容
  • 01-Java-日志框架
  • 【js】map、filter、reduce、fill(待补充...)
  • 【JPC出版】第二届能源与电力系统国际学术会议 (ICEEPS 2023)
  • 51单片机的简易篮球计分器倒计时仿真设计( proteus仿真+程序+原理图+报告+讲解视频)
  • 医院安全不良事件报告系统源码 PHP+ vue2+element+ laravel8+ mysql5.7+ vscode开发
  • Mybatis -- 读取 DATE 类型字段时可能遇到的问题(夏令时问题)
  • 第10节-PhotoShop基础课程-选区工具
  • 【C++】C++动态内存管理
  • Java中使用JTS实现WKT字符串读取转换线、查找LineString的list中距离最近的线、LineString做缓冲区扩展并计算点在缓冲区内的方位角
  • 【异步VS多线程】异步VS多线程区别
  • 【nosql】redis之高可用(主从复制、哨兵、集群)搭建
  • js如何实现数组去重的常用方法
  • XREAL Air 2 Pro发布,加入电致变色技术,拓展AR眼镜使用场景
  • Go基础11-理解Go语言的包导入
  • 【MySQL数据库原理】在MySQL Workbench界面运行SQL代码——学生管理系统
  • 高分三号1米分辨率飞机检测识别数据集
  • Unity 之Material 类型和 MeshRenderer 组件中的 Materials 之间有一些重要的区别
  • 【LeetCode-简单题】977. 有序数组的平方
  • 【笔试强训选择题】Day39.习题(错题)解析
  • Prometheus-Alertmanager 警报管理器-部署和设置
  • 恒运资本:小盘股的优点?投资小盘股要注意哪些方面?
  • LeetCode:2. 两数之和
  • OpenCV(二十四):可分离滤波