Java重修第二天—学习”方法“

2024-01-05 03:28

本文主要是介绍Java重修第二天—学习”方法“,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过学习本篇文章可以掌握如下知识

1、方法的定义

2、方法在计算机中的执行流程。

3、方法使用时常见问题

4、Java中方法的参数传递机制

5、方法重载


1 方法是什么

方法是一种语法结构,它可以把一段代码实现的某种功能封装起来,以便重复利用。

方法的完整格式定义如下:

修饰符 返回值 方法名(形参列表) { 方法体; return 返回值; }

需求:加入现在有很多成需要需要进行两个整数的求和操作。代码显示:

// 掌握定义方法的完整定义
public class Method_02 {public static void main(String[] args) {int sum = sum(3, 4);System.out.println(sum);}
// !!!注意与上文中方法的完整格式做对比。public static  int sum(int a, int b) {return a+b;}
}

为什么举如此简单的例子,现在在回想一遍我们的场景,其他程序员就可以复用这个求和操作了。重在重复利用。

到现在应该对方法有所了解了吧(*^_^*)。Java中的方法,在CPP或者C中称为函数,其实是一个东西罢了。接下来我们将继续深入学习"方法"。

2 方法的其他形式

方法定义时:需要按照方法解决实际业务需求,需要考虑:

1、方法名是否规范易懂

2、方法是否需要接收参数

3、方法是否需要返回数据

public class Method_02 {public static void main(String[] args) {printHelloWorld();}// 1、无参数无返回值 --- 打印三行helloWorldpublic static void printHelloWorld() {for (int i = 0; i < 3; i++) {System.out.println("helloWorld");}}
}// 2、有参数无返回值// 3、无参数有返回值// 4、有参数有返回值// 由于比较简单,在此就举一个例子,其他的举一反三即可。

3 方法使用时常见问题

  • 方法在类中的位置放在前或者后时无所谓的,但一个方法不能定义在另一个方法里面

  • 方法声明void无返回值时,方法内部不能使用return;

  • return语句下面不能编写代码

  • 由于上述问题比较简单就不再据例子了,如果需要举例在评论区评论即可。

4 案例

求1-n的和

可以将其想象成一个梯形,(上底+下底)*高/2;

这里一般很考验编程和数学能力,只能慢慢积累了。或者可以使用for函数累加也可以的。

注意:要声明好,函数名,入参和返回值。

public class Method_02 {public static void main(String[] args) {int res = sum1_N(100);System.out.println(res);// 5050}public static int sum1_N(int n) {return (1+n)*(n)/2;}
}

判断一个数是否是偶数还是奇数

public class Method_02 {public static void main(String[] args) {boolean res = isOdd(100);System.out.println(res);}public static  boolean isOdd(int n) {return n % 2 != 0;}
}

以上举得例子都比较简单,重点是帮助了解方法的定义和使用,不在于考验编程能力。

5 方法在计算机中执行原理

首先要牢记一点:方法被调用的时候,是进入到栈内存中运行的。

例子如下:一个很简单的求和方法在main方法中被调用。

添加图片注释,不超过 140 字(可选)

【第一步】方法区加载MethodDemo的class文件

添加图片注释,不超过 140 字(可选)

【第二步】将main方法加入到栈内存然后执行main方法中的内容,这里先执行的是第一句代码

添加图片注释,不超过 140 字(可选)

【第三步】发现要调用sum方法,然后栈内存加载sum方法,随后就执行sum方法中的内容

添加图片注释,不超过 140 字(可选)

【第四步】sum中的方法执行完毕之后,sum方法从栈中弹出,将返回值赋值给re变量。

添加图片注释,不超过 140 字(可选)

【第五步】输出re变量值:30,至此全部执行完毕,虽然这个例子很简单,但是麻雀虽小五脏俱全,一个简单的方法调用内部却蕴含了全部的道理,应用到复杂的方法调用,例如递归,完全够用。

6 Java中方法的参数传递机制

public class Method_02 {public static void main(String[] args) {int a = 10;change(a);System.out.println(a);   // 10}private static void change(int a) {System.out.println("BeforeChange:" + a);  // 10a = 20;System.out.println(a);   // 20}
}
6.1 基本类型的参数传递

所谓的值传递:指的是在传输实参给方法的形参时,传输的时实参变量中存储值的副本。

注意这里用的措辞时副本,即修改副本不会影响原参数的数值。

可以按照之前的分析

在change方法执行完毕后,将要从栈内存中弹出,然后再执行 System.out.println(a); 时 返回为10。

6.2 引用类型的参数传递
public class Method_02 {public static void main(String[] args) {int[] arrs = {10,20,30};change(arrs);System.out.println(arrs[1]); // 60}private static void change(int[] a) {System.out.println("BeforeChange:" + a[1]); // 20a[1] = 60;System.out.println(a[1]);  // 60}
}

在执行修改前,堆内存中的值为10,20,30;执行arrs[1] = 222后变为:

因此输入arrs[1] 时候就为222了,注意引用类型和直接类型的区别,可以减少你以后写代码的错误。

7 方法重载

一个类中,出现多个方法的名称相同,但是他们的形参列表时不同的,那么这些方法称为方法重载。

要点:

1、方法名称相同,形参列表不同。

2、形参列表不同指的是,形参个数、类型、顺序不同,不关心形参名称。

public class Method_02 {public static void main(String[] args) {}public static void test(){}public static void test(int a) {}void test(double a) {}void test(double a ,int b){}void test(int a ,double b){}}

如果这篇文章对你有帮助,点个赞吧,有疑问的地方直接评论就可以了。

账号: 兜兜转转 - 知乎 (zhihu.com)

擅长领域:IRS通信仿真、Java和算法等,欢迎讨论哦

这篇关于Java重修第二天—学习”方法“的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571518

相关文章

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3