Методы против конструкторов в Java

Я только начал программировать на Java. Текст, который мы используем, отсутствует при обсуждении методов и конструкторов. Я не уверен, что именно метод или конструктор точно и что делает каждый из них уникальным. Может кто-нибудь помочь мне определить их и провести различие между ними?

11 ответов

Решение

Важное различие между конструкторами и методами состоит в том, что конструкторы инициализируют объекты, которые создаются с помощью new оператор, а методы выполняют операции над объектами, которые уже существуют.

Конструкторы не могут быть вызваны напрямую; они называются неявно, когда new Ключевое слово создает объект. Методы могут быть вызваны непосредственно для объекта, который уже был создан с new,

Определения конструкторов и методов похожи в коде. Они могут принимать параметры, они могут иметь модификаторы (например, public), и у них есть метод тела в фигурных скобках.

Конструкторы должны быть названы с тем же именем, что и имя класса. Они не могут ничего вернуть, даже void (сам объект является неявным возвращением).

Должны быть объявлены методы для возврата чего-либо, хотя это может быть void,

Основное отличие

1. Конструктор используется для инициализации состояния объекта, где в качестве метода выставляется поведение объекта.

2. Конструктор не должен иметь тип возвращаемого значения, так как метод должен иметь тип возвращаемого значения.

3. Имя конструктора совпадает с именем класса, где метод может или не может совпадать с именем класса.

4. Конструктор вызывается неявно, тогда как метод вызывается явно.

5. Конструктор компилятор предоставляет конструктор по умолчанию, где, как компилятор метода не предоставляет.

Другие инструкторы и ассистенты иногда говорят мне, что конструкторы - это специализированные методы. Я всегда утверждаю, что в Java конструкторы НЕ являются специализированными методами.

Если бы конструкторы были методами вообще, я бы ожидал, что они будут иметь те же способности, что и методы. Что они будут по крайней мере похожи во многих отношениях, чем они разные.

Чем конструкторы отличаются от методов? Позвольте мне сосчитать пути...

  1. Конструкторы должны вызываться с new оператор, в то время как методы не могут быть вызваны с new оператор. Связано: Конструкторы не могут вызываться по имени, а методы должны вызываться по имени.

  2. Конструкторы могут не иметь возвращаемого типа, в то время как методы должны иметь возвращаемый тип.

  3. Если метод имеет то же имя, что и класс, он должен иметь тип возвращаемого значения. В противном случае это конструктор. Тот факт, что вы можете иметь две сигнатуры MyClass() в одном и том же определении класса, которые обрабатываются по-разному, должен убедить всех, что конструкторы и методы - это разные сущности:

    public class MyClass {
       public MyClass() { }                                   // constructor
       public String MyClass() { return "MyClass() method"; } // method
    }
    
  4. Конструкторы могут инициализировать константы экземпляра, а методы - нет.

  5. Публичные и защищенные конструкторы не наследуются, а открытые и защищенные методы наследуются.

  6. Конструкторы могут вызывать конструкторы суперкласса или того же класса, в то время как методы не могут вызывать ни super(), ни this().

Итак, что же похоже на методы и конструкторы?

  1. У них обоих есть списки параметров.

  2. Они оба имеют блоки кода, которые будут выполняться, когда этот блок вызывается напрямую (методами) или вызывается через new (конструкторы).

Что касается конструкторов и методов, имеющих одинаковые модификаторы видимости... поля и методы имеют больше общих модификаторов видимости.

  1. Конструкторами могут быть: частные, защищенные, публичные.

  2. Методы могут быть: приватными, защищенными, публичными, абстрактными, статическими, финальными, синхронизированными, нативными, строгими.

  3. Поля данных могут быть: частными, защищенными, общедоступными, статическими, окончательными, временными, изменчивыми.

В заключение

В Java форма и функции конструкторов значительно отличаются от методов. Таким образом, называя их специализированными методами, начинающим программистам становится труднее усвоить различия. Они значительно отличаются друг от друга, и изучение их как различных сущностей является критически важным для Java.

Я признаю, что Java отличается от других языков в этом отношении, а именно C++, где концепция специализированных методов берет свое начало и поддерживается правилами языка. Но в Java конструкторы вовсе не методы, а тем более специализированные методы.

Даже Javadoc признает различия между конструкторами и методами перевешивает сходства; и предоставляет отдельный раздел для конструкторов.

В Java написанные вами классы являются объектами. Конструкторы строят эти объекты. Например, если у меня есть Apple.class вот так:

public class Apple {
    //instance variables
    String type; // macintosh, green, red, ...

    /**
     * This is the default constructor that gets called when you use
     * Apple a = new Apple(); which creates an Apple object named a.
     */

    public Apple() {
        // in here you initialize instance variables, and sometimes but rarely
        // do other functionality (at least with basic objects)
        this.type = "macintosh"; // the 'this' keyword refers to 'this' object. so this.type refers to Apple's 'type' instance variable.
    }

    /**
     * this is another constructor with a parameter. You can have more than one
     * constructor as long as they have different parameters. It creates an Apple
     * object when called using Apple a = new Apple("someAppleType");
     */
    public Apple(String t) {
        // when the constructor is called (i.e new Apple() ) this code is executed
        this.type = t;
    }

    /**
     * methods in a class are functions. They are whatever functionality needed
     * for the object
     */
    public String someAppleRelatedMethod(){
        return "hello, Apple class!";
    }

    public static void main(String[] args) {
        // construct an apple
        Apple a = new Apple("green");
        // 'a' is now an Apple object and has all the methods and
        // variables of the Apple class.
        // To use a method from 'a':
        String temp = a.someAppleRelatedMethod();
        System.out.println(temp);
        System.out.println("a's type is " + a.type);
    }
}

Надеюсь, я объяснил все в комментариях к коду, но вот краткое изложение: Конструкторы "конструируют" объект типа класса. Конструктор должен иметь то же имя, что и класс. Они в основном используются для инициализации экземпляров переменных. Методы - это функциональность объектов.

Конструктор - это особый метод, который позволяет вам создавать новый экземпляр класса. Это касается логики инициализации.

Конструктор - это специальная функция, используемая для инициализации элемента данных, где методы являются функциями для выполнения конкретной задачи.

Имя конструктора совпадает с именем класса, где имя метода может или не может быть именем класса.

Конструктор не допускает никакого возвращаемого типа, где методы допускают возвращаемый тип.

Различия r:

  1. Имя конструктора должно совпадать с именем класса, но метод может быть создан под любым именем.
  2. Конструкторы не наследуются автоматически дочерними классами, в то время как дочерние классы наследуют метод от родительского класса, если они не защищены частным ключевым словом.
  3. Конструктор r вызывается явно пока методы имплициталы.
  4. Конструктор не имеет возвращаемого типа, в то время как метод имеет.

Основное различие дано ниже -

1: конструктор должен иметь то же имя, что и имя класса, а это не относится к методам

class Calendar{
    int year = 0;
    int month= 0;

    //constructor
    public Calendar(int year, int month){
        this.year = year;
        this.month = month;
        System.out.println("Demo Constructor");
    }

    //Method
    public void Display(){

        System.out.println("Demo method");
    }
} 

2: Конструктор инициализирует объекты класса, а метод - нет. Методы выполняют операции над объектами, которые уже существуют. Другими словами, для вызова метода нам нужен объект класса.

public class Program {

    public static void main(String[] args) {

        //constructor will be called on object creation
        Calendar ins =  new Calendar(25, 5);

        //Methods will be called on object created
        ins.Display();

    }

}

3: Конструктор не имеет возвращаемого типа, но метод должен иметь возвращаемый тип

class Calendar{

    //constructor – no return type
    public Calendar(int year, int month){

    }

    //Method have void return type
    public void Display(){

        System.out.println("Demo method");
    }
} 

"Метод" - это "подпрограмма" - это "процедура" - это "функция" - это "подпрограмма" - это... Та же концепция применяется под многими разными именами, но в основном это именованный сегмент кода, который вы можете " вызов "из какого-то другого кода. Обычно код как-то аккуратно упакован, с каким-то "заголовком", который дает свое имя и параметры, а "тело" устанавливается BEGIN & END или же { & } или что-то подобное.

"Контрактор" - это особая форма метода, целью которого является инициализация экземпляра класса или структуры.

В Java заголовок метода <qualifiers> <return type> <method name> ( <parameter type 1> <parameter name 1>, <parameter type 2> <parameter name 2>, ...) <exceptions> и тело метода заключено в скобки {},

И вы можете отличить конструктор от других методов, потому что у конструктора есть имя класса для его <method name> и не имеет заявленного <return type>,

(В Java, конечно, вы создаете новый экземпляр класса с new оператор - new <class name> ( <parameter list> ).)


Конструктор обычно это метод.

Когда мы создаем объект класса, использующий оператор new, мы вызывали специальный метод, называемый constructor.

Конструктор, используемый для инициализации переменной экземпляра.

Код:

public class Diff{

public Diff() { //same as class name so constructor 

        String A = "Local variable A in Constructor:";
        System.out.println(A+ "Contructor Print me");
    }
   public void Print(){
        String B = "Local variable B in Method";
        System.out.println(B+ "Method print me");
    } 


    public static void main(String args[]){
        Diff ob = new Diff();

        }
}

`

  • Выход:

    Локальная переменная A в конструкторе:Contructor Распечатать мне

Итак, показывайте здесь только метод конструктора Diff(), потому что мы создаем объект класса Diff. В этом случае конструктор всегда стоит первым, чтобы создать экземпляр класса Class здесь Diff().

как правило,

Конструктор настроен особенность.

Здесь все начинается с того, что когда мы вызываем объект ob в конструкторе основного метода, он берет этот класс, создает копию и загружает ее в "загрузчик классов виртуальных машин Java".

Этот загрузчик классов берет эту копию и загружает в память, так что теперь мы можем использовать ее, ссылаясь.

Конструктор выполнил свою работу, затем метод пришел и сделал его реальную реализацию.

В этой программе, когда мы звоним

ob.print();

тогда метод будет подходящим.

Спасибо

Arindam

Вот некоторые основные ключевые различия между конструктором и методом в Java

  1. Конструкторы вызываются во время создания объекта автоматически. Но методы не вызываются во время создания объекта автоматически.
  2. Имя конструктора должно совпадать с именем класса. Метод не имеет такого протокола.
  3. Конструкторы не могут иметь никакого возвращаемого типа. Даже пустота. Но методы могут иметь тип возврата, а также void. Нажмите, чтобы узнать подробности - Разница между конструктором и методом в Java
Другие вопросы по тегам