一、方法的调用以及方法参数传递

1、方法的定义:

​ 访问修饰符 返回值类型 方法名 ([参数列表]){

​ 方法体

}

如果方法体中需要一些未知的数据作为执行条件,那么这些数据可以作为参数。

如果方法需要返回数据,在定义有返回值的方法时需要明确返回值类型

方法调用的两种方式:

1、对象名.方法名(参数)

2、直接写方法名调用,但必须是static修饰的

//获取这个字符串的第一个字符
public static char method1(String str){
return str.charAt(0);//获取字符串的第一个字符
}
//方式一:调用方法
对象名.method1();
//方式二:调用静态方法(static修饰的)
String s="abc";
char c=method1(s)//s将赋值给方法的形参str,那么方法执行时str有值
//c就是方法调用后的返回值

1、方法的参数是基本数据类型,它传递的是值

//计算一个数的平方
public static int pow(int a){
a=a+2;//6
return a*a;//6*6=36
}
public static void main(String[] args){
int num=4;
int sum=pow(num);//num是实参 num赋值给a
System,out,println(num);//4
System.out.println(sum);//36
}

2、方法的参数是引用数据类型,它传递的是地址(String类型除外)

//参数 是数组类型
public static int pow(int[] arr){
arr[0]=arr[0]+2;//根据地址 改变数组的第一个元素值arr[0]=4;
return arr[0]*arr[0];//4*4
}

调用

//调用另一个pow
int[] array={2,3};
int sum2=pow(array);//array中存放数组的地址,将地址赋值给arr 形参
System.out.println(array[0]);//4
System.out.println(sum2);//16

方法的重载:

​ 在一个类中,存在相同方法名的两个及以上的方法,且他们的参数列表不同(参数类型不同,参数个数不同,参数顺序不同),不考虑参数名,不考虑返回值类型

​ 一个类中不能存在完全相同的方法,他们是重复的方法JVM编译不通过

例如:

public int add(int a,int b){
return a+b;
}
public int add(long a,long b){
return (int)(a+b);
}
//与前两个 不重载
public void add(int c,int d){ }
//能与 方法1,2构成重载
public void add(int a){ }
//能与 方法1,2构成重载
public void add(int a,long b){ }
//能与 方法1,2构成重载
public void add(long a,int b){ }

把握;方法名是否相同,同时参数列表是否相同(参数个数不同 或者参数类型不同或者参数顺序不同)

在一个方法中可以调用其它的方法,它们的执行流程


/**
* 程序入口
* @param args
*/
public static void main(String[] args) {
System.out.println("这里是main方法的开始");
method1();
System.out.println("这是main方法的结束");
}
// 在一个方法中可以调用另一个方法, 它们的执行顺序是这样的
public static void method1(){
System.out.println("这是method1 的开始语句块 ");
// 调用method2
method2();
System.out.println("这是method1的 结束语句块");
}
public static void method2(){
System.out.println("这是method2 的开始语句块 ");
// 调用method3
method3();
System.out.println("这是method2 的结束语句块"); } public static void method3(){
System.out.println("这是method3的执行语句块");
}

二、方法的递归调用

1、定义

​ 在一个方法中,运用方法自身调用,这样的调用称为方法的递归调用,为了避免出现方法调用时出现死循环,递归调用中必须定义方法结束调用的条件。

方法递归调用执行流程

public static void m3(int i){
if(i==5){
return ;
}
System.out.println("这是m3方法开始i :"+ i);
i++;
m3(i);
System.out.println("m3方法的结束 i:"+ i );
}
public static void main(String[] args) { m3(0); //
}

练习1 : 使用递归计算一个数的阶乘

​ n =5 = 5! = 5*4的阶乘

​ f(n) = n* f(n-1) = (n-1)*f(n-1-1)

public static int f(int n ){
if(n==1){
return 1;
}
int s = n*f(n-1);
System.out.println("结束 --"+s);
return s;
}
// n =5 n=4 n=3 n=2 n=1 return 1
// s = 5*f(4) s=4* f(3) s= 3* f(2) s=2*f(1)
// s=5*24 s=4* 6 s=3* 2= 6 s=2
// s = 120

Java方法的调用以及方法参数传递、方法的递归调用的更多相关文章

  1. python生成器,递归调用

    生成器 什么是生成器:只要在函数体内出现yield关键字,那么再执行函数就不会执行函数代码,会得到一个结果,该结果就是生成器 生成器就是迭代器 yield的功能 yield为我们提供了一种自定义迭代器 ...

  2. 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用

    5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...

  3. Python递归调用

    递归调用:在调用一个函数过程中,直接或间接又调用该函数本身,称之为递归调用 递归必备的2个阶段  1递推 2回溯 当递推结束后就可以进行回溯了 Python默认设置递归层数为1000 递归示例: de ...

  4. Python小白学习之路(十三)—【递归调用】

    一.递归调用定义 在函数内部,可以调用其他函数. 如果在调用一个函数的过程中直接或间接调用自身本身,则称为递归调用 从某种意义上来说,递归调用可以实现无限循环 二.递归调用的特性 必须有一个明确的结束 ...

  5. day14函数递归调用

    day14函数递归调用 1.装饰器叠加 def deco1(func1): def wrapper1(*args,**kwargs): print('=====>wrapper1 ') res1 ...

  6. 【Thinking in Java】编写构造器时应注意:尽量避免调用其他非private方法

    最近重温了<Thinking in Java>,发现了一个让我为之兴奋的知识漏洞,必须得分享一下. 上一篇的<Java类初始化的过程>的随笔中,那个初始化顺序并不完整.初始化的 ...

  7. java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊

    java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...

  8. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

  9. java 调用webservice的各种方法总结

    java 调用webservice的各种方法总结 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较 方法一:创建基于JAX-WS的webservice(包括 ...

  10. 原!! java直接打印一个对象时,并不是直接调用该类的toString方法 ,而是会先判断是否为null,非null才会调用toString方法

    网上看了好多java直接打印一个对象时,直接调用该类的toString方法 . 但是: Object obj=null; System.out.println(obj);//没有报错 System.o ...

随机推荐

  1. JS有哪些变态语法,你知道吗?

    JS作为一门如此灵活的语言,自然在编码时给我们带来了很多方便,但方便的同时,也衍生出了很多变态的语法,下面我们来梳理一些常见的变态语法,希望你下次在某位大牛的代码中看到这样的东西,不要惊掉下巴. NO ...

  2. 2.Web开发基础

    Web开发基础 目录 Web开发基础 1.网络基础 2.OSI模型 应用层: 表示层: 会话: 传输层: 网络层: 数据链路层: 物理层: 3.通信子网:(数据通信) 4.资源子网:(数据处理) 5. ...

  3. Go 语言:通过TDD测试驱动开发学习 Mocking (模拟)的思想

    正文: 现在需要你写一个程序,从 3 开始依次向下,当到 0 时打印 「GO!」 并退出,要求每次打印从新的一行开始且打印间隔一秒的停顿. 3   2   1   Go!   我们将通过编写一个 Co ...

  4. vue中使用vue.extend在dom挂载vue实例

    const CounterComponent = Vue.extend(Counter); this.vm = new CounterComponent({}).$mount('#container' ...

  5. ACM-NEFU新生训练2-排序和CMP

    A.谁考了第k名-排序 Description 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩. Input 第一行有两个整数,分别是学生的人数n(1≤ ...

  6. JSF预热功能在企业前台研发部的实践与探索

    作者:京东零售 李孟东 00 导读 企业前台研发部包含了企业业务大部分的对外前台系统,其中京东VOP平台(开放平台)适合于自建内网采购商城平台的企业客户. 京东为这类客户专门开发API接口,对接到客户 ...

  7. Vulnhub Bravery靶机 Walkthrough

    Bravery Recon 使用netdiscover对本地网络进行arp扫描. ┌──(kali㉿kali)-[~] └─$ sudo netdiscover -r 192.168.80.0/24 ...

  8. LeeCode 二叉树问题(三)

    二叉树的应用问题 LeeCode 222: 完全二叉树的节点个数 题目描述 给你一棵 完全二叉树 的根节点 root,求出该树的节点个数. 完全二叉树的定义 除最底层节点可能没填满外,其余每层节点树都 ...

  9. 从ReentrantLock角度解析AQS

    是它,是它,就是它,并发包的基石: 一.概述 闲来不卷,随便聊一点. 一般情况下,大家系统中至少也是JDK8了,那想必对于JDK5加入的一系列功能并不陌生吧.那时候重点加入了java.util.con ...

  10. 【前端基础】(一)Es6新特性

    1 Es6 全称为ECMAScript是浏览器脚本语言的规范,而各种我们熟知的js语言则是规范的具体体现. 1.1 Es6新特性 ① let与var 作用域 <script> { var ...