【问题标题】:Can we invoke a class constructor?我们可以调用类构造函数吗?
【发布时间】:2014-11-01 21:56:02
【问题描述】:

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

我个人觉得构造函数不是方法。但是我在 constructor 上使用术语 invoke 是否正确?

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


我访问了这个网站:http://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html 在构造函数上使用术语invoke 看起来不合适?

【问题讨论】:

标签: java constructor terminology


【解决方案1】:

Merriam Webster describes invoke like this:

:提及(某人或某事)以试图使人们有某种感觉或有某种想法

:指(某事)以支持您的想法

:利用(法律、权利等)

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

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

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

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
        }
    }
}

【讨论】:

    【解决方案2】:

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

    所以,你可以说“调用构造函数”

    更多细节可以参考这个链接-http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

    【讨论】:

    • “我们不能对构造函数使用任何访问说明符,因为它隐含地是静态的。” 这不是真的,我不知道你可以从哪里得到它.
    猜你喜欢
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多