nextint方法_编程路上第一关:函数(方法)02

函数的语法

在了解了函数到底是什么,以及为什么要使用函数以后,我们接下来再来讨论一下Java语言中函数的具体语法。
从上面的示例中可以看到,函数是分为两个部分的:“函数的定义”和“函数的调用”。

95588caf59ee8e2c65d0a594e2781448.png

1. 仅有函数的定义,没有函数的调用,那么程序运行起来是不会执行到函数当中的代码块;
2. 仅有函数的调用,没有函数的定义,那么程序是找不到这个函数从而无法执行只能报错。

函数的定义

public static 返回类型 函数名(形参列表){
//功能的实现语句
}

虽然这个定义语法还不是Java函数语法的全部内容,不过已经包含了最最主要的部分,搞清楚它们对我们后面的学习是至关重要的。方法定义的语法由“声明”和“实现”两块组成。

bd4778c3947d00b6af06d07aa97ed28b.png

⚠️Java代码的书写习惯是起始“ { ”不换行,这里是为了画图方便

声明部分

  • public static ———— 统称“修饰符”,它们是用来修饰这个函数的被调用范围和调用方式;这里关系到面向对象的知识点,我们在现阶段不讨论,大家现在请先无脑写死;
  • 返回类型 ———— 用来定义函数执行结束以后,是否有结果返回给调用者;如果没有请写void,如果有请书写返回的类型;
    ⚠️一个函数只能书写一种返回类型,在函数定义的时候只能确定其类型,不能确定其值。因为具体的返回值只有在该函数被执行的时候(调用时)才能确定。
  • 函数名 ———— 用来描述函数功能的标识符,也是用来绑定调用方到底调用哪个函数的关键;
  • 形参列表 ———— 如果函数的执行过程中,需要调用方传递一些先决数据,那么就需要定义形参列表;关键在于参数的类型、参数的个数和参数的顺序;
    ⚠️1. 如果函数不需要调用方传参,可以定义无参函数,但是“( )”不能缺少;⚠️2. 由于在定义函数时,同样只能确定是否接参数,接几个参数,每个参数是什么类型的,第一个参是什么,第二个参是什么,所以在语法上此时只有参数的形式没有参数的值(其语法特性就像在定义变量一样,以便于运行起来后装入调用方传入的实际的参数值)。所以,这里的参数列表被称之为“形参列表”(参数的形式)。比如:
    1public static void welcome()
    1public static boolean login(String name, String password)
    1public static int addAll(int[] array)

实现部分

//完成一个打印欢迎的功能
public static void welcome() {
System.out.println("欢迎使用ATM程序   ");
}

//完成一个判断用户名是否是“admin”和密码是否是“123456”的登陆功能
public static boolean login(String name, String password) {
if("admin".equals(name) && "123456".equals(password)){
return true;
}
return false;
}

//完成一个数组所有元素求和的功能
public static int addAll(int[] array) {
int cnt = 0;
for(int i = 0; i < array.length; i++){
cnt += array[i];
}
return cnt;
}

函数实现部分的语法中,要注意的要点如下:

  • “{ }” ———— 函数的实现是从这对大括号的开始而开始,结束而结束的;换句话说只要书写了这对大括号,就叫做函数已经被实现了,就算括号内部一句代码都没有;
  • return ———— 重要的事情说三遍:“return不是用来返回值的!return不是用来返回值的!return不是用来返回值的!”;return是用来结束函数执行的,把执行流程返回到函数调用处。如果函数声明中有返回类型,那么函数的每种结束情况都需要在return后面跟上该类型的返回值;如果函数声明的返回类型是void,那么直接书写renturn即可结束函数;

函数的调用

当我们定义好一个函数以后,接下来就是调用了。这样,这个函数才能在执行到调用代码的时候被执行到。其基本结构如下:

类名.函数名(实参列表);

调用语法

由于我们目前学习的函数的修饰符固定为“public static”,所以我们都可以使用上面这个语法直接对某个函数进行访问。区别只在于:函数的定义位置和调用位置是否是在同一个类当中。如果是的话,前面的”类名.”是可以省略的。

public class Test{
//定义函数method
public static void method(){
System.out.println("method函数的实现");
}
public static void main(String[] args){
Test.method();//调用Test类的method函数
method();//调用本类的method函数
}
}

参数传递

参数传递是很多同学在初学函数的时候最容易搞错的地方,所以接下来我们详细讨论一下这种情况。

首先,我们分清楚形参与实参两个概念;形参实参

位置方法定义处方法调用处语法声明变量的语法使用常量或变量名含义声明一个新的变量,用来接收函数调用处传递过来的数据值。调用方真正需要传递到函数中的数据值;可以是一个常量值,也是可以是调用方某个同类型变量当中的值。其次,我们再记住一个重要的理论:Java中参数的传递只有一种形式叫“值传递”。即把实参的值传递给形参。接下来,我们看个例子:

public class Test{
public static void welcome(int num){//num是形参
for(int i = 0; i < num; i++){
System.out.println("欢迎,欢迎,热烈欢迎!");
}
}
public static void main(String[] args){
int times = 5;
welcome(times);//times是实参
}
}

执行步骤:

  1. 程序从main方法开始,执行“int times = 5;”。内存中在main函数的作用域产生一个times变量,放入数据5;
  2. 执行调用语句”welcome(times);”,程序流程转到welcome函数;
  3. 进入welcome函数,先执行形参”int num”。内存中在welcome函数的作用域产生一个num变量;
  4. 把实参times的值,传递给形参num,完成参数传递;
  5. 开始执行welcome内部的代码。

e0eb12c2c289b21a600f9761b7ccef0b.png

返回值

当函数的声明中带有某种返回类型(非void)的时候,这表明这个函数执行结束以后会有一个该类型的返回值传递回调用处。如果说参数是为了把函数所需要的外部条件从调用处传递到函数内部,那么返回值则是把函数执行后的结果从函数内部传递回调用处。

1234567891011121314151617181920
import java.util.Scanner;public class Test{//判断是否是奇数public boolean isOdd(int num){boolean result = false;if(num % 2 == 1){result = true;}return result;}public static void main(String[] args){System.out.println("请输入任意一个整数:");Scanner scan = new Scanner(System.in);int input = scan.nextInt();boolean flag = isOdd(input);//isOdd函数调用处System.out.println(flag);}}

执行步骤:

  1. 程序从main方法开始,当执行到“iint input = scan.nextInt();”。内存中在main函数的作用域产生一个input变量,放入用户输入的数据,比如5;
  2. “boolean flag = isOdd(input);”这条语句会先执行赋值符号的左边,即在main方法的作用域中先产生一个boolean类型的变量叫做flag;然后再调用isOdd函数;
  3. 调用isOdd函数则程序流程进入isOdd函数内部,先执行”int num”产生形参变量,把实参的值传递给形参,完成参数传递;
  4. 执行isOdd内部的代码,直到结束。由于结束语句是“return result;”,所以会在程序流程返回到方法调用处的同时,把isOdd内部变量result的值作为结果也返回给调用处;
  5. 然后通过“=”赋值符号,把这个值赋给flag变量;然后继续演main函数向下执行。

25329990978505696605a585a65ddbd4.png

只要isOdd函数执行结束,流程就会回到调用处,同时返回值也会返到调用处,不管我们有没有用一个变量接收它。相当于,返回值就是这个函数调用表达式的结果。我们可以把这个结果用一个变量(如:flag)存起来,也可以直接用来做打印、做判断,或者其它操作。

public static void main(String[] args){
System.out.println("请输入任意一个整数:");
Scanner scan = new Scanner(System.in);
int input = scan.nextInt();
System.out.println(isOdd(input));//直接打印返回值
}

public static void main(String[] args){
System.out.println("请输入任意一个整数:");
Scanner scan = new Scanner(System.in);
int input = scan.nextInt();
if(isOdd(input)){//利用boolean类型返回值做判断
System.out.println(input + "是奇数");
}else{
System.out.println(input + "是偶数");
}
}

当函数设计有返回值的情况下,可以直接把调用函数的表达式当成一个数据值使用!

函数调用栈

当一个函数定义好了以后,任何一个函数都可以调用它。所以很有可能会出现函数调用函数,再调用函数的情况。在这种情况下就会呈现出一种“栈”结构,也就是我们说的先进后出,即先被调用的函数会后结束。

123456789101112131415161718
public class Test{public static void main(String[] args){System.out.println("main方法开始");methodA();System.out.println("main方法结束");}public static void methodA(){System.out.println("A方法开始");methodB();System.out.println("A方法结束");}public static void methodB(){System.out.println("B方法开始");System.out.println("B方法结束");}}

执行步骤:

0a5f6c691919dec09368420fd9d2a934.png

打印结果:

c10b05a9ee83e98ff4284ca4263c8c67.png

这种函数嵌套调用的执行顺序,就被称之为“函数调用栈”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值