2014-11-01 119 views
1

我有2套讲义。一个将构造函数作为方法的一种形式。另一组笔记声称构造函数不是方法。我们可以调用一个类的构造函数吗?

我个人觉得构造函数不是方法。但我是否正确使用invoke这个词在constructor

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


我访问此网站:http://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html 它看起来不恰当的使用上构造术语invoke

+5

这只是争论的语义。但是FWIW,JLS会谈到“调用构造函数”(例如http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8)。 – 2014-11-01 21:58:03

+0

您不像普通方法那样调用构造函数,但是运算符'new'调用它。 – 5gon12eder 2014-11-01 22:02:14

回答

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

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

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

欲了解更多详细信息,你可以参考这个链接 - http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

+0

*“我们不能为构造函数使用任何访问说明符,因为它隐含地是静态的。”*这是不正确的,我没有看到你从哪里得到它。 – Radiodef 2014-11-02 00:15:03

相关问题