Java零基础入门笔记:(4)方法

news2025/2/22 0:25:45

 前言

本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。

【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili

第1-2章:Java零基础入门笔记:(1-2)入门(简介、基础知识)-CSDN博客

第3章:Java零基础入门笔记:(3)程序控制-CSDN博客

-

方法

何谓方法

Java方法是语句的集合,它们在一起执行一个功能。

  • 方法是解决一类问题的步骤的有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用

设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展

下面的代码定义了一个add方法,用于实现两个数的加法。

  • static 关键字用于修饰方法时,这种类型的方法被称为静态方法(Static Method)。
package method;

public class demo1 {
    public static void main(String[] args) {
        int sum = add(1,2);
        System.out.println(sum);
    }
    
    public static int add(int a, int b){    // static变成类方法,这样main里面就能调用了
        return a+b;
    }
}
3

-

方法的定义

在编程中,方法(Method) 是一种封装了特定功能的代码块,用于执行特定的任务或计算。方法允许我们将复杂的程序分解为更小的、可重用的模块,从而使代码更加清晰、易于维护和扩展。

Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:

 方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

  • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。如public、static
  • 返回值类型:方法可能会返回值。如int、double等。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void。
  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指力法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。如int、double等。
    • 形式参数:在方法被调用时用于接收外界输入的数据
    • 实参:调用方法时实际传给方法的数据
  • 方法体:方法体包含具体的语句,定义该方法的功能
修饰符 返回值类型 方法名(参数类型 参数名,...){
    ...
    方法体
    ...
    return 返回值;
}

下面的代码定义了一个比大小的方法:

  1. main 方法:调用 max 方法,传入两个整数 12。将 max 方法的返回值赋值给变量 m

  2. max 方法

    1. 返回类型是 int,表示方法返回一个整数。方法接收两个整数参数 ab

    2. 定义一个变量 result,并初始化为 b。使用 if 语句判断 a 是否大于 b:如果 a > b,则将 result 的值更新为 a。最后,使用 return result; 返回较大的值。

package method;

public class demo1 {
    public static void main(String[] args) {
        int m = max(1, 2);
        System.out.println(m);
    }

    public static int max(int a, int b){
        int result = b;     // 返回值一定要初始化,其他的变量可以不初始化
        if (a > b){
            result = a;
        }
        return result;
    }
}
2

-

方法调用

调用方法:对象名.方法名(实参列表)

Java支持两种调用方法的方式,根据方法是否返回值来选择。

当方法返回一个值的时候,方法调用通常被当做一个值。例如:

int larger = max(30,40);

如果方法返回值是void,方法调用一定是一条语句。如:

System.out.println( "Hello,kuangshen! ");

-

课后拓展了解:值传递(Java) 和 引用传递

值传递:是指方法接收的是实际参数的副本,而不是参数本身。这意味着在方法内部对参数的修改不会影响原始变量。

  • 参数的值被复制到方法的局部变量中。
  • 方法内部对参数的修改不会影响外部的原始变量。

引用传递:Java 中的引用传递实际上是引用的值传递,而不是真正的引用传递。方法接收的是对象引用的副本,但这个副本指向同一个对象。

  • 方法接收的是对象引用的副本。

  • 方法内部对对象的修改会影响原始对象,因为它们指向同一个内存地址。

  • 但方法不能改变引用本身(即不能改变对象的指向)。

-

方法重载

方法重载 是 Java 中的一个重要特性,允许在同一个类中定义多个同名方法,只要它们的参数列表不同。方法重载是实现多态的一种方式,可以让方法根据传入的参数类型和数量选择不同的实现。

 方法的重载的规则:

  • 方法名称必须相同
  • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。
  • 方法的返回类型可以相同也可以不相同。仅仅返回类型不同不足以成为方法的重载。

实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。

下面的代码演示了一个方法重载的代码:在代码中,两个max方法名字一样,但参数类型不同,因此在调用时会根据不同的参数调用不同的方法。

package method;

public class demo1 {
    public static void main(String[] args) {
        int m = max(1, 2);      // 调用第一个
        System.out.println(m);
        double m1 = max(1.0, 2.0);   // 调用第二个
        System.out.println(m1);

    }

    public static int max(int a, int b){
        int result = b;     // 返回值一定要初始化,其他的变量可以不
        if (a > b){
            result = a;
        }
        return result;
    }
    public static double max(double a, double b){
        double result = b;     // 返回值一定要初始化,其他的变量可以不
        if (a > b){
            result = a;
        }
        return result;
    }

}
2
2.0

-

命令行传参

运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。

这段代码的功能是遍历命令行参数数组 args,并打印每个参数的索引和值。

  • argsmain 方法的参数,用于接收从命令行传入的字符串数组。args.length 表示命令行参数的数量。
  • 在循环中,使用 System.out.println 打印每个参数的索引和值。格式为:args[i]: 参数值

package scanner;

public class demo1 {
    public static void main(String[] args) {
        for(int i=0; i<args.length; i++){
            System.out.println("args[" + i + "]: " +args[i]);
        }
    }
}

下面演示了如何在命令行使用参数,

  • 在第一个java scanner.demo1中,无参数输入,因此也无任何输出
  • 在第一个java scanner.demo1中,有4个参数,因此打印4行

需要注意,编译后要退到src才能运行 

PS E:\Java_Demo\demo\src> cd .\scanner\
PS E:\Java_Demo\demo\src\scanner> javac demo1.java
PS E:\Java_Demo\demo\src\scanner> cd ..
PS E:\Java_Demo\demo\src> java scanner.demo1
PS E:\Java_Demo\demo\src> java scanner.demo1 this is sherlock ma
args[0]: this
args[1]: is
args[2]: sherlock
args[3]: ma

 -

可变参数

在 Java 中,可变参数(Varargs) 是一种特殊的参数类型,允许方法接收任意数量的参数。可变参数通常用于需要处理多个参数但不确定具体数量的场景。

语法:在方法声明中,在指定参数类型后加一个省略号(.…)。

  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
  • 只能有一个可变参数
  • 其本质是数组,可以使用数组的方法和属性。例如:numbers.lengthnumbers[i]

下面的代码演示了使用可变参数接收任意数量的数字,并找出其中的最大值。

  1. printMax 方法

    • 方法定义为 public static void printMax(double... numbers),表示可以接收任意数量的 double 类型参数。

    • 参数 numbers 在方法内部被视为一个 double 类型的数组。

  2. 检查参数数量

    • 如果没有传入任何参数(numbers.length == 0),打印 "No argument passed" 并返回。

  3. 寻找最大值

    • 假设第一个参数是最大值(result = numbers[0])。

    • 使用 for 循环遍历数组,比较每个元素是否大于当前的最大值。

    • 如果找到更大的值,则更新 result

package method;

public class demo1 {
    public static void main(String[] args) {
        printMax(34, 3, 3, 2, 56.5);
    }

    public static void printMax( double... numbers) {
        if (numbers. length == 0) {
            System.out.println("No argument passed");
            return;
        }

        double result = numbers[0];

        //遍历数组!
        for (int i = 1; i < numbers.length; i++){
            if (numbers[i] > result) {
                result = numbers[i];
            }
        }
        System.out.println("The max value is " + result);
    }

}
The max value is 56.5

-

递归

递归就是:A方法调用A方法!就是自己调用自己

利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

递归结构包括两个部分:

  • 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
  • 递归体:什么时候需要调用自身方法。

  

下面的代码不要跑,死循环! 

package com.dawnsmile.method;
 
public class Demo05 {    // 死循环!
    public static void main(String[] args) {
        Demo05 test = new Demo05();
        test.test();
    }
 
    public void test(){
        test();
    }
}

下面的代码演示了如何使用递归计算阶乘

  1. factorial 方法

    1. 如果 n <= 1,返回 1(阶乘的基本情况:0! = 11! = 1)。

    2. 否则,递归调用 factorial(n-1),并将结果乘以 n(递归公式:n! = (n-1)! * n)。

package scanner;

public class demo1 {
    public static void main(String[] args) {
        int result = factorial(5);
        System.out.println(result);
    }

    public static int factorial(int n){
        if(n <= 1){
            return 1;
        }else {
            return factorial(n-1) * n;
        }
    }
}
120

其运算过程如下:

factorial(5) = factorial(4) * 5
factorial(4) = factorial(3) * 4
factorial(3) = factorial(2) * 3
factorial(2) = factorial(1) * 2
factorial(1) = 1

因此,factorial(5) 的计算过程为:factorial(5) = 1 * 2 * 3 * 4 * 5 = 120

 -

 练习

写一个计算器,要求能实现加减乘除,并且能不断循环接收新的数据,通过用户交互实现。

package scanner;
import java.util.Scanner;

public class demo1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入符号,按q退出:");
        String s = scanner.next();
        while (!s.equals("q")){
            if (!(s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/"))){
                System.out.println("异常值!");
                break;
            }
            
            System.out.print("请输入第一个数字:");
            int a = scanner.nextInt();
            System.out.print("请输入第二个数字:");
            int b = scanner.nextInt();
            
            switch (s){
                case "+":
                    System.out.println(add(a, b));
                    break;
                case "-":
                    System.out.println(subtract(a, b));
                    break;
                case "*":
                    System.out.println(multiply(a, b));
                    break;
                case "/":
                    System.out.println(divide(a, b));
                    break;
            }
            
            System.out.print("请输入符号,按q退出:");
            s = scanner.next();
        }
    }

    public static int add(int a, int b) {
        return a + b;
    }

    public static int subtract(int a, int b) {
        return a - b;
    }

    public static int multiply(int a, int b) {
        return a * b;
    }

    public static int divide(int a, int b) {
        return a / b;
    }
}

-

🚀 知识的力量在于分享! 🚀

如果你从我的分享中学到了新知识,或者觉得这些内容对你有帮助,请不吝点赞、关注和收藏!这样不仅能让我更有动力,还能帮助更多人看到这些内容。

  • 👍 点赞:让我知道你收获了!

  • 👀 关注:获取更多干货!

  • ⭐️ 收藏:方便随时复习!

感谢您的支持,我们一起进步!

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

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

相关文章

DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…

VSCode本地python包“无法解析导入”

问题现象 在使用 VSCode 编写 Python 代码时&#xff0c;虽然程序能正常运行&#xff0c;但遇到“无法解析导入”的问题&#xff0c;导致代码无法高亮。 解决方法 配置 python.autoComplete.extraPaths 打开 VSCode 设置&#xff08;CtrlShiftP -> Preferences: Open Wo…

本地使用docker部署DeepSeek大模型

1、相关技术介绍 1.1、RAG RAG&#xff08;Retrieval Augmented Generation&#xff09;&#xff0c;即“检索&#xff0c;增强&#xff0c;生成”&#xff0c;用于提升自然语言处理任务的性能。其核心思想是通过检索相关信息来增强生成模型的能力&#xff0c;具体步骤如下&am…

统计5分钟nginx访问日志的数据并设置阈值告警

1.脚本统计生成deny_ip文件 #!/usr/bin/bash#Tate:2022.3.30 #Author:Yingjian #function: 统计5分钟之内的访问ip #env#脚本存放的目录 workdircd $(dirname $0);pwdif [ $# -eq 0 ];then echo "Usage: $0 {统计几分钟内的ip}" exit 2 filogfile/var/log/nginx/acc…

day12_调度和可视化

文章目录 day12_调度和可视化一、任务调度1、开启进程2、登入UI界面3、配置租户4、创建项目5、创建工作流5.1 HiveSQL部署&#xff08;掌握&#xff09;5.2 SparkDSL部署&#xff08;掌握&#xff09;5.3 SparkSQL部署&#xff08;熟悉&#xff09;5.4 SeaTunnel部署&#xff0…

DC-6靶机渗透测试全过程

目录 前期准备 一、渗透测试 1.IP地址查询 2.端口信息搜寻 3.网页信息搜集 wappalyzer WPScan 反弹shell graham用户 反弹出jens的shell nmap提权 二、总结 前期准备 攻击机&#xff1a; kali windows11 靶机&#xff1a;DC-6靶机&#xff08;调至NAT模式&#xff0…

Win11 远程 连接 Ubuntu20.04(局域网)

Win11 远程 连接 Ubuntu20.04(局域网&#xff09; 0. Ubuntu 开启共享1. Ubuntu系统中安装RDP服务器2.windows中连接使用方式1&#xff1a;远程桌面连接(winr: mstsc)方式2&#xff1a;mobaXterm 3 问题远程连接后出现黑屏 参考文献: 0. Ubuntu 开启共享 在ubunt设置中&#x…

Visual Studio Code支持WSL,直接修改linux/ubuntu中的文件

步骤1 开始通过 WSL 使用 VS Code | Microsoft Learn 点击远程开发扩展包。 步骤2 Remote Development - Visual Studio Marketplace 点击install&#xff0c; 允许打开Visual Studio Code。 步骤3 共有4项&#xff0c;一齐安装。 步骤4 在WSL Linux(Ubuntu)中&#xf…

开源在线考试系统开源在线考试系统:支持数学公式的前后端分离解决方案

开源在线考试系统&#xff1a;支持数学公式的前后端分离解决方案 项目介绍项目概述&#xff1a;技术栈&#xff1a;版本要求主要功能&#xff1a;特色亮点 项目仓库地址演示地址GiteeGitHub 系统效果展示教师端系统部分功能截图学生端系统部分功能截图 结语 项目介绍 项目概述…

解决 ssh connect to host github.com port 22 Connection timed out

一、问题描述 本地 pull/push 推送代码到 github 项目报 22 端口连接超时&#xff0c;测试连接也是 22 端口连接超时 ssh 密钥没问题、也开了 Watt Toolkit 网络是通的&#xff0c;因此可以强制将端口切换为 443 二、解决方案 1、测试连接 ssh -T gitgithub.com意味着无法通…

分享8款AI生成PPT的工具!含测评

随着人工智能技术的飞速进步&#xff0c;制作PPT变得愈发便捷&#xff0c;仅需输入主题指令&#xff0c;便能在瞬间获得一份完整的演示文稿。尤其在制作篇幅较长的PPT时&#xff0c;手动编写每一页内容并设计格式和排版&#xff0c;不仅效率低下&#xff0c;而且耗时耗力。 本…

豪越科技:消防安全重点单位一体化安全管控

在当今数字化高速发展的时代&#xff0c;消防安全的重要性日益凸显。豪越科技以其卓越的技术实力和创新精神&#xff0c;将物联网、大数据、人工智能等先进技术深度融合&#xff0c;打造出了功能强大的消防安全重点单位一体化安全管控平台&#xff0c;为消防安全管理带来了全新…

LabVIEW无刷电机控制器检测系统

开发了一种基于LabVIEW的无刷电机控制器检测系统。由于无刷电机具有高效率、低能耗等优点&#xff0c;在电动领域有取代传统电机的趋势&#xff0c;而无刷电机的核心部件无刷电机控制器产量也在不断增长。然而&#xff0c;无刷电机控制器的出厂检测仍处于半自动化状态&#xff…

EXCEL解决IF函数“您已为此函数输入太多个参数”的报错

IF函数的基本结构是IF(条件, 值为真时的结果, 值为假时的结果)&#xff0c;所以标准的IF函数最多只能有三个参数。当用户输入的参数超过三个时&#xff0c;Excel就会报这个错误。比如多个IF语句叠加&#xff0c;但可能在嵌套的过程中没有正确关闭每个IF函数的括号&#xff0c;导…

C#使用文件读写操作实现仙剑五前传称号存档修改

手把手教学仙剑五前传 称号存档修改器 首先找到 Pal5Q所在目录的save\global.sav 文件,这是一个只有488字节的文件,这里存放称号对应的编号ID,以及是否已获得该称号,1为已获取称号,0为未获取称号 [称号:是否获取]这是一个键值对 称号的编号ID是一个Int32数字,使用C#的方法Bi…

记录一次部署PC端网址全过程

当我查看我之前写的文章时、顿时惊奇发出感慨&#xff1a;啥时候写的&#xff1f;是我写的么&#xff1f;疑惑重重… 所以说&#xff0c;好记性不如烂笔头。 记录一次部署PC端网址全过程 部署PC端网址分是三步&#xff1a;第一步&#xff1a;申请域名并映射到外网IP &#xff0…

Spring——Spring开发实战经验(4)

摘要 本文深入探讨了 Spring 应用中 Interceptor&#xff08;拦截器&#xff09;、Filter&#xff08;过滤器&#xff09;和 Aspect&#xff08;切面&#xff09;的执行顺序、职责及典型使用场景。Filter 是 Servlet 级别的机制&#xff0c;主要用于日志记录、权限验证等&…

小白win10安装并配置yt-dlp

需要yt-dlp和ffmpeg 注意存放路径最好都是全英文 win10安装并配置yt-dlp 一、下载1.下载yt-dlp2. fffmpeg下载 二、配置环境三、cmd操作四、yt-dlp下视频操作 一、下载 1.下载yt-dlp yt-dlp地址 找到win的压缩包点下载&#xff0c;并解压 2. fffmpeg下载 ffmpeg官方下载 …

I²C简介

前言 IC&#xff08;Inter-Integrated Circuit, 内置集成电路&#xff09;总线是由Philips公司&#xff08;现属于恩智浦&#xff09;在上世纪80年代开发的两线式串行通信总线&#xff0c;用于连接微控制器及其外围设备&#xff0c;控制设备之间的通信。 IC总线的物理拓扑示意…

【Vue+python】Vue调用python-fastApi接口实现数据(数值、列表类型数据)渲染

前言&#xff1a;之前做的一直都是SpringBootVue的应用&#xff0c;但现在需要实现一个能将python实现的算法应用展示在前端的界面。想法是直接Vue调用python-fastApi接口实现数据渲染~ 文章目录 1. 变量定义2. axios调用python3. 跨域问题解决4. 数据渲染4.1 数值数据渲染4.2 …