Java基础学习笔记-5

这篇具有很好参考价值的文章主要介绍了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编程领域取得成功。在未来的项目中,这些概念将成为解决复杂问题和开发强大应用程序的重要工具。文章来源地址https://www.toymoban.com/news/detail-701519.html

到了这里,关于Java基础学习笔记-5的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【从零开始学习JAVA | 第四十五篇】反射

    目录 前言: ​反射:  使用反射的步骤: 1.获取阶段: 2.使用阶段: 反射的应用场景: 使用反射的优缺点: 总结: Java中的反射是一项强大而灵活的功能,它允许程序在运行时 动态地获取、操作和利用类的信息 。通过反射,我们可以在运行时检查和修改类的属性、调用类

    2024年02月13日
    浏览(42)
  • 【从零开始学习JAVA | 第三十篇】方法引用

    目录 前言: 方法引用: 方法引用基本概念: 方法可以被引用的条件: 方法引用的种类: 方法引用的优点: 总结: 方法引用作为一个重要的知识点,虽然他使用起来很复杂,而且会降低代码的可读性,但是如果用好了方法引用,我们也会获得不错的效率,因此我们在今天

    2024年02月15日
    浏览(26)
  • 【从零开始学习JAVA | 第二十五篇】泛型

    目录 前言: 泛型: 额外拓展: 总结:         本文将详细介绍之前我们在JAVA 中一直在讲的泛型,各位感兴趣的同学可以点击进来观看。         泛型是一种编程概念, 它允许在定义类、接口或方法时使用类型参数,这样可以在使用时指定实际的类型。 通过使用泛

    2024年02月16日
    浏览(33)
  • 【从零开始学习JAVA | 第十八篇】接口介绍

    目录 前言: 接口: 如何定义一个接口: 如何使用一个接口: 接口中成员的特点: 接口与类的区别:   接口的应用: 总结:         接口其实是为了弥补继承的缺点: 我们无法让父类完美的适应每一个子类的要求 。 例如我们有一个动物类的父类,有一个蝌蚪类,鱼

    2024年02月10日
    浏览(37)
  • 【从零开始学习JAVA | 第四十一篇】深入JAVA锁机制

    目录 前言:          引入: 锁机制:  CAS算法: 乐观锁与悲观锁: 总结: 在多线程编程中,线程之间的协作和资源共享是一个重要的话题。当多个线程同时操作共享数据时,就可能引发数据不一致或竞态条件等问题。为了解决这些问题,Java提供了强大的锁机制,使得

    2024年02月14日
    浏览(43)
  • 【从零开始学习JAVA | 第二十七篇】JAVA期末练习(PTA)

    目录 前言: R7-5 Count the letters in a string (统计字符串中的字符) R7-1 找素数 R7-3 电话号码同步(Java) 总结:         临近期末,我也更新一下PTA上的JAVA大题,希望各位都可以考出一个好的成绩。 (Count the letters in a string) (统计字符串中的字符) Write a method that counts th

    2024年02月16日
    浏览(39)
  • 【从零开始学习JAVA | 第十九篇】初识内部类

    内部类是类的五大成员。一个类的其他的成员分别是属性,方法,构造方法,代码块。本文将详细介绍什么是内部类,以及内部类的意义。 内部类(Inner Class)是 Java 中的一个特殊概念,它指的是 一个类定义在另一个类内部的类。 内部类可以访问外部类的成员,包括私有的

    2024年02月15日
    浏览(26)
  • 【从零开始学习JAVA | 第四十篇】了解线程池

    目录 前言: 线程池: 线程池的工作流程: 代码实现线程池: 任务拒绝策略:  线程池多大才算合适? 总结:         在Java编程中,线程池是一个强大的工具,它能够管理和复用线程,提供高效的并发处理能力。通过线程池,我们可以有效地控制并发线程的数量,并降

    2024年02月13日
    浏览(46)
  • 【从零开始学习JAVA | 三十四篇】IO流

    目录 前言: IO流介绍: IO流的常见方法: 1.字节流类: 2.字符流类: 总结:                 IO流就是存入和读取数据的解决方案,并且他是一个知识点很多的章节,因此我们关于IO流的介绍会分为多篇来进行详解,而掌握好IO流可以大大提高我们的效率,简化我们的代码执

    2024年02月13日
    浏览(29)
  • 【从零开始学习JAVA | 三十九篇】深入多线程

    目录 前言:         ​1.线程的寿命周期​ 2.线程的安全问题 3.锁 同步代码块: 同步方法: 死锁: 4.生产者和消费者模式(等待唤醒机制) 总结:         当今软件开发领域中,多线程编程已成为一项至关重要的技能。然而,要编写出高效、可靠的多线程程序并不容

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包