java-方法-动动小手指给个一键三连吧❤️✨

请添加图片描述

文章目录

    • 1.概念
    • 2.静态方法和非静态方法
        • 2.1静态方法
        • 2.2非静态方法
    • 3 参数传递方式
    • 4.方法的重载
    • 5.命令行传参
    • 6.可变参数
    • 7.递归
    • 作业

1.概念

在面向对象编程中,方法(Method)是类或对象中用于执行特定任务的一段代码。方法可以访问和操作对象的属性,并提供了一种封装行为的方式。
方法通常用于描述对象的行为或操作,它们定义了对象可以执行的操作,并在需要时接受输入参数并返回结果。方法可以被其他代码调用,并且可以在需要时被重复使用,从而实现了代码的模块化和重用。
方法一般由以下几个组成部分:

  • 方法名:方法的名称用于标识和区分不同的方法。
  • 参数列表:方法可以接受零个或多个输入参数,这些参数用于传递数据给方法进行处理。
  • 返回类型:方法可能会返回一个值作为结果,返回类型指定了返回值的数据类型。
  • 方法体:方法体是包含实际代码的部分,它描述了方法的具体实现。
package com.determination;public class Day11601 {//main方法public static void main(String[] args) {sayHello();System.out.println("两个数中最大的是:"+max(4,5));}/*修饰符 返回值类型 方法名(。。。){方法体返回值}*/public static void sayHello(){System.out.println("Hello world!");return;}public static int max(int a,int b){return a>b?a:b;}
}

当我们调用一个方法时,程序会跳转到该方法的代码块中执行相应的操作。在方法内部,我们可以通过参数来访问传递进来的数据,并通过方法体中的代码来处理这些数据。最后,方法可以根据需要返回一个结果给调用方。

2.静态方法和非静态方法

2.1静态方法

在面向对象编程中,静态方法(Static Method)是一种特殊的方法,不需要创建对象实例即可调用。静态方法是直接与类相关联的,而不是与类的对象相关联的。
使用static关键字来定义静态方法。在静态方法内部,不能直接访问非静态成员变量或方法,因为非静态成员变量和方法需要依赖于对象的实例才能被访问。但是,静态方法可以访问静态成员变量或静态方法。
静态方法在设计模式中有广泛应用,例如工厂模式。在工厂模式中,我们使用静态方法来创建对象,而不是通过new操作符来创建对象。这种方式可以将对象的创建逻辑封装在方法中,并提供更加灵活的对象创建方式。
静态方法还可以用于工具类或辅助类中,这些类通常只提供一些公用方法,而不需要维护任何状态或对象实例。使用静态方法可以避免创建多余的对象实例,从而提高程序的性能和效率。
Day11602.java

package com.determination;public class Day11602 {public static void main(String[] args) {Student.say();}
}

Student.java

package com.determination;public class Student {//静态方法·public static void say(){System.out.println("学生说话了!!");}
}

输出

学生说话了!!
2.2非静态方法

在面向对象编程中,非静态方法(Non-static Method)是与类的对象相关联的方法。也就是说,只有当类的一个实例化对象被创建后,才能调用非静态方法。
非静态方法是通过对象来调用的,因此它们可以直接访问和操作对象的非静态成员变量或方法。在非静态方法内部,可以使用this关键字来引用当前对象,从而获取或修改对象的状态。
使用非静态方法可以实现面向对象编程中的封装和抽象特性。非静态方法通常用于描述对象的行为或操作,例如读取或修改对象的状态、执行某些动作、计算属性等等。
当我们调用一个非静态方法时,程序首先需要创建一个对象实例,然后通过该对象来调用方法。由于每个对象都有一份独立的状态,因此同一个类的不同对象可能会产生不同的结果。
在这里插入图片描述
11602.java

package com.determination;public class Day11602 {public static void main(String[] args) {//Student.say();Student student=new Student();student.say();}
}

Student.java

package com.determination;public class Student {//静态方法·
//    public static void say()
//    {
//        System.out.println("学生说话了!!");
//    }//非静态方法public void say(){System.out.println("学生说话了!");}
}

static 关键字修饰的成员(包括静态方法和静态变量)是与类一起加载的。

在 Java 中,当类被加载到内存中时,静态成员会随着类的加载而加载,并且在类加载过程中只会加载一次。静态成员的加载顺序是按照定义的顺序进行的。
当类被加载时,Java 虚拟机会为该类分配内存,并且静态成员会被初始化。静态变量会被赋予默认值(如果有的话),或者通过显式赋值来初始化。静态方法也会被加载到内存中,供类直接调用。
由于静态成员是和类相关联的,它们可以在没有创建对象实例的情况下被访问和使用。我们可以通过类名直接调用静态方法或访问静态变量,无需创建对象。
需要注意的是,静态成员在内存中存在于整个程序执行期间,直到程序结束或类被卸载。因此,静态成员应谨慎使用,避免滥用静态变量,特别是在多线程环境下,需要考虑线程安全性。
需要注意的是:
实参与形参的参数类型要对应,不能出现定义的形参是int型,结果传递过来的是字符型char

3 参数传递方式

  • 值传递
    值传递是指将实参的值复制一份传递给形参,在方法内部对形参进行修改不会影响到实参本身。简单来说,值传递就是把数据的副本传递给方法。
public void swap(int x, int y) {int temp = x;x = y;y = temp; //没有返回值,仅仅是对a,b的副本x,y进行了交换数值
}
int a = 1, b = 2;
swap(a, b);
System.out.println("a=" + a + ", b=" + b); // 输出 a=1, b=2

在上面的例子中,swap 方法接收两个 int 类型的参数 x 和 y,通过将 x 和 y 的值进行交换来实现交换两个变量的值。但是,当我们调用 swap 方法时,并没有改变 a 和 b 的值,因为 swap 方法接收的是 a 和 b 的副本,交换操作只是在副本中进行的。

  • 引用传递
    引用传递是指将实参的引用传递给形参,在方法内部对形参进行修改会影响到实参本身。简单来说,引用传递就是把数据的地址传递给方法。
public void changeName(Student s, String name) {s.setName(name);
}
Student stu = new Student("Tom", 18);
changeName(stu, "Jerry");
System.out.println(stu.getName()); // 输出 Jerry

changeName 方法接收一个 Student 类型的对象 s 和一个 String 类型的参数 name,通过修改 s 对象的姓名来实现修改学生的姓名。当我们调用 changeName 方法时,传递的是 stu 对象的引用,因此在方法内部对 s 对象的修改会影响到 stu 对象本身。

4.方法的重载

方法的重载(Method Overloading)是指在一个类中可以定义多个方法,它们具有相同的名称但参数列表不同(参数个数、参数类型或参数顺序)。通过方法的重载,可以方便地使用相同的方法名进行不同的操作。

方法的重载有以下特点:

  • 方法名相同:重载的方法必须具有相同的名称。
  • 参数列表不同:重载的方法必须在参数列表上有所区别,包括参数个数、参数类型或参数顺序。
  • 返回类型可以相同也可以不同:重载的方法可以具有相同的返回类型,也可以有不同的返回类型。返回类型不是重载方法的区分标准。

例如,下面是一个计算两个整数之和的方法的重载示例:

public class Calculator {public int add(int a, int b) {return a + b;}public double add(double a, double b) {return a + b;}
}

Calculator 类定义了两个名为 add 的方法,一个接收两个 int 类型的参数,另一个接收两个 double 类型的参数。这样,当我们调用 add 方法时,可以根据传入的参数类型自动选择匹配的方法进行计算。
使用方法重载的好处包括:

  • 提高代码的可读性和可维护性:通过使用相同的方法名进行不同的操作,可以降低方法命名的复杂性,使代码更加清晰易懂。
  • 简化代码逻辑:当我们需要进行类似但略有差异的操作时,可以直接调用重载的方法,避免编写多个类似的方法。
  • 方便使用:通过方法重载,可以根据传入参数的不同灵活地选择合适的方法,方便使用者。
    需要注意的是,在进行方法重载时,应该确保方法的功能是相似的,即具有相同的语义。否则,如果方法的功能不同,容易引起混淆和错误的调用。

5.命令行传参

在 Java 中,命令行参数以字符串数组的形式传递给 main 方法。main 方法的声明如下:

public static void main(String[] args)

其中,args 是一个字符串数组,包含了传递给程序的所有命令行参数。args 数组的长度即为传递参数的个数。

package com.determination;public class Day11603 {public static void main(String[] args) {//args.length 数组长度for(int i=0;i<args.length;i++){System.out.println("args["+i+"]:"+args[i]);}}
}

然后如下图所示操作
在这里插入图片描述
显示结果:
在这里插入图片描述
需要注意的是,命令行参数总是以字符串的形式传递给程序。如果需要将其转换为其他类型,需要进行相应的类型转换操作。

6.可变参数

可变参数(Varargs)是 Java 5 中引入的一个特性,它允许我们在方法中接受不定数量的参数。可变参数使得方法在调用时更加灵活,可以传递任意数量的参数。
在 Java 中,可变参数通过使用省略号 (…) 来声明。可变参数必须是方法的最后一个参数,且只能有一个可变参数。

下面是一个使用可变参数的示例:

public class VarargsExample {public static void main(String[] args) {printNumbers(1, 2, 3);printNumbers(4, 5, 6, 7, 8);printNumbers(9);}public static void printNumbers(int... numbers) {System.out.println("Numbers:");for (int number : numbers) {System.out.println(number);}}
}

在上述示例中,printNumbers 方法使用了可变参数 numbers。我们可以向该方法传递任意数量的整数参数。在方法内部,我们可以像操作普通数组一样来处理可变参数。在printNumbers 方法中,我们遍历可变参数数组,并打印每个数字。

Numbers:
1
2
3
Numbers:
4
5
6
7
8
Numbers:
9

需要注意以下几点:

  • 可变参数可以接受零个或多个参数,也可以传递一个数组作为参数。
  • 如果方法有多个参数,可变参数必须放在最后一个参数的位置。
  • 如果方法除了可变参数外还有其他参数,那么传递给可变参数的值将作为数组存储在参数中。
  • 可变参数在编译时被转换为数组。因此,我们可以像处理数组一样来处理可变参数。
  • 如果方法同时存在其他重载方法,编译器会优先选择非可变参数的方法。

7.递归

递归(Recursion)是一种常见的算法设计技巧,它是通过函数自身调用来解决问题的方法。在递归过程中,函数会不断调用自身,直到达到某个终止条件为止。递归通常可以让代码更加简洁而优雅,但同时也需要注意可能带来的性能问题和栈溢出等问题。

public class RecursionExample {public static void main(String[] args) {int result = factorial(5);System.out.println("Factorial of 5 is " + result);}public static int factorial(int n) {if (n == 0) {return 1;} else {return n * factorial(n - 1);}}
}

上述代码使用递归的方式计算阶乘。在 factorial 方法内部,我们首先判断传入的参数是否为 0,如果是,则返回 1。否则,我们将 n 乘以 (n-1) 的阶乘结果,实现递归调用。

Factorial of 5 is 120

递归虽然在某些情况下可以使代码更加简洁而优雅,但有时也可能会带来一些问题。递归调用需要占用栈空间,如果递归层数过多,可能会导致栈溢出。另外,递归的效率可能不如迭代法,因为在递归调用过程中需要不断地压栈和出栈,增加了额外的开销。
在这里插入图片描述
递归详细讲解

作业

写一个计算器要求实现加减乘除功能,并且能够循环接收新的数据

package com.determination;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;public class Day11604 {public static void main(String[] args) {System.out.println("请输入数字,输入'exit'结束:");Scanner scanner=new Scanner(System.in);// 创建一个动态大小的数组列表List<Integer> numbers = new ArrayList<>();while (scanner.hasNext()) {String input = scanner.next();// 判断是否输入 'exit',如果是则退出循环if (input.equals("exit")) {break;}try {// 将用户输入的字符串解析为整数,并添加到数组列表中int number = Integer.parseInt(input);numbers.add(number);} catch (NumberFormatException e) {System.out.println("无效的输入,请重新输入数字或 'exit' 来结束。");}}// 将数组列表转换为数组double[] array = new double[numbers.size()];for (int i = 0; i < numbers.size(); i++) {array[i] = numbers.get(i);}System.out.println("相加的结果为:"+add(array));System.out.println("相减的结果为:"+decrease(array));System.out.println("相乘的结果为:"+multiple(array));System.out.println("相除的结果为:"+divde(array));}public static double  add(double ... number){double sum=0;for(int i=0;i<number.length;i++){sum+=number[i];}return sum;}public static double decrease(double ... number){double res=number[0];
//        System.out.println(res);for(int i=1;i<number.length;i++){res-=number[i];}return res;}public static double multiple(double ... number){double res=number[0];for(int i=1;i<number.length;i++){res*=number[i];}return res;}public static double divde(double ... number){double res=number[0];for(int i=1;i<number.length;i++){res/=number[i];}return res;}
}

运行:

请输入数字,输入'exit'结束:
10 5 exit
相加的结果为:15.0
相减的结果为:5.0
相乘的结果为:50.0
相除的结果为:2.0

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

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

相关文章

layabox_2d游戏A*寻路实践

使用工具 Red Blob Games 效果 项目地址 LayaAStar2D: Laya2.0引擎2D游戏使用AStar实践。

深入理解 Flink(八)Flink Task 部署初始化和启动详解

JobMaster 部署 Task 核心入口&#xff1a; JobMaster.onStart();部署 Task 链条&#xff1a;JobMaster --> DefaultScheduler --> SchedulingStrategy --> ExecutionVertex --> Execution --> RPC请求 --> TaskExecutor TaskExecutor 处理 JobMaster 的 …

Few-shot Learning:知识点

目标&#xff1a; 让机器自己学会学习&#xff0c;学会理解和判断事物的异同&#xff08;如&#xff0c;区分两张图片内是相同的东西还是不同的东西&#xff0c;不是识别出是什么东西&#xff09; Pretraining 前景知识 C o s i n e S i m i l a r i t y Cosine \ Similarity…

❤ Uniapp使用二 ( 日常使用篇)

❤ Uniapp使用二 ( 日常使用篇) 一、表单 1、基础表单验证 form <form submit"formSubmit" reset"formReset"> <view class"uni-form-item uni-column"><view class"title">请选择类型{{selectvalue}}</view&…

Go语言中的HTTP请求发送

在Go语言中&#xff0c;发送HTTP请求是一种常见的网络操作。Go语言的net/http包提供了强大的API&#xff0c;使开发者能够轻松地构建HTTP请求并处理响应。 下面我们将详细介绍如何使用Go语言发送HTTP请求&#xff0c;包括设置请求参数、处理响应状态码和头部信息、发送JSON数据…

2024年,如何更好地守护智能网联汽车出海网络安全与隐私安全?

近年来全球各国陆续出台了很多网络安全与数据合规相关的法律法规&#xff0c;如欧盟的《通用数据保护准则GDPR》、美国的《加州消费者信息保护法CCPA》、新加坡的《隐私数据保护法PDPA》等。在国内全国人大发布了《网络安全法》、《数据安全法》、《个人信息保护法》法律&#…

poi解析word取参数方法${参数名}获取参数异常处理(2024-01-12)

poi 读取word模板&#xff0c;确保 ${参数名} 在一个XWPFRun XWPFDocument读取word模板&#xff0c;经常遇到 ${参数名} 没有被识别在一个XWPFRun中&#xff0c;导致参数解析异常如法实现参数替换。 这里只是介绍word模板参数解析问题&#xff0c;让word格式如何转换为可以正常…

【MATLAB随笔】遗传算法优化的BP神经网络(随笔,不是很详细)

文章目录 一、算法思想1.1 BP神经网络1.2 遗传算法1.3 遗传算法优化的BP神经网络 二、代码解读2.1 数据预处理2.2 GABP2.3 部分函数说明 一、算法思想 1.1 BP神经网络 BP神经网络&#xff08;Backpropagation Neural Network&#xff0c;反向传播神经网络&#xff09;是一种监…

解析HTTP响应的JSON数据

解析HTTP响应的JSON数据是许多Web开发任务中的常见需求。在Go语言中&#xff0c;可以使用标准库中的encoding/json包来轻松解析JSON数据。下面我将详细介绍如何解析HTTP响应的JSON数据。 首先&#xff0c;确保你已经发送了一个HTTP请求并获取到了响应。然后&#xff0c;你可以…

智能管理护航制造企业安全生产:信息化升级解决方案解析-亿发

安全生产信息化是通过充分利用信息技术&#xff0c;及时采集安全生产管理中的各种要素和数据&#xff0c;并进行统计分析&#xff0c;随后将分析结果及时反馈&#xff0c;以实现对安全生产管理的指导和帮助&#xff0c;旨在提高安全生产管理的效能。 在提升安全生产管理水平方…

达摩研究院Paraformer语音识别-中文-通用-16k

原文&#xff1a;https://github.com/alibaba-damo-academy/FunASR/blob/main/runtime/readme_cn.md FunASR软件包路线图 English Version&#xff08;docs&#xff09; FunASR是由阿里巴巴通义实验室语音团队开源的一款语音识别基础框架&#xff0c;集成了语音端点检测、语…

AI编程可视化Java项目拆解第二弹,AI辅助生成方法流程图

之前分享过一篇使用 AI 可视化 Java 项目的文章&#xff0c;同步在 AI 破局星球、知乎、掘金等地方都分享了。 原文在这里AI 编程&#xff1a;可视化 Java 项目 有很多人感兴趣&#xff0c;我打算写一个系列文章拆解这个项目&#xff0c;大家多多点赞支持~ 今天分享的是第二…

鸿蒙开发-UI-布局-层叠布局

鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 文章目录 前言 一、基本概念 二、对齐方式 三、Z序控制 四、使用场景 总结 前言 上文详细学习了线性布局&#xff0c;学习了线性容器内子元素在主轴以及交叉轴上的排列方式&#xff0c;子元素自适应相关的知识点&#xff0c;本文继…

旧路由重置新路由设置新路由设置教程|适用于自动获取IP模式

前言 如果你的光猫是直接拨号&#xff08;路由模式&#xff09;的&#xff0c;就可以按照本教程进行路由重置或者更换新路由器。 本文章适合电脑小白&#xff0c;请注意每一步哦&#xff01; 注意事项 开始之前需要确认光猫是桥接模式还是路由模式。如果光猫是路由模式&…

揭秘高生产力设计工具!15款原型设计软件推荐大公开!

1、Proto.io Proto.io是一个特殊的手机原型开发平台——可以构建和部署全交互式移动程序的原型&#xff0c;并可以模拟类似的成品。它可以在大多数浏览器中运行&#xff0c;并提供三个重要的界面&#xff1a;dashboard、编辑器和播放器。 dashboard可以用来管理项目。编辑器是…

第二证券:利空因素影响成本端 豆粕期现价偏弱运行

上个买卖周&#xff0c;受利空要素影响&#xff0c;内盘豆粕期价刷新2021年12月14日以来收盘价新低。到上周五收盘&#xff0c;豆粕主力合约MO2405最低下探至3075元/吨&#xff0c;收报3078元/吨&#xff0c;周内累计跌幅近4%。业内人士以为&#xff0c;美国农业部超预期调高20…

恐龙岛如何正确的选择服务器

恐龙岛服务器的价格因配置和运营模式等因素而异。一般来说&#xff0c;BGP线路成本更高但更稳定&#xff0c;适用于全球分布广泛的玩家&#xff0c;适合高品质画面游戏。在选择合适的配置时&#xff0c;需要考虑运营模式、游戏玩家地区分布和游戏特性等因素。具体价格需要参考具…

外汇天眼:做交易要不要预测行情? 趋势交易最重要的三个核心概念!

对一个&#xff08;量化&#xff09;技术分析派来说&#xff0c;趋势是非常重要的&#xff0c;大家一般的想法都是通过趋势跟踪来挣钱的&#xff0c;无趋势时会有小的损耗&#xff0c;趋势来时用仓位来弥补损失并盈利&#xff0c;用盈亏比而不用胜率。 就趋势交易最重要的三个…

3D scanner with DLPC3478

https://www.bilibili.com/video/BV1vJ411J7ih?p3&vd_source109fb20ee1f39e5212cd7a443a0286c5 因数&#xff1a; 分别率波长pattern速度 DMD 与 DLPC匹配 3D scanner是结构光的概念走的 Internal pattern, 是DLPC内部提供图像给DMD External Pattern, 外部FPGA /MCU…

Spring基于AOP(面向切面编程)开发

概述 AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;也是Spring框架中的一个重要内容&…