【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法

简介: 【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法

image.png

💜写在前边💜

前言

咱们在C语言里肯定都学过函数吧,相信大家对函数的理解已经很深刻了,因为函数在C里用的会很多,特别是做项目的时候,会分模块来写,Java里同样为大家提供了“函数”,只不过叫法不一样,Java里叫【方法】,接下来请往下看


【☕Java】C语言里叫【函数】,Java里叫【方法】

💜写在前边💜

🌟方法的基本用法

🌙什么是方法(method)

🌙方法定义语法

🌙方法调用的执行过程

🌙实参和形参的关系(敲重点)

🌙无返回值的方法

🌟方法的重载

🌙重载要解决的问题·

🌙使用重载

🌙重载的规则

🌟方法递归

🌙递归的概念

🌙递归执行过程分析

🌙递归练习

🌙递归总结

🌟方法的基本用法

🌙什么是方法(method)

方法就是一个代码片段. 类似于 C 语言中的 “函数”.


方法存在的意义:

1. 是能够模块化的组织代码(当代码规模比较复杂的时候).

2. 做到代码被重复使用, 一份代码可以在多个位置使用.

3. 让代码更好理解更简单.

4. 直接调用现有方法开发, 不必重复造轮子.


🌙方法定义语法

image.png

image.png

注意事项

1. public 和 static 两个关键字在此处具有特定含义, 暂时不讨论, 后面会详细介绍.

2. 方法定义时, 参数可以没有. 每个参数要指定类型

3. 方法定义时, 返回值也可以没有, 如果没有返回值, 则返回值类型应写成 void(类似C语言)

4. 方法定义时的参数称为 “形参”, 方法调用时的参数称为 “实参”.

5. 方法的定义必须在类之中, 代码书写在调用位置的上方或者下方均可.

6. Java 中 没有 “函数声明” 这样的概念(个人觉得是很爽的,在C里边经常被函数声明的问题恶心到).


🌙方法调用的执行过程

基本规则


定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.

当方法被调用的时候, 会将实参赋值给形参.

参数传递完毕后, 就会执行到方法体代码.

当方法执行完毕之后(遇到 return 语句), 就执行完毕, 回到方法调用位置继续往下执行.

一个方法可以被多次调用.

image.png

image.png

使用方法, 避免使用二重循环, 让代码更简单清晰

🌙实参和形参的关系(敲重点)

image.png

image.png

🌙无返回值的方法

方法的返回值是可选的. 有些时候可以没有的.


image.png

🌟方法的重载

有些时候我们需要用一个函数同时兼容多种参数的情况, 我们就可以使用到方法重载.

🌙重载要解决的问题·

image.png

image.png

🌙使用重载

image.png

方法的名字都叫 add. 但是有的 add 是计算 int 相加, 有的是 double 相加; 有的计算两个数字相加, 有的是计算三个数字相加.

同一个方法名字, 提供不同版本的实现, 称为 方法重载


🌙重载的规则

针对同一个类或者继承关系:


方法名相同

方法的参数不同(参数个数或者参数类型)

方法的返回值类型不影响重载.


image.png

当两个方法的名字相同, 参数也相同,

但是返回值不同的时候, 不构成重载.


🌟方法递归

若一个对象部分的包含自己或用它自己给自己定义,那么我们说这个对象是递归的;若一个过程直接或间接的调用自己,那么这个过程是递归的。递归的思想是把问题分解为规模更小具有与原问题相同解法的子问题,因此可以让我们思考的方式更加简单,程序也更加简练。不过就递归函数而言递归增加了压栈开销,因此【空间复杂度比较高】。


🌙递归的概念

递归相当于数学上的 “数学归纳法”, 有一个起始条件, 然后有一个递推公式.

递归条件:

(1)减小问题规模,并使子问题与原问题有相同解法。

(2)设置出口,如果没有出口那么程序会一直递归下去。


例如, 我们求 N!

起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束条件.

递归公式: 求 N! , 直接不好求, 可以把问题转换成 N! => N * (N-1)!

image.png

🌙递归执行过程分析

递归的程序的执行过程不太容易理解, 要想理解清楚递归, 必须先理解清楚 “方法的执行过程”, 尤其是 “方法执行结束之后, 回到调用位置继续往下执行”.

image.png

执行过程图解

image.png

🌙递归练习

image.png

image.png


image.png

代码示例4敲重点!!敲重点!!敲重点!!

求斐波那契数列的第n项斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,像这样的:0、1、1、2、3、5、8、13、21、34、55…




image.png

image.png

image.png

🌙递归总结

递归是一种重要的编程解决问题的方式.

有些问题天然就是使用递归方式定义的(例如斐波那契数列, 二叉树等), 此时使用递归来解就很容易.

有些问题使用递归和使用非递归(循环)都可以解决. 那么此时更推荐使用循环, 相比于递归, 非递归程序更加高效.







相关文章
|
10天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
34 17
|
3天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
8 2
|
8天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
|
11天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
12 3
|
11天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
11 2
|
11天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
11 1
|
11天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
23 1
|
11天前
|
Java
在Java多线程编程中,`wait()`和`notify()`方法的相遇如同一场奇妙的邂逅
在Java多线程编程中,`wait()`和`notify()`方法的相遇如同一场奇妙的邂逅。它们用于线程间通信,使线程能够协作完成任务。通过这些方法,生产者和消费者线程可以高效地管理共享资源,确保程序的有序运行。正确使用这些方法需要遵循同步规则,避免虚假唤醒等问题。示例代码展示了如何在生产者-消费者模型中使用`wait()`和`notify()`。
17 1
|
11天前
|
安全 Java 开发者
Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用
本文深入解析了Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用。通过示例代码展示了如何正确使用这些方法,并分享了最佳实践,帮助开发者避免常见陷阱,提高多线程程序的稳定性和效率。
22 1
|
5天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。