it-roy-ru.com

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

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

19
nckbrz

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

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

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

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

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

54
rgettman

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

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

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

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

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

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

7
murthy naika k

Другие инструкторы и ассистенты иногда говорят мне, что конструкторы - это специализированные методы. Я всегда утверждаю, что в 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. Конструкторами могут быть: private, protected, public.

  2. Методы могут быть: private, protected, public, abstract, static, final, synchronized, native, strictfp.

  3. Поля данных могут быть: private, protected, public, static, final, transient, volatile.

В заключение

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

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

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

5
OrangeDeb

В 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);
    }
}

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

4
Alex Mohr

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

3
Willie Wheeler

разница r:

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

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

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

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

1
geetha

«Метод» - это «подпрограмма» - это «процедура» - это «функция» - это «подпрограмма» - это ... Та же концепция применяется под многими разными именами, но в основном это именованный сегмент кода, который вы можете " вызов "из какого-то другого кода. Обычно код каким-то образом аккуратно упакован, с каким-то «заголовком», который дает свое имя и параметры, и «телом», установленным с помощью 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> ).) 

1
Hot Licks

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

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");
    }
} 
0
sachin dubey

Конструктором обычно является Метод .

Когда мы создаем объект класса, использующий оператор 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

0
Arindam Sarkar