Java基础——函数

简介: 函数是计算机编程中非常重要的部分,是编程中最基本的元素之一。函数表示的是一 种通用的过程,这种过程能够对外界提供服务。例如,现实生活中,ATM 取款机上有不同 的功能,我们可以理解为 ATM 机上具有不同的函数可以调用;我们在 ATM 机上取钱,就 可以理解为我们在 ATM 机上调用了“取钱”函数。在这种关系中,我们是“取钱”函数 的调用者,“取钱”函数为我们提供服务。

Java基础——函数

一、函数的基本使用


函数的定义


函数是计算机编程中非常重要的部分,是编程中最基本的元素之一。函数表示的是一 种通用的过程,这种过程能够对外界提供服务。例如,现实生活中,ATM 取款机上有不同 的功能,我们可以理解为 ATM 机上具有不同的函数可以调用;我们在 ATM 机上取钱,就 可以理解为我们在 ATM 机上调用了“取钱”函数。在这种关系中,我们是“取钱”函数 的调用者,“取钱”函数为我们提供服务。


代码展示如下:

package p4;
public class hanshu{
public static void main(String [] args){
  int d=add(3,2);     //调用函数
  System.out.println(d);
  }
  public static int add(int a,int b){//声明public static 返回值类型 函数名(形参)
  int c=a+b;    //实现
  return c;    //返回值
  }
}

Ⅰ,定义位置


在类中,任何函数的外部;一个类中可以有多个函数,函数的顺序是无关紧要的。


Ⅱ,声明


public static 返回值类型 函数名(参数表)


形式参数(形参):相当于函数内部有效的局部变量


最重要的部分就是函数的三要素:返回值、函数名、参数表。 返回值


 函数名:表示函数的名字;


参数表:表示调用函数时所给的参数是什么,即调用函数时需要给函数哪些 “输入”。


返回值: 以“取钱”函数为例,函数的返回值为“钱”,我们作为调用者调用“取钱”函数,目 的就是获得这个函数的返回值“钱”;这个函数的参数表表示我们对调用“取钱”时应该给 这个函数传递的参数,取钱时需要“银行卡、密码、取款金额”等一系列参数。 在 Java 中,函数(Function)也被称之为方法(Method)。Java 中并不区分这两个概 念,因此,本书中“函数”和“方法”指的是同一个意思。


return 语句除了能够返回值之外,还能够控制 流程的跳转。具体的说,在执行 return 语句的时候,被调用的函数会终止执行,并返回到 函数的调用点上


返回值为void类型,不需要返回值,将代码块中代码执行完再结束。


Ⅲ,实现


{   }


必须和声明一致(主要指返回值类型)


Ⅳ,调用函数


函数名(实际参数(实参));


实参会依次给形参赋值


调用函数,程序流程会进入函数,函数返回,程序流程会返回到函数调用点


①函数的嵌套调用


前面的内容,我们为大家介绍了函数的一些基本使用。接下来,要介绍的是函数中一 些更加灵活的应用。看下面这个代码的例子:

package p4;
public class TestNestedCall{
  /*
  首先,是在main函数中输出“main1”,然后,在main函数中调用了ma方法,
  于是,流程从 main 中跳转到了ma函数中。
  在ma函数的第一个语句中,输出“ma1”。
  */
  public static void main(String args[]){
  System.out.println("main1");
  ma();
  System.out.println("main2");
  }
  /*
  然后,在ma方法中,又调用了mb方法。
  */
  public static void ma(){
  System.out.println("ma1");
  mb();
  System.out.println("ma2");
  }
  public static void mb(){
  System.out.println("mb1");
  System.out.println("mb2");
  }
  /*
  在ma调用mb函数之后,mb函数输出“mb1”和“mb2”。
  然后,mb 函数中所有的代码都执行完了,mb函数返回其调用点,
  也就是返回到ma方法中。然后,ma方法继续执行,输出“ma2”。
  然后,ma方法的代码也都全部完成,于是 ma 方法也返回调用点,
  也就是返回到主函数中。最后,主函数输出“main2”,主函数中所
  有代码都执行完毕,程序终止。
  */
}


②函数的递归调用


函数除了能够调用其他函数之外,还可以调用函数本身。这就是函数的递归调用。


如果需要写递归的话,需要注意一下几个问题:


1、要首先研究出一个推导公式,这个公式要与参数有关,最好这个公式能够用(n-1)调 用的结果,来计算调用 n 的结果。例如,上面的 n! = (n-1)! * n 就是一个很好的例子。


2、 要写出递归的收敛条件。例如,上面对 n 是否为 1 的判断,这部分就是在说明递归 什么时候终止。


二、函数的作用

package p4;
public class TestSeperator{
  public static void main(String args[]){
  System.out.println("Hello World");
  //打印分隔符 --------------------
  for(int i = 0 ; i < 20 ; i++){
    System.out.print(“-“);
    }
    System.out.println();
    System.out.println("你好,世界");
  //打印分隔符 --------------------
  for(int i = 0 ; i < 20 ; i++){
    System.out.print(“-“);
    }
    System.out.println();
    System.out.println("Bonjour tout le monde");
  //打印分隔符 --------------------
  for(int i = 0 ; i < 20 ; i++){
    System.out.print(“-“);
  }
    System.out.println();
    System.out.println("Hallo Welt");
  }
}

1,避免冗余代码


我们来分析一下上面的代码。由于要输出三个分隔符,因此,需要有三个一模一样的

打印语句。因此,我们可以写一个函数:printSeperator(),这个函数专门用来打印分隔符。 修改后的代码如下:


package p4;
public class TestSeperator{
  public static void main(String args[]){
  System.out.println("Hello World");
    printSeperator();
  System.out.println("你好,世界");
    printSeperator();
  System.out.println("Bonjour tout le monde");
    printSeperator();
  System.out.println("Hallo Welt");
    }
  public static void printSeperator(){
  for(int i = 0 ; i < 20 ; i++){
  System.out.print(“-“);
  }
  System.out.println();
  }
}


2,提高程序的可维护性


如果现在需求产生了变化,

在输出分隔符时,希望能够输出一行“+”而不是一行“-”,此时,就必须要修改代码。 如果不使用函数的话,则必须要改动主函数中所有的输出分隔符的语句。在这个具体 的例子中,在主函数中的代码要修改三处。修改后的代码片段如下:

System.out.println("Hello World");
  //打印分隔符 +++++++++++++++++++
  for(int i = 0 ; i < 20 ; i++){
    System.out.print(“+“);
    }
    System.out.println();
  System.out.println("你好,世界");
  //打印分隔符 +++++++++++++++++++
  for(int i = 0 ; i < 20 ; i++){
    System.out.print(“+“);
    }
    System.out.println();
  System.out.println("Bonjour tout le monde");
  //打印分隔符 +++++++++++++++++++
  for(int i = 0 ; i < 20 ; i++){
    System.out.print(“+“);
    }
    System.out.println();
  System.out.println("Hallo Welt");


3,提高程序的重用性


如果使用函数的话,由于在主函数中仅仅是对同一个函数的多次调用,

因此,让函数实现发生改变的时候,函数的调用不需要改变。我们只需要对函数的实现修

改一次,就完成了我们的工作。修改后的代码如下:

public static void main(String args[]){
    System.out.println("Hello World");
    printSeperator();
    System.out.println("你好,世界");
    printSeperator();
    System.out.println("Bonjour tout le monde");
    printSeperator();
    System.out.println("Hallo Welt");
    }
    public static void printSeperator(){
    for(int i = 0 ; i < 20 ; i++){
      System.out.print(“+“);
      }
    System.out.println();
    }

4,提高程序的灵活性


使用函数,利用函数参数的变化,能够让代码更加灵活。例如,假设现在对分

隔符的长度有不同的要求,要求第一个分隔符长度为 20,第二个分隔符长度为 25,第三个 分割符长度为 30。 这样的需求,如果不适用函数的话,则必须要修改这三个输出的地方,并且每个地方 的输出语句都比较复杂。而如果使用函数的话,则可以让函数增加一个参数,这个参数表 示分隔符的长度。修改后的 printSeperator 函数如下:


public static void printSeperator(int n){
    for (int i = 0; i < n; i++){
    System.out.print(“+”);
    }
    System.out.println();
  }


这样,在主函数中,只要对这个函数传入不同的参数进行三次调用即可。修改后完整

的主函数如下

public static void main(String args[]){
    System.out.println("Hello World");
    printSeperator(20);
    System.out.println("你好,世界");
    printSeperator(25);
    System.out.println("Bonjour tout le monde");
    printSeperator(30);
    System.out.println("Hallo Welt");
  }


相关文章
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
1月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
25 1
|
2月前
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
32 1
java基础(11)函数重载以及函数递归求和
|
1月前
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
22 3
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
3月前
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
75 1
|
4月前
|
存储 Java 编译器
Java中ArrayList的常用函数
确切地说,`ArrayList` 提供的这些方法构成了一套强大并且灵活的工具集,可以满足各种程序设计情况中的需求。例如,通过使用 `iterator()`方法,开发者可以在不知道集合大小的情况下遍历集合中全部或部分元素;而 `sort()`方法则能够对集合中的元素进行排序。这些函数在日常的Java编程中极其常见且重要,掌握它们对于进行集合操作和数据处理来说是基础且必须的。
31 2
Java中ArrayList的常用函数
|
3月前
|
存储 运维 Java
函数计算产品使用问题之怎么配置定时触发器来调用Java函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
开发框架 Java Android开发
JNI中调用Java函数
JNI中调用Java函数
27 0
|
3月前
|
开发框架 Java Android开发
JNI中调用Java函数
JNI中调用Java函数
33 0