首页
学习
活动
专区
圈层
工具
发布

java的方法和函数(三)

构造方法

在Java中,构造方法(constructor)是用来创建对象的特殊方法。构造方法与类名相同,没有返回类型,并且可以接受参数。当创建一个对象时,Java会自动调用相应的构造方法来初始化对象。如果没有显式地定义构造方法,Java会自动提供一个默认构造方法,它不接受任何参数并且不执行任何操作。下面是一个示例:

代码语言:javascript
复制
public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public void sayHello() {
        System.out.println("Hello, my name is " + name);
    }
}

Person person = new Person("Alice");
person.sayHello(); // 输出:Hello, my name is Alice

在上面的代码中,我们定义了一个Person类,其中包含一个构造方法“Person”。构造方法接受一个字符串参数“name”,用来初始化“name”成员变量。在创建Person对象时,我们需要传递一个字符串参数来调用构造方法,并初始化“name”成员变量。

链式调用

在Java中,可以使用链式调用(chaining)来简化代码,使代码更加易读和清晰。链式调用是指在同一个对象上依次调用多个方法,每个方法返回的都是这个对象本身,以便后续方法可以继续调用。下面是一个示例:

代码语言:javascript
复制
public class StringBuilderDemo {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("Hello").append(", ").append("world").append("!");
        String message = sb.toString();
        System.out.println(message); // 输出:Hello, world!
    }
}

在上面的代码中,我们创建了一个StringBuilder对象,并通过链式调用append方法来构建一个字符串。由于每个append方法都返回StringBuilder对象本身,因此我们可以继续调用下一个方法,直到构建完整个字符串。最后,我们调用toString方法将StringBuilder对象转换成一个字符串,并将其输出。

方法的参数传递

在Java中,方法的参数传递可以分为值传递(pass by value)和引用传递(pass by reference)两种方式。值传递是指将参数的值复制一份传递给方法,方法中对参数值的修改不会影响原来的变量值。引用传递是指将参数的引用复制一份传递给方法,方法中对引用所指向的对象的修改会影响原来的对象。

下面是一个示例,演示值传递和引用传递的区别:

代码语言:javascript
复制
public class ParameterPassingDemo {
    public static void main(String[] args) {
        int x = 1;
        System.out.println("Before: x = " + x);
        modifyValue(x);
        System.out.println("After: x = " + x);

        int[] arr = {1, 2, 3};
        System.out.println("Before: arr[0] = " + arr[0]);
        modifyArray(arr);
        System.out.println("After: arr[0] = " + arr[0]);
    }

    public static void modifyValue(int value) {
        value = 2;
    }

    public static void modifyArray(int[] arr) {
        arr[0] = 2;
    }
}

在上面的代码中,我们定义了两个方法,一个是修改int类型值的方法“modifyValue”,另一个是修改int数组第一个元素的方法“modifyArray”。在主方法中,我们分别调用这两个方法,并输出变量的值。由于Java采用的是值传递方式,所以在调用“modifyValue”方法时,虽然在方法中将参数值修改为2,但是原来的变量x的值仍然是1。而在调用“modifyArray”方法时,由于Java采用的是引用传递方式,所以在方法中将数组第一个元素的值修改为2,会影响到原来的数组。

方法重写

在Java中,方法重写(override)是指子类重写父类的方法,使得子类可以用自己的方法来实现相同的功能。方法重写可以提高代码的复用性和可读性。方法重写的规则如下:

  • 方法名、参数列表和返回值类型必须与父类的方法相同。
  • 子类方法的访问修饰符不能比父类方法的访问修饰符更严格。
  • 子类方法抛出的异常类型必须与父类方法抛出的异常类型相同或者是其子类型。
  • 子类方法不能重写父类方法的final修饰符。

下面是一个示例,演示方法重写的使用:

代码语言:javascript
复制
class Animal {
    public void sayHello() {
        System.out.println("Animal says hello");
    }
}

class Cat extends Animal {
    public void sayHello() {
        System.out.println("Cat says hello");
    }
}

public class MethodOverrideDemo {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Cat cat = new Cat();
        animal.sayHello(); // 输出:Animal says hello
        cat.sayHello(); // 输出:Cat says hello
        Animal animal2 = new Cat();
        animal2.sayHello(); // 输出:Cat says hello
    }
}

在上面的代码中,我们定义了一个Animal类和一个Cat类,其中Cat类继承自Animal类,并重写了父类的sayHello方法。在主方法中,我们分别创建了一个Animal对象和一个Cat对象,并分别调用了它们的sayHello方法,输出了不同的结果。此外,我们还将一个Cat对象赋值给一个Animal类型的变量,并调用了它的sayHello方法,输出了Cat的结果。这表明,当一个对象被声明为父类类型,但实际引用的是子类对象时,调用重写的方法时会调用子类的方法。

方法重载

在Java中,方法重载(overload)是指在同一个类中,有多个方法具有相同的方法名,但参数列表不同,以便可以使用相同的方法名来执行不同的操作。方法重载可以提高代码的可读性和可维护性。

方法重载的规则如下:

  • 方法名必须相同。
  • 参数列表必须不同,包括参数个数、类型或者顺序。
  • 返回值类型可以相同也可以不同。
  • 仅仅改变方法的返回类型不足以成为方法的重载。

下面是一个示例,演示方法重载的使用:

代码语言:javascript
复制
public class MethodOverloadDemo {
    public static void main(String[] args) {
        printMessage("Hello"); // 输出:Hello
        printMessage("Hello", "world"); // 输出:Hello world
        printMessage("Hello", 3); // 输出:HelloHelloHello
    }

    public static void printMessage(String message) {
        System.out.println(message);
    }

    public static void printMessage(String message1, String message2) {
        System.out.println(message1 + " " + message2);
    }

    public static void printMessage(String message, int count) {
        for (int i = 0; i < count; i++) {
            System.out.print(message);
        }
        System.out.println();
    }
}

在上面的代码中,我们定义了三个名字相同的方法printMessage,但参数列表不同,分别接受一个字符串、两个字符串和一个字符串和一个整数。在主方法中,我们分别调用了这三个方法,输出了不同的结果。

下一篇
举报
领券