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

时间:2014-11-01 21:56:03

标签: java constructor terminology

我有两套讲义。一个人将构造函数称为一种方法。另一组说明声称构造函数不是方法。

我个人认为构造函数不是方法。但是,我在invoke上使用constructor一词是否正确?

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


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

2 个答案:

答案 0 :(得分: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
        }
    }
}

答案 1 :(得分:0)

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

所以,你可以说&#34;调用一个构造函数&#34;

有关详细信息,请参阅此链接 - http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html