【一步一步了解Java系列】:Java中的方法对标C语言中的函数

简介: 【一步一步了解Java系列】:Java中的方法对标C语言中的函数

1.png


引言:相信大家在学习C语言后再学习Java时就经常听到有人说到”方法“,但是当你看到他们所说的方法时,你就会就会感觉到熟悉,你可能就会觉得这不就是C语言中的函数吗?那么Java中的方法和C语言中的有什么不一样吗?其实这两者确实区别不大,甚至可以说一样,只不过C语言面向过程的语言而Java是面向对象的语言。所以叫法上是有一点区别的。那么下面我们就来学习一下Java中的方法的知识吧。

什么是方法以及方法存在的意义

在我看来方法就是将一些代码封装起来的一片代码块,这个代码块可以完成一个单独的功能比如:加法,加法,除法等。再比如:面向对象时有个对象的“说话”功能。


方法存在的意义:

  • 是能够模块化的组织代码(当代码规模比较复杂的时候).
  • 做到代码被重复使用, 一份代码可以在多个位置使用.
  • 让代码更好理解更简单.
  • 直接调用现有方法开发, 不必重复造轮子.


给大家举一个例子:

public static void func1() {


        int year = 1900;
        if ((0 == year % 4 && 0 != year % 100) || 0 == year % 400) {
            System.out.println(year + "年是闰年");
        } else {
            System.out.println(year + "年不是闰年");
        }
    }


如上就是Java中的一个方法,确实与C语言的函数差不多,差别就是语法上的不一样。上面的代码就是:将判断一个年份是否为闰年的代码写到这一块地方,而这一块地方就是方法。


方法的定义

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

**方法体代码; **

return 返回值;

** } **


其中返回值也可以没有,这时返回值类型就为void。

如下我们就示例一下:

public static void func1() {


    int year = 1900;
    if ((0 == year % 4 && 0 != year % 100) || 0 == year % 400) {
        System.out.println(year + "年是闰年");
    } else {
        System.out.println(year + "年不是闰年");
    }
}


在定义一个实现加法的方法:

public static int func2(int a,int b){

    return a+b;        

}

注意事项:


返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成

void

方法名字:采用小驼峰命名

小驼峰即:setName,setNum,亦或是find,found。

参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开

方法体:方法内部要执行的语句

在java当中,方法必须写在类当中

在java当中,方法不能嵌套定义

在java当中,没有方法声明一说

【方法调用过程】 调用方法—>传递参数—>找到方法地址—>执行被调方法的方法体—>被调方法结束返回—>回到主调方法继续往下 执行

如下是一个完整的方法运用过程:

public class Main {
public static void main(String[] args) { 
    int sum = 0;
    for (int i = 1; i <= 5; i++) {
        sum += fac(i);
    } 
    System.out.println("sum = " + sum);
} 

public static int fac(int n) {
        System.out.println("计算 n 的阶乘中n! = " + n);
        int result = 1;
        for (int i = 1; i <= n; i++) {
            result *= i;
        } 
        return result;
    }
        }

实参和形参

那么何为实参何为形参呢?下面我们通过一个代码进行详细解析:

public static int fac(int n) {   //这里n为形参
    System.out.println("计算 n 的阶乘中n! = " + n);
    int result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

public static void main(String[] args) {
    int n=5;
    int num=fac(n);   //这里n为实参
    System.out.println(c);

}


调用方法时,给方法传值的是实参,拷贝传来的值的变量为形参。

注意:

Java中没有C语言中的传值调用和传址调用的区别。Java中无法拿到实参的地址的,所以可以简单的理解为如果传参传时的数据类型为_基本类型数据_那么这就是相当于C语言的传值调用 。对此的总结还是那句话。

总结:形参只是实参的临时拷贝,形参的改变不会影响实参。(这是针对基本数据类型来说的)

如下:

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


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


方法重载

什么是方法重载?

方法重载(Overloading)是面向对象编程(OOP)中的一个重要概念,它允许在同一个类中定义多个具有相同名称但参数列表不同的方法。这是多态性的一种形式,使得同一个操作可以应用于不同的数据类型。

方法重载的条件

要实现方法重载,需要满足以下条件:

方法名相同:重载的方法必须具有相同的方法名。

参数列表不同:参数列表可以是参数数量不同,参数类型不同,或者参数顺序不同。

返回类型可相同可不同:方法的返回类型可以相同,也可以不同,但这并不是重载的决定性因素。

3. 方法重载的优点:

代码复用:通过重载,可以复用相同的方法名,减少代码冗余。

提高代码可读性:使用相同的方法名可以提高代码的可读性,使得代码更加直观易懂。

增强灵活性:允许开发者根据不同的参数类型调用不同的方法,增强了程序的灵活性。

4. 方法重载的实现

以下是Java语言中实现方法重载的一个简单示例:

public class Calculator {
// 加法方法重载示例
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
    return a + b;
}

public int add(int a, int b, int c) {
    return a + b + c;
}

}


在这个例子中,Calculator类定义了三个add方法,它们具有相同的方法名,但是参数列表不同。


编译器如何区分重载方法

编译器在调用重载方法时,会根据方法调用时提供的参数类型和数量来确定调用哪个方法。编译器会寻找与调用时参数最匹配的方法。

注意事项:

参数类型和数量:重载方法时,参数的类型和数量是关键,而返回类型不是。

可变参数:在某些语言中,如Java,可以使用可变参数(Varargs)来实现方法重载。

构造函数重载:构造函数也可以被重载,以支持不同的初始化方式。

结论

方法重载是一种强大的编程技术,它允许开发者编写更加灵活和可读的代码。通过合理使用方法重载,可以提高程序的可维护性和扩展性。

方法的递归

了解递归思想

把⼀个大型复杂问题层层转化为⼀个与原问题相似,但规模较小的子问题来求解;直到子问题不能再 被拆分,递归就结束了。所以递归的思考方式就是把大事化小的过程。 递归中的递就是递推的意思,归就是回归的意思,接下来慢慢来体会


递归的两个重要条件

**递归在书写的时候,有2个必要条件:

一、递归存在限制条件,当满足这个限制条件的时候,递归便不再继续。 **

二、每次递归调⽤之后越来越接近这个限制条件。

下面是一个求3的阶乘的代码,运用递归来完成。
public class Test {
    public static int function(int n){

        if(n==1){

            //递归终止条件
            return 1;
        }
        else{

            //递归调用
            return function(n - 1) * n;
        }
    }

    public static void main(String[] args) {
        int num = 3;
        int ret =function(num);
        System.out.println(ret);

    }
}

下面给大家画一下一个大概的流程图

以上就是今天的所有的知识了,喜欢的话可以点个赞哦!


目录
相关文章
|
12天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
28 6
|
17天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
57 4
|
27天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
45 17
|
21天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
60 2
|
26天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
|
29天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
17 2
|
29天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
17 1
|
23天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
29天前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
25 0
|
29天前
|
C语言
【c语言】qsort函数及泛型冒泡排序的模拟实现
本文介绍了C语言中的`qsort`函数及其背后的回调函数概念。`qsort`函数用于对任意类型的数据进行排序,其核心在于通过函数指针调用用户自定义的比较函数。文章还详细讲解了如何实现一个泛型冒泡排序,包括比较函数、交换函数和排序函数的编写,并展示了完整的代码示例。最后,通过实际运行验证了排序的正确性,展示了泛型编程的优势。
20 0
下一篇
无影云桌面