文章目录

  • 一、什么是方法
  • 二、方法定义
  • 三、方法调用
  • 四、方法重载
    • 1、什么是方法重载?
    • 2、为什么会出现方法重载?
    • 3、被称为方法重载的必要条件是什么?
    • 4、编译器是如何识别出相同名字的方法的呢?
  • 五、递归
    • 1、什么叫递归?
    • 2、为什么要使用递归?
    • 3、递归作为一个过程,什么时候停止?
    • 4、详细理解递归这个过程:
    • 5、使用递归的练习题
      • 1、求n的阶乘
      • 2、从左到右打印一个数的每一位
      • 3、求1-n之和
      • 4、逆置数组中的元素
      • 5、分别打印一个数的二进制位的奇数位和偶数位

一、什么是方法

方法和C语言的函数的功能是一样的,但在具体使用上,还是有区别的,区别在定义里面说。
对于方法,在我的脑海中我想象出了生活中的情景去理解它,我将方法比作了思路去进行了理解。:
在我高中时期,当我们学生在做完一套题时,学生有不会的题,就去问自己班的老师去,其中有一道题,老师被问了好多遍,老师就想这个题这么多学生问,可能还有的同学不会i,没有来问,我就去课上讲一下这道题的思路,让不懂的同学都听一下,此时老师把这道题的思路公布出来,讲给所有的同学听,这样就少讲了好多遍,不用单个单个的再给学生重复讲了,提高了效率。
在编程的世界中,也有这样的事情发生,如果有一段代码需要被频繁的使用,那么就把这一段代码写成一个方法,这个方法就是我上面说的老师讲的这道题的思路,思路就是一个方法,一个可以解决一个问题的方法,在需要这一段代码时,只需要调用这个方法就可以,不用再重复编写代码。
对于方法的理解,同志们应该多做一些练习,才能更深刻的理解,方法被创造出来的意义。

二、方法定义

方法是由哪几部分组成的呢?就像一道题的思路,思路由开头,中间和结尾组成。
方法由修饰符+返回值类型+方法名称+参数类型+方法体代码+return 返回值组成,如果返回值类型是void,就不需要return 返回值。

定义方法时,有以下注意事项:
1:对于返回值类型,如果方法不需要返回一个值,返回值类型就是void,void表示的是无类型,中间的字母o,可以理解为空的意思,空就代表没有。具体一点可以理解为:返回值类型就是数据类型,可以向内存申请空间,如果方法不需要返回一个值,我为什么还要申请空间呢?直接给void,很合理,如果方法要返回一个值,就给定合适的数据类型用来接收就可以。我个人理解的这里方法返回的值和给定的数据类型和C语言中的地址和指针类型的变量是相似的,在C语言里面,我是这样理解地址和指针类型的变量的,地址我想象成了一个魂,孤魂野鬼的魂,它必须要找到一个躯壳,来存放自己的魂,躯壳要和自己的魂相对应,如果是一个人类的魂,要找到人类的躯壳,如果是狗狗的魂,要找到狗狗的躯壳里面,所以地址要存放到指针类型的,变量里面时,要找对数据类型,如果是整型的地址,要放到整型的指针变量里面,如果是浮点型的地址,要放到浮点型的变量里面,所以方法返回的值,应该方法应该使用合适的数据类型的变量接收。
2: 方法的名字要使用小驼峰命名:例如isPrime,第二个单词的首字母要大写,大驼峰的意思是,每一个单词的首字母大写,例如:TestDemo
3: 如果参数列表中没有参数,就什么都不写,如果有参数,参数与参数之间使用逗号隔开。
4: 方法必须写在类当中,写在类外面会出错,这里将类比作教室,方法比作学生,如果学生在上课期间跑出教室,那学生就犯错了。
5: 方法不能嵌套定义,意思是不能在一个方法里面,定义一个新的方法,如果要定义一个方法,必须要在方法外定义,方法与方法之间是平等的,将方法比作学生,学生不可能生出学生,这是没有逻辑的。

三、方法调用

方法调用就是去使用方法,如何去使用方法呢?,方法名代表方法,就像我们的名字就可以代表我们个人,写下方法名再将需要传给方法的值,传给方法,等待编译到这行代码时,就会使用这个方法,调用这个方法。
传给方法的值是方法的实参,用来接收传进来的值的是形参,在这里可以将方法比喻成一个加工厂,原材料就是实参,要将原材料送进厂子里去,就要需要地方来存放这些原材料,这个地方就是形参,最后加工厂加工出的产品可以交出来,也可以不交出来,不交出来,就无法使用这个产品,只有交出来,才能使用。

对实参和形参的认识:
对于基本类型来说:
形参只是实参的一份临时拷贝,对形参的修改不能改变实参的值。
实参和形参保存在内存空间的位置不一样。
我将实参和形参这两者的关系,想象成了我生活中的一个情景,我将实参比作在高中时期,一个原装的卷子,这个卷子是老师手写的,要去复印好多份,此时形参是复印出的卷子,如果此时有一个学生将复印的卷子给扔掉了,那么那张手写的卷子会不会受到影响,答案是不会的。
对于引用类型: 学到数组再讲!

四、方法重载

1、什么是方法重载?

方法重载的意思是方法名同时被多个方法所使用,也就是一个人的名字被很多人使用,世界上不可能只有一个人叫马云。

2、为什么会出现方法重载?

这里可以想象一个公厕可以由很多人使用,如果一个公测只能由一个人使用,那得需要建多少公厕,又费时间又费金钱。
在我们编写代码时,是一个道理,为了提高我们的效率,会定义很多方法,如果一个方法对应一个方法名,那需要记很多方法名,这很费劲,所以就规定一个方法名可以由很多方法共用。

3、被称为方法重载的必要条件是什么?

  1. 方法名必须相同
  2. 这里可以想象世界上不可能有两个一摸一样的人,即使他们的名字相同,但总会有差异,就像马云和小马云,虽然他们的名字一样,但是他们的身高,智力等等,这些一样吗?肯定是不一样的,对于方法的参数列表也是一样的,方法的参数列表必须不相同,参数列表不相同包括为:参数个数不同+参数次序不同+参数的类型不同,只要有一个不同,就是参数列表不同,也就是马云和小马云他俩身高不一样,这一点就说明了,他俩是不相同的,即使名字是相同的。
  3. 与返回值的类型是否相同无关
    一二点是成为方法重载必须遵循的条件,缺一不可,就像是方法重载是一个学习好的人,你要成为学习好的人,你必须各科成绩都好,才会成为学习好的人,只要有一科不好,就不是学习好的人,你必须满足前面两点,才会称为方法重载,第三点就像是高中的体育课,这门的成绩不会决定你是学习好的学生还是学习不好的学生,即使只有返回值的类型不同,参数列表都相同,仍然不能称为重载。

4、编译器是如何识别出相同名字的方法的呢?

成功在编译器上编写了两个名字相同的方法,编译器是如何识别出这两个不一样的方法的呢?是使用方法签名,进行标识出不同的方法来的。
方法签名是由:方法全路径名+参数列表+返回值类型,这三者构成。

五、递归

1、什么叫递归?

一个方法在执行过程中,或者说在完成任务的时候,调用自己的过程,叫做递归。
对于递归这个过程,我想象出了一个生活中的例子:
我正在家中写作业,然后妈妈叫我去买一瓶酱油,在去的路上,我在路下玩了一会,玩完之后,我去买酱油,买到之后回家,再继续写完作业。
写作业->买酱油->玩,这一个过程叫做递,
玩完->买完酱油->写完作业,这一个过程叫做归。
两个过程合并到一起,叫做递归。

2、为什么要使用递归?

对于为什么使用递归,我又想到了生活中的例子:
就比方说吃一大碗米饭,不可能一口吃完,那就要分好几口才能吃完,直到吃完为止。
递归就是这样的一个过程,一个解决问题的一个过程,吃一碗米饭,可以理解为一个问题,要解决的问题,原问题太复杂,不能一下子解出来,那就把这个原问题拆分,拆成一个与原问题相似,但规模较小的问题,如果还不好解开,就一直拆,直到能够很容易解开为止。

3、递归作为一个过程,什么时候停止?

递归,顾名思义它是一个过程,递出去之后,它要归。
就像你写作业时,妈妈让你买酱油,你在买酱油的路上,玩了一会,玩到天黑了,就该停止了,不能在去干别的了,你就要去买酱油,买完酱油就该回家写作业了。
这个条件就是:天黑,到天黑之后,就要往回走了,不能在往外边走了。

4、详细理解递归这个过程:

5、使用递归的练习题

1、求n的阶乘

现在的问题是:使用方法求n的阶乘,一下子不好求,进行拆分,就像吃米饭一样,可以先求出n-1的阶乘,再乘以 n,再拆,求n-2的阶乘,再乘以n-1,最后拆成只剩下求1的阶乘,就可以完成这个任务了。

 public static void main(String[] args) {System.out.println("请输入:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();int ret = 0;ret = jieCheng(n);System.out.println(ret);}public static int jieCheng(int n) {if(n == 1) {return n;} else {jieCheng(n - 1);return n * jieCheng(n - 1);}}

2、从左到右打印一个数的每一位

现在的问题是:打印每一位,使用方法去解决这个问题,但一下子解不出来,把问题拆分,拆成先不用打印最后一位,打印前面的,再拆,直到拆到打印一位,这个问题可以轻松完成,再继续完成后面的任务。

 public static void main(String[] args) {System.out.println("请输入:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();print(n);}public static void print(int n) {if(n < 9) {System.out.print(n + " ");} else {print(n / 10);System.out.print(n % 10 + " ");}}

3、求1-n之和

 public static void main(String[] args) {System.out.println("请输入:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();int ret = 0;ret = sum(n);System.out.println(ret);}public static int sum(int n) {if(n == 1) {return n;} else {sum(n - 1);return n + sum(n - 1);}}

4、逆置数组中的元素

 public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7,8,9};int left = 0;int right = arr.length - 1;rew(arr,left,right);System.out.println(Arrays.toString(arr));}public static void rew(int[] arr,int left,int right) {if(left >= right) {;} else {rew(arr,left+1,right-1);int tmp = 0;tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;}}

5、分别打印一个数的二进制位的奇数位和偶数位

 public static void main(String[] args) {System.out.println("请输入:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();int k = 1;System.out.println("奇数位是:");odd(n,k);System.out.println();System.out.println("偶数位是:");even(n,k);}public static void odd(int n,int k) {if(k == 32 && k % 2 == 1) {System.out.print((n&1)+" ");} else if(k < 32){odd(n >>> 1,k+1) ;if(k % 2 == 1) {System.out.print((n & 1) + " ");}}}public static void even(int n,int k) {if(k == 32 && k % 2 == 0) {System.out.print((n & 1) + " ");} else if(k < 32){even(n >>> 1,k+1) ;if(k % 2 == 0) {System.out.print((n & 1) + " ");}}}

Java-方法的详解( 看完之后,我不允许还有人不懂!)相关推荐

  1. 【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?...

    简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以 ...

  2. 查看计算机配置讲解,教您如何看显示器参数!电脑显示器常见参数详解,看完秒懂!...

    由于显示器可选的范围比较广,同一个尺寸大小的显示器,不同品牌不同型号不同参数会有上百种可供选择,其实我们只需明确了预算与用途,才可以正确选择合适自己的显示器.那么如何看显示器参数?下面装机之家分享一下 ...

  3. 计算机网络参数怎么看,电脑显示器参数详解 看完秒懂! 显示器参数怎么看?...

    显示器参数怎么看?无论是显示器的宣传.购买页面,还是专业媒体的显示器评测中,我们都会看到一些用来描述显示器性能的参数.小编觉着,显示器就像是电脑的一张面孔,显示着它的各种表情,也负责与用户的沟通,而显 ...

  4. 还不了解NIO ?Java NIO 核心组件详解看一下

    背景知识 同步.异步.阻塞.非阻塞 首先,这几个概念非常容易搞混淆,但NIO中又有涉及,所以总结一下[1]. 同步:API调用返回时调用者就知道操作的结果如何了(实际读取/写入了多少字节). 异步:相 ...

  5. keil5的安装详解(看完必会,不会你打我)

    如何安装KEIL5 本内容所涉及的软件只供教学使用,不得用于商业用途.个人或公司因商业用途导致的法律责任,后果自负. 温馨提示 1.安装路径不能带中文,必须是英文路径 2.安装目录不能跟51的KEIL ...

  6. Java NIO全面详解(看这篇就够了)

    很多技术框架都使用NIO技术,学习和掌握Java NIO技术对于高性能.高并发网络的应用是非常关键的 NIO简介 NIO 中的 N 可以理解为 Non-blocking,不单纯是 New,是解决高并发 ...

  7. WebApi路由机制详解——看完不会用你打我

    随着前后端分离的大热,WebApi在项目中的作用也是越来越重要,由于公司的原因我之前一直没有机会参与前后端分离的项目,但WebApi还是要学的呀,因为这东西确实很有用,可单独部署.与前端和App交互都 ...

  8. java方法重写[详解]

    1. 什么是重写? 重写(overwrite,override),指子类中出现了与父类一模一样的方法,仅对非static方法有效 子类继承父类后,可以对父类中同名同参的方法进行覆盖操作 2.应用: 当 ...

  9. python虚拟环境管理工具_Python虚拟环境和包管理工具Pipenv的使用详解--看完这一篇就够了...

    前言 Python虚拟环境是一个虚拟化,从电脑独立开辟出来的环境.在这个虚拟环境中,我们可以pip安装各个项目不同的依赖包,从全局中隔离出来,利于管理. 传统的Python虚拟环境有virtualen ...

最新文章

  1. java getservername_Tomcat:getHeader(“主机”)与getServerName()
  2. 机器学习XGBoost——后面的明天更
  3. java 循环读取文件_您如何用Java连续读取文件?
  4. hibernate教程--常用配置和核心API详解
  5. ribbon负载均衡@LoadBalanced
  6. java treemap 内存_Java中Map、HashMap、LinkedHashMap、TreeMap的区别
  7. android layout background,Android LinearLayout Gradient Background
  8. uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案
  9. 阿里云智能视频 AI 重装来袭
  10. 获取date等于某一天的第一个id sql_leetcode(sql)之经典困难题合集
  11. NameError: name 'random' is not defined
  12. Unofficial Windows Binaries for Python Extensi...
  13. 软件工程复习笔记 用例图
  14. EMP电磁脉冲射频发射器制作教程
  15. pancakeswap 开盘抢跑机器人 (附代码)
  16. 产品经理需要的文档汇总
  17. 07 - Nor Flash
  18. 3D游戏建模:胜似美杜莎的超细节刻画—《大海的精灵》| 模型欣赏
  19. 汉谟塔C语言,巴别塔的故事
  20. 下列选项中、不是python语言保留字的是_以下选项中,不是Python语言保留字的是:()...

热门文章

  1. 全球及中国吊环行业研究及十四五规划分析报告
  2. python到底有多牛!用Python开源机器人和5美元,我在Instagram上搞到了2500个真粉儿
  3. Ray Marching
  4. 全志 H6 芯片分析
  5. javascript编写的网页小游戏,很给力
  6. google海底光缆图_SubmarineCableMap:世界海底光缆分布图
  7. mysql 1126报错 User 'root' has exceeded the 'max_questions' resource (current value: 10000)
  8. 中国的三种特色团购创新模式
  9. UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tenso
  10. 高并发编程学习(2)——线程通信详解