📜  调用另一个类的方法而不在 java android 中创建实例 - Java (1)

📅  最后修改于: 2023-12-03 15:28:11.834000             🧑  作者: Mango

在 Java 中调用另一个类的方法而不创建实例

在 Java 中,我们可以通过调用另一个类中的方法来重复使用代码,而不必在每个类中都创建相同的方法或代码。本文将介绍如何在 Java 中调用另一个类的方法,同时避免创建实例的过程。

1. 静态方法

Java 中的静态方法是类级别的方法。这意味着您不需要创建类的实例即可调用它们。为了调用静态方法,只需使用类名称和方法名称即可。以下是一个示例:

public class MyClass {
    public static void myMethod() {
        System.out.println("Hello world!");
    }
}

public class AnotherClass {
    public static void main(String[] args) {
        MyClass.myMethod();
    }
}

在这个例子中,我们通过类名称 MyClass 来调用 myMethod() 方法,而不必先创建 MyClass 的实例。

2. 使用反射

Java 中的反射 API 允许您在运行时获取类和方法的信息,以及在运行时调用方法。使用反射 API,您可以在不创建类实例的情况下调用方法。以下是一个示例:

import java.lang.reflect.Method;

public class MyClass {
    public void myMethod() {
        System.out.println("Hello world!");
    }
}

public class AnotherClass {
    public static void main(String[] args) throws Exception {
        Class<?> clazz = MyClass.class;
        Method method = clazz.getMethod("myMethod");
        Object object = clazz.newInstance();
        method.invoke(object);
    }
}

在这个例子中,我们使用反射 API 获得了 MyClass 的类对象,然后使用 getMethod() 方法获取了 myMethod() 方法的引用。随后,我们使用 newInstance() 方法创建了 MyClass 的实例,最后使用 invoke() 方法调用了 myMethod() 方法。

需要注意的是,在使用反射 API 调用方法之前,需要先获得方法的引用和类实例的引用,这样处理起来比较麻烦。

3. 在匿名内部类中调用方法

如果您想要在创建匿名内部类时调用另一个类中的方法,而不必显式地创建该类的实例,这是个好方法。以下是一个示例:

interface MyInterface {
    void myMethod();
}

public class MyClass {
    public void anotherMethod() {
        System.out.println("Hello world!");
    }
}

public class AnotherClass {
    public static void main(String[] args) {
        MyInterface myInterface = new MyInterface() {
            @Override
            public void myMethod() {
                new MyClass().anotherMethod();
            }
        };
        myInterface.myMethod();
    }
}

在这个例子中,我们创建了一个 MyInterface 的匿名内部类,实现了其中的 myMethod() 方法。在 myMethod() 方法中,我们创建了 MyClass 的实例并调用了其中的 anotherMethod() 方法。

虽然这个方法看起来比较简单,但需要注意的是,它不适用于需要参数的方法调用。

结论

本文介绍了在 Java 中调用另一个类的方法而不必创建实例的方法。我们可以使用静态方法、反射和匿名内部类来实现这个目的。选择哪种方法取决于您的代码结构和需求。