方法与参数及对象

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,我们将继续学习方法和对象。任务是学习如何定义带参数的方法。对象是面向对象编程(OOP)语言中非常重要的概念,因此对其有深入的理解对你将大有裨益。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/DataStructuresGroup(["`Data Structures`"]) java(("`Java`")) -.-> java/ProgrammingTechniquesGroup(["`Programming Techniques`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java/DataStructuresGroup -.-> java/arrays("`Arrays`") java/ProgrammingTechniquesGroup -.-> java/method_overloading("`Method Overloading`") java/ProgrammingTechniquesGroup -.-> java/recursion("`Recursion`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("`Classes/Objects`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_methods("`Class Methods`") subgraph Lab Skills java/arrays -.-> lab-178547{{"`方法与参数及对象`"}} java/method_overloading -.-> lab-178547{{"`方法与参数及对象`"}} java/recursion -.-> lab-178547{{"`方法与参数及对象`"}} java/classes_objects -.-> lab-178547{{"`方法与参数及对象`"}} java/class_methods -.-> lab-178547{{"`方法与参数及对象`"}} end

方法与参数

在某些情况下,你需要一些可以重复使用的代码来解决一些类似的问题,例如打印某人的年龄和姓名。对于不同的人,姓名和年龄是不同的。这两个变量可以作为参数传递给代码块。这里我们引入了方法的概念,方法将执行任务。

示例:

/home/labex/project/methodTest.java 文件中编写以下代码:

public class methodTest
{
    public static void main(String[] args)
    {
        // 调用我们自定义的方法
        printInfo("Mike", 18);
        // 调用我们自定义的方法
        System.out.println(fibonacci(10));
        System.out.println(fibonacciNormal(10));
    }
    // 我们定义一个类方法来打印个人信息
    public static void printInfo(String name, int age){
        System.out.println("Hello " + name + ", your age is " + age);
    }
    // 定义一个类方法,通过递归计算斐波那契数列
    public static int fibonacci(int n){
        if(n<=2){
            return 1;
        }else{
            return fibonacci(n-1)+fibonacci(n-2);
        }
    }
    // 定义一个类方法,通过迭代循环计算斐波那契数列
    public static int fibonacciNormal(int n){
        if(n<=2){
            return 1;
        }
        int n1=1,n2=1,sum=0;
        for(int i=0;i<n-2;i++){
            sum=n1+n2;
            n1=n2;
            n2=sum;
        }
        return sum;
    }
}

输出:

使用以下命令运行 methodTest.java 文件:

javac /home/labex/project/methodTest.java
java methodTest

查看输出:

Hello Mike, your age is 18
55
55

在上面的示例中,我们编写了一个名为 printInfo 的函数。你可以随意命名它。它有两个参数,返回类型为 void,意味着不会返回任何值。你可以根据需要确定函数的返回类型,参数的数量和类型也可以是任意的。你可以按以下方式定义你的方法:

示例:

public/private static/final/{非必需} 返回类型 方法名( 参数列表 ) {
    // 语句
}
public String getName(){}
public void setName(){}
public static void newInstance(){}
public final String msg(){}

Java 提供了许多内置库方法,用于执行最常见的操作,例如数学函数。这些函数被称为方法。方法的调用语法类似于我们已经见过的打印语句:

示例:

double root = Math.sqrt(16.0);   // root = 4.0
double height = Math.sin(1.5);   // height = 0.9974949866040544

对象

在 Java 中,有两种类型:基本类型(primitive types)和对象类型(object types)。基本类型,如 intboolean,以小写字母开头;对象类型以大写字母开头。这种区分很有用,因为它提醒我们它们之间的一些区别:

当你声明一个基本类型变量时,你会为该基本类型的值分配存储空间。当你声明一个对象类型变量时,你会为该对象的引用分配空间。要为对象本身分配空间,你必须使用 new 操作符。

如果你没有初始化一个基本类型变量,它会根据其类型获得一个默认值。例如,int 的默认值是 0boolean 的默认值是 false。对象类型的默认值是 null,表示引用变量没有引用任何对象。

基本类型变量在某种程度上是隔离的,因为你无法在一个方法中做任何事情来影响另一个方法中的变量。对象类型变量可能会比较棘手,因为它们不像基本类型那样隔离。如果你将一个对象的引用作为参数传递,你调用的方法可能会修改该对象,在这种情况下你会看到效果。当然,这可能是件好事,但你必须意识到这一点。

如果我们将基本类型变量传递给一个方法(按值传递参数),我们实际上是复制基本类型的值并在方法内部使用这些副本。方法内部的所有操作都作用于这些副本;而在方法外部,基本类型变量的值不受影响。但是,如果我们将非基本类型的对象传递给一个方法(按引用传递参数),我们传递的是引用变量。所有操作实际上都会使用和/或影响原始对象。

示例:

/home/labex/project/objectTest.java 文件中编写以下代码:

public class objectTest {
    public static void main(String[] args){
        // 使用 new 创建一个包含两个元素的数组对象
        int[] numbers = new int[2];
        // 为数组对象赋值
        numbers[0] = 1;
        numbers[1] = 2;
        // 以这种方式创建基本类型变量
        int a = 1 , b = 2;

        // 创建一个测试对象
        objectTest test = new objectTest();

        test.changeInt(a, b);
        System.out.println("Now a is " + a + ", b is " + b);

        test.changeArray(numbers);
        System.out.println("Now numbers contain:");

        for(int i : numbers){
            System.out.print(i + "\t");
        }
    }
    // 定义一个对象方法,修改 int 值
    public void changeInt(int a,int b){
        a = 2;
        b = 3;
        System.out.println("In changeInt method, a is " + a + ", b is " + b);
    }
    // 定义一个对象方法,修改数组值
    public void changeArray(int[] number){
        for(int i = 0;i < number.length;i++){
            number[i] = number[i]+1;    // 将数组元素的值增加 1
        }
        System.out.println("In changeArray method, numbers contain:");
        for(int i : number){
            System.out.print(i + "\t");
        }
        System.out.println();
    }
}

输出:

在终端中使用以下命令运行 objectTest.java 文件:

javac /home/labex/project/objectTest.java
java objectTest

查看输出:

In changeInt method, a is 2, b is 3
Now a is 1, b is 2
In changeArray method, numbers contain:
2    3
Now numbers contain:
2    3

基本类型和对象类型之间还有一个区别。你无法向 Java 中添加新的基本类型(除非你加入标准委员会),但你可以创建新的对象类型!我们将在下一章中看到如何做到这一点。

总结

方法是类中常见的组成部分。方法是一个执行特定操作的代码块。Java 提供了许多内置类,我们可以直接使用它们。向方法传递参数有两种方式:按值传递和按引用传递。它们的效果是不同的。在下一个实验中,我们将向你介绍这些内容。希望这对你有所帮助。

您可能感兴趣的其他 Java 教程