简单来说,Java当中的方法,类似于C语言当中函数。比如主方法main方法,在C语言当中,就是main函数,所有的程序都是由main方法开始,由main方法结束。下面,对Java当中的方法进行一个简单的回顾。

一、方法的概念和使用

1、什么是方法

方法就是一个代码块(片段),类似于C语言当中的函数。我们知道,在C语言当中,函数的存在使得代码模块化,大大提高了代码的效率。在Java中,方法也有着同样的作用:

(1)使代码能够重复使用。

(2)使代码模块化。

(3)直接调用现有的方法,比如Java封装好的方法,避免重复造轮子。

2、方法的定义

和C语言函数类似,方法的格式如下:

// 方法定义

修饰符 返回值类型 方法名称([参数类型 形参 ...]) {

方法体代码;

[return 返回值];

}

这里要说明的是修饰符。由于Java是面向对象的语言,在写代码的时候,方法的实现者希望方法的调用者不能修改他写的方法,就要通过限定修饰符private来进行封装,这就是是一种修饰符。 类似的还有public等等。

现在,我们写一个方法,来实现两个数的加法:

public static int add(int x, int y) {return x + y;
}public static void main(String[] args) {int a = 10;int b = 10;System.out.println(add(a, b));
}

这里的修饰符是public和static,是public权限,说明这个方法可以被任意的方法来调用。而且可以被方法的调用者来修改。当然可以不加。static说明这个方法是静态的方法,因为main方法是静态的,要调用的方法也只能是静态的:

具体的原因要到类和对象来说明。这里建议加上public和static。

注意事项:

(1)方法的返回值类型:如果有,返回值类型要和返回的实体类型一致,否者写成void。

(2)方法的名称:应当使用小驼峰命名。

(3)方法的参数列表:如果没有,什么都不写,否者需要指定参数类型,多个参数使用“,”来隔开。

(4)方法体:要实现功能的代码块。

(5)方法要写在类的里面。上面的add方法是写在一个public主类里面的。

(6)方法不存在声明,也不能嵌套定义。

3、方法的调用

在main函数中调用方法,将参数传进去,然后,内存就会去寻找方法的地址,找到后,执行被调用方法的方法体,被调用方法结束后,返回结果,回到主调方法继续执行。一个方法,可以被多次调用。在定义方法的时候,是不会执行方法的代码,只有在调用的时候才执行。

说到这里,就要说明实参和形参。

形参是实参的一份临时拷贝。形参和实参是两个不同的实体,改变形参对实参没有影响。比如:

public static void swap(int x, int y) {int tmp = x;x = y;y = tmp;System.out.println(x + " " +  y);
}public static void main(String[] args) {int a = 10;int b = 20;swap(a, b);System.out.println(a + " " +  b);}

结果是显然的。

实参a和b是main方法中的两个变量,其空间在main方法的栈(一块特殊的内存空间,Java是拿不到这块内存的,C语言只需要&就可以了)中,而形参x和y是swap方法中的两个变量,x和y的空间在swap方法运行时的栈中,因此:实参a和b与形参x和y是两个没有任何关联性的变量,在swap方法调用时,只是将实参a和b中的值拷贝了一份传递给了形参x和y,因此对形参x和y操作不会对实参a和b产生任何影响。

在C语言当中,想要改变实参的值,就要用到指针,而Java没有指针的概念。要进行交换,可以使用数组,类和对象来实现。也就是说,在Java中,所有的调用都是传值调用,不存在传址调用,地址也是一个值。

要实现的话,使用数组来实现:

二、方法的重载

1、为什么需要方法的重载

比如实现两个数的相加的方法。在参数列表里面写了两个int,我们传的时候,只能传int的参数。现在想要实现double的相加,那就在写一个新的方法,提供新的方法名,但是取名字本来就是很让人头疼。而方法的重载可以让我们旧瓶装新酒。

 2、方法重载的概念

在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。比如官方的几个方法重载,以Arrays.copyOf(数组的拷贝)举例:

在这里,对copyOf方法进行了重载,以至于可以拷贝整型的,字符型的等等。

3、方法重载的要点

(1)方法名一定要相同

(2)参数列表要不同,比如参数列表的参数顺序,参数个数,参数类型。参数名不影响。

(3)返回值不做要求

编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法。那么上面的方法名称都一样,为什么重载后就不报错呢,这涉及到方法的签名,了解即可。

3、方法的签名

方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

要了解方法的签名,就要用到Java汇编工具。汇编后,得到如下信息:

add:(DD)D,括号两个D说明double,外面的D说明是返回类型是double,前面的test等是方法的路径。

三、方法的递归

Java中方法的递归和C语言当中函数的递归是一样的,都是把一个大的问题转化成小的问题。这里参考本人的一篇实例。

使用递归实现n^k C语言_Naion的博客-CSDN博客https://blog.csdn.net/Naion/article/details/120406988?spm=1001.2014.3001.5501递归相对于循环,优点在于:代码少、逻辑好,但是理解比较难,浪费的空间多。有些题,天生适合递归,比如二叉树问题。递归需要多多的练习。

Java 方法的使用相关推荐

  1. java unlimited_具有无限参数的Java方法(Java method with unlimited arguments)

    具有无限参数的Java方法(Java method with unlimited arguments) Spring框架使用方法,您可以根据需要传递尽可能多的参数. 我想写一个函数,也可以采取无限量的 ...

  2. 五分钟让你了解 Java方法(或者叫函数)

    Java方法(函数)的形式如下: 访问权限 [修饰符] 返回值类型 方法名([参数列表]){方法体 } 访问权限:控制方法(函数)能否在其他"类"中使用有public(可以在其他类 ...

  3. java方法区内存泄露_深入理解java虚拟机-第二章:java内存区域与内存泄露异常...

    2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...

  4. 一个Java方法能有多少个参数类型?这个好奇coder做了个实验

    在 JVM 中,一个 Java 方法,最多能定义多少参数呢?这是一个很无聊的问题,即使能定义一万个,十万个,谁又会真的去这么做呢.但是作为一个 coder,最重要的不就是好奇心吗,没有好奇心,和一条咸 ...

  5. 在java中方法重载的要求,Java方法的重载

    Java方法的重载 方法重载:在类中方法名称相同,但是形式参数不同 public class Demo15 { public static void main(String[] args) { int ...

  6. JNI中C调用Java方法

     我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT voi ...

  7. java方法重载编程_学java教程之普通方法重载

    学编程吧学java教程之普通方法重载发布了,欢迎通过xuebiancheng8.com来访问 先来看什么是普通方法重载呢,先来看一个例子 public class Person{ String use ...

  8. variable java_在XSLT中使用Variable Argument调用Java方法

    我有一个带有变量参数的 Java方法,我需要从XSLT(1.0)调用它. 但它不起作用,它一直失败,出现以下错误: javax.xml.transform.TransformerConfigurati ...

  9. java方法的参数_Java方法参数

    Java方法参数 在程序设计语言中如何将参数传给方法(或函数): 按值调用:方法接受的是调用者提供的值 按引用调用:方法接受的是调用者提供的地址 Java程序设计语言总是采用按值调用(方法得到的是所有 ...

  10. java方法定义 与调用_Java方法的定义及调用

    Java方法的定义及调用 通过以上内容的学习,可以看出方法是一段可以完成某个特定功能的并且可以被重复利用的代码片段.接下来我们来学习一下方法应该怎么定义以及怎么调用. 定义/声明方法的语法格式如下所示 ...

最新文章

  1. 【VB】学生信息管理系统1——系统设计怎样开始?
  2. css选择器权重排序_CSS选择器的权重与优先规则
  3. 无法启动MYSQL服务”1067 进程意外终止”解决的方法
  4. c++局部对象是什么_小白学Web前端难点是什么 JS进阶知识点有哪些
  5. 蒙特卡洛模拟_蒙特卡洛模拟法求期权价值
  6. 在VHD文件上安装Windows 7或Windows 2008 R2
  7. idea java 非法字符_解决IDEA显示非法字符 \ufeff 的问题
  8. Ubuntu 14.04 设置静态IP
  9. 【android高级编程】简答题汇总
  10. 2010-2019年中国城市统计年鉴分享
  11. 关于如何关闭Windows错误报告
  12. Word 内容被锁定的两种解决方法
  13. Pytorch - Tips
  14. 手机怎样设置垃圾短信拦截?
  15. lerna 使用详解
  16. CityMaker学习教程13 osg模型的移动
  17. java指针乱跳_鼠标卡顿,指针乱跳,鼠标失灵的解决办法。 涨知识了
  18. 高中数学圆锥曲线解题方法归纳(暑假复习资料)
  19. 基于蓝牙的无线数据采集系统
  20. 从硬盘这些年的发展说开去

热门文章

  1. Canvas-七夕爱心
  2. PHPWORD 实现单元格内同一行文字设置不同的样式比如不同颜色不同大小粗细是否斜体等等
  3. 腾讯校招白菜总包价40万!
  4. Platform Builder实践之两个要点(转)
  5. 概率统计Python计算:离散型自定义分布数学期望的计算(一)
  6. NFT乱象蚂蚁、微信惩处违规账号超百个
  7. Could not receive a message from the daemon
  8. 那些正在消失的 Flash 网站
  9. 多线程并行和并发区别的简单理解
  10. Web加速器:Loder v1.0 发布 ?