繁体   English   中英

我们可以调用类构造函数吗?

[英]Can we invoke a class constructor?

我有两套讲义。 人们将构造函数称为一种方法形式。 另一组注释声称构造函数不是方法。

我个人认为构造函数不是方法。 但是我在constructor上使用术语invoke是正确的吗?

我的问题是:我们可以调用java方法。 但是我说“调用构造函数”正确吗?


我访问了以下站点: http : //docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html在构造函数上使用术语invoke似乎不合适。

Merriam Webster像这样描述invoke

:提及(某人或某物)以使人们感到某种方式或具有某种想法

:提及(某物)以支持您的想法

:利用(法律,权利等)

所以是的,我想您可以像调用方法一样调用构造函数。 但是正如Java规范所说

方法调用表达式绝不会调用构造函数

因此只能通过创建对象来调用构造函数:

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class InvokeConstructor {

    public InvokeConstructor() {
        System.out.println("constructor1");
    }

    public InvokeConstructor(final boolean unused) {
        System.out.println("constructor2");
    }

    public static void main(String[] args) {
        new InvokeConstructor();
        new InvokeConstructor(false);

        // And using reflection:
        try {
            Constructor<InvokeConstructor> constructor1 = InvokeConstructor.class.getConstructor();
            constructor1.newInstance();
            Constructor<InvokeConstructor> constructor2 = InvokeConstructor.class.getConstructor(Boolean.TYPE);
            constructor2.newInstance(Boolean.FALSE);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();  // TODO: implement catch
        } catch (InvocationTargetException e) {
            e.printStackTrace();  // TODO: implement catch
        } catch (InstantiationException e) {
            e.printStackTrace();  // TODO: implement catch
        } catch (IllegalAccessException e) {
            e.printStackTrace();  // TODO: implement catch
        }
    }
}

构造函数是一种方法,它具有一些特殊的特权,例如-1。我们不能将其与任何返回类型一起使用,因为构造函数在与“ new”关键字一起调用时隐式返回对象的引用。 2.名称应始终与类名称相同。 3.我们不能对构造函数使用任何访问说明符。

因此,您可以说“调用构造函数”

有关更多详细信息,您可以参考以下链接-http: //docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM