Java零基础入门笔记:(4)方法
前言
本笔记是学习狂神的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 返回值;
}
下面的代码定义了一个比大小的方法:
-
main方法:调用max方法,传入两个整数1和2。将max方法的返回值赋值给变量m。 -
max方法:-
返回类型是
int,表示方法返回一个整数。方法接收两个整数参数a和b。 -
定义一个变量
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,并打印每个参数的索引和值。
args是main方法的参数,用于接收从命令行传入的字符串数组。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.length、numbers[i]。
下面的代码演示了使用可变参数接收任意数量的数字,并找出其中的最大值。
-
printMax方法:-
方法定义为
public static void printMax(double... numbers),表示可以接收任意数量的double类型参数。 -
参数
numbers在方法内部被视为一个double类型的数组。
-
-
检查参数数量:
-
如果没有传入任何参数(
numbers.length == 0),打印"No argument passed"并返回。
-
-
寻找最大值:
-
假设第一个参数是最大值(
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();}
}
下面的代码演示了如何使用递归计算阶乘
-
factorial方法:-
如果
n <= 1,返回1(阶乘的基本情况:0! = 1和1! = 1)。 -
否则,递归调用
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;}
}
-
🚀 知识的力量在于分享! 🚀
如果你从我的分享中学到了新知识,或者觉得这些内容对你有帮助,请不吝点赞、关注和收藏!这样不仅能让我更有动力,还能帮助更多人看到这些内容。
-
👍 点赞:让我知道你收获了!
-
👀 关注:获取更多干货!
-
⭐️ 收藏:方便随时复习!
感谢您的支持,我们一起进步!
相关文章:
Java零基础入门笔记:(4)方法
前言 本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。 【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili 第1-2章:Java零基础入门笔记:(1-2)入门(简介、基础知识)-CSDN博客 第3章…...
DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成
🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 Linux网络编程笔记: https://blog.cs…...
BS5852英国家具防火安全条款主要包括哪几个方面呢?
什么是BS5852检测? BS5852是英国针对家用家具的强制性安全要求,主要测试家具在受到燃烧香烟和火柴等火源时的可燃性。这个标准通常分为四个部分进行测试,但实际应用中主要测试第一部分和第二部分,包括烟头测试和利用乙炔火焰模拟…...
VSCode本地python包“无法解析导入”
问题现象 在使用 VSCode 编写 Python 代码时,虽然程序能正常运行,但遇到“无法解析导入”的问题,导致代码无法高亮。 解决方法 配置 python.autoComplete.extraPaths 打开 VSCode 设置(CtrlShiftP -> Preferences: Open Wo…...
本地使用docker部署DeepSeek大模型
1、相关技术介绍 1.1、RAG RAG(Retrieval Augmented Generation),即“检索,增强,生成”,用于提升自然语言处理任务的性能。其核心思想是通过检索相关信息来增强生成模型的能力,具体步骤如下&am…...
Java 不可变集合
1.不可变集合 在 Java 中,不可变集合(Immutable Collections)是指在创建之后无法修改的集合。这些集合不允许添加、删除或修改元素,一旦创建后,内容就不能改变。Java 提供了一些内置的方式来创建不可变集合࿰…...
【全栈】SprintBoot+vue3迷你商城-细节解析(1):Token、Jwt令牌、Redis、ThreadLocal变量
【全栈】SprintBootvue3迷你商城-细节解析(1):Token、Jwt令牌、Redis、ThreadLocal变量 往期的文章都在这里啦,大家有兴趣可以看一下 后端部分: 【全栈】SprintBootvue3迷你商城(1) 【全栈】…...
统计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…...
用什么办法能实现ubuntu里面运行的自己开发的python程序能自动升级。
要实现Ubuntu中自己开发的Python程序自动升级,可以通过以下几种方式: 1. 使用 Git 仓库 定时任务 如果你的Python程序托管在Git仓库中,可以通过定时拉取最新代码来实现自动升级。 步骤: 确保Python程序在Git仓库中。在Ubuntu上…...
day12_调度和可视化
文章目录 day12_调度和可视化一、任务调度1、开启进程2、登入UI界面3、配置租户4、创建项目5、创建工作流5.1 HiveSQL部署(掌握)5.2 SparkDSL部署(掌握)5.3 SparkSQL部署(熟悉)5.4 SeaTunnel部署࿰…...
力扣第4题 寻找两个正序数组的中位数
力扣第4题 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输出:2.0000…...
DC-6靶机渗透测试全过程
目录 前期准备 一、渗透测试 1.IP地址查询 2.端口信息搜寻 3.网页信息搜集 wappalyzer WPScan 反弹shell graham用户 反弹出jens的shell nmap提权 二、总结 前期准备 攻击机: kali windows11 靶机:DC-6靶机(调至NAT模式࿰…...
Win11 远程 连接 Ubuntu20.04(局域网)
Win11 远程 连接 Ubuntu20.04(局域网) 0. Ubuntu 开启共享1. Ubuntu系统中安装RDP服务器2.windows中连接使用方式1:远程桌面连接(winr: mstsc)方式2:mobaXterm 3 问题远程连接后出现黑屏 参考文献: 0. Ubuntu 开启共享 在ubunt设置中&#x…...
探索Hugging Face:开源AI社区的核心工具与应用实践
引言:AI民主化的先锋 在自然语言处理(NLP)领域,Hugging Face已成为开源社区的代名词。这个成立于2016年的平台,通过提供易用的工具和丰富的预训练模型库,彻底改变了开发者使用和部署AI模型的方式。截至202…...
文件分片上传 python
服务端功能 上传分片保存 app.route(/upload_filesliceprocess, methods[POST]) def upload_filesliceprocess(): file request.files[file] name_index request.form[name_index] complete request.form[complete] process request.form[process] c…...
外汇掉期(FX Swap):全球企业管理外汇风险的关键工具(中英双语)
外汇掉期(FX Swap):全球企业管理外汇风险的关键工具 引言 在全球化经济环境下,跨国公司、银行和金融机构经常面临外汇风险,因为它们的业务涉及多种货币。例如,一家中国公司可能需要欧元支付欧洲供应商&am…...
Visual Studio Code支持WSL,直接修改linux/ubuntu中的文件
步骤1 开始通过 WSL 使用 VS Code | Microsoft Learn 点击远程开发扩展包。 步骤2 Remote Development - Visual Studio Marketplace 点击install, 允许打开Visual Studio Code。 步骤3 共有4项,一齐安装。 步骤4 在WSL Linux(Ubuntu)中…...
网络安全“挂图作战“及其场景
文章目录 一、网络安全挂图作战来源与定义1、网络安全挂图作战的来源2、网络安全挂图作战的定义 二、挂图作战关键技术三、挂图作战与传统态势感知的差异四、挂图作战主要场景五、未来趋势结语 一、网络安全挂图作战来源与定义 1、网络安全挂图作战的来源 网络安全挂图作战的…...
开源在线考试系统开源在线考试系统:支持数学公式的前后端分离解决方案
开源在线考试系统:支持数学公式的前后端分离解决方案 项目介绍项目概述:技术栈:版本要求主要功能:特色亮点 项目仓库地址演示地址GiteeGitHub 系统效果展示教师端系统部分功能截图学生端系统部分功能截图 结语 项目介绍 项目概述…...
解决 ssh connect to host github.com port 22 Connection timed out
一、问题描述 本地 pull/push 推送代码到 github 项目报 22 端口连接超时,测试连接也是 22 端口连接超时 ssh 密钥没问题、也开了 Watt Toolkit 网络是通的,因此可以强制将端口切换为 443 二、解决方案 1、测试连接 ssh -T gitgithub.com意味着无法通…...
分享8款AI生成PPT的工具!含测评
随着人工智能技术的飞速进步,制作PPT变得愈发便捷,仅需输入主题指令,便能在瞬间获得一份完整的演示文稿。尤其在制作篇幅较长的PPT时,手动编写每一页内容并设计格式和排版,不仅效率低下,而且耗时耗力。 本…...
Java 设计模式总结
文章目录 Java 设计模式总结创建型模式(5种)结构型模式(7种)行为型模式(11种) Java 设计模式总结 设计模式(Design Patterns)是软件工程中解决常见问题的经典解决方案。它们提供了一…...
Spring Boot Actuator 监控✨
Spring Boot Actuator 是 Spring Boot 提供的一个强大的监控和管理工具,它可以帮助你深入了解和监控你的应用程序的运行状态。通过 Actuator,你可以获取应用程序的健康状况、内存使用情况、线程信息、HTTP 请求跟踪等。🚀 核心知识点 &#…...
解锁原型模式:Java 中的高效对象创建之道
系列文章目录 后续补充~~~ 文章目录 一、引言1.1 软件开发中的对象创建困境1.2 原型模式的登场 二、原型模式的核心概念2.1 定义与概念2.2 工作原理剖析2.3 与其他创建型模式的差异 三、原型模式的结构与角色3.1 抽象原型角色3.2 具体原型角色3.3 客户端角色3.4 原型管理器角色…...
23种设计模式 - 责任链
模式定义 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,允许多个对象按链式顺序处理请求,直到其中一个对象处理为止。该模式将请求的发送者和接收者解耦,使多个对象都有机会处理请求。 模式结构…...
【Linux-命令】
Linux-命令 ■ ls■ cd■ pwd■ tree■ mkdir■ rm■ mv■ cp■ chmod■ chattr 文件的特殊属性■ cat■ 日期■ 关机■ find■ 查看文件内容■ cat■ ln■ mount 挂载一个文件系统■ uname■ 用户和组■ 打包和压缩■ zip■ gzip■ rar■ tar ■ 包■ rpm 包■ yum 软件包升级…...
豪越科技:消防安全重点单位一体化安全管控
在当今数字化高速发展的时代,消防安全的重要性日益凸显。豪越科技以其卓越的技术实力和创新精神,将物联网、大数据、人工智能等先进技术深度融合,打造出了功能强大的消防安全重点单位一体化安全管控平台,为消防安全管理带来了全新…...
LabVIEW无刷电机控制器检测系统
开发了一种基于LabVIEW的无刷电机控制器检测系统。由于无刷电机具有高效率、低能耗等优点,在电动领域有取代传统电机的趋势,而无刷电机的核心部件无刷电机控制器产量也在不断增长。然而,无刷电机控制器的出厂检测仍处于半自动化状态ÿ…...
EXCEL解决IF函数“您已为此函数输入太多个参数”的报错
IF函数的基本结构是IF(条件, 值为真时的结果, 值为假时的结果),所以标准的IF函数最多只能有三个参数。当用户输入的参数超过三个时,Excel就会报这个错误。比如多个IF语句叠加,但可能在嵌套的过程中没有正确关闭每个IF函数的括号,导…...
C#使用文件读写操作实现仙剑五前传称号存档修改
手把手教学仙剑五前传 称号存档修改器 首先找到 Pal5Q所在目录的save\global.sav 文件,这是一个只有488字节的文件,这里存放称号对应的编号ID,以及是否已获得该称号,1为已获取称号,0为未获取称号 [称号:是否获取]这是一个键值对 称号的编号ID是一个Int32数字,使用C#的方法Bi…...
