2014-11-01 3 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). –

+0

Вы не вызываете конструкторы, как обычные методы, но оператор 'new' вызывает его. – 5gon12eder

ответ

1

Merriam Webster describes invoke like this:

: говоря (кто-то или что-то) в попытке заставить людей чувствовать себя определенным образом или иметь определенную идею в своем уме

: сослаться на (что-то) в поддержку ваши идеи

: использовать (закон, право и т.д.)

Так что да, я бы сказал, вы можете вызвать кон structor так же, как вы можете вызвать метод. Но, как 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. Мы не можем использовать какой-либо спецификатор доступа для конструктора.

Итак, вы можете сказать "invoke a constructor".

Для более подробной информации вы можете передать этот ссылка- http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

+0

* «Мы не можем использовать какой-либо спецификатор доступа для конструктора, так как неявно он статичен». * Это неверно, и я не вижу, откуда его можно получить. – Radiodef

Смежные вопросы