Методы против конструкторов в Java
Я только начал программировать на Java. Текст, который мы используем, отсутствует при обсуждении методов и конструкторов. Я не уверен, что именно метод или конструктор точно и что делает каждый из них уникальным. Может кто-нибудь помочь мне определить их и провести различие между ними?
11 ответов
Важное различие между конструкторами и методами состоит в том, что конструкторы инициализируют объекты, которые создаются с помощью new
оператор, а методы выполняют операции над объектами, которые уже существуют.
Конструкторы не могут быть вызваны напрямую; они называются неявно, когда new
Ключевое слово создает объект. Методы могут быть вызваны непосредственно для объекта, который уже был создан с new
,
Определения конструкторов и методов похожи в коде. Они могут принимать параметры, они могут иметь модификаторы (например, public
), и у них есть метод тела в фигурных скобках.
Конструкторы должны быть названы с тем же именем, что и имя класса. Они не могут ничего вернуть, даже void
(сам объект является неявным возвращением).
Должны быть объявлены методы для возврата чего-либо, хотя это может быть void
,
Основное отличие
1. Конструктор используется для инициализации состояния объекта, где в качестве метода выставляется поведение объекта.
2. Конструктор не должен иметь тип возвращаемого значения, так как метод должен иметь тип возвращаемого значения.
3. Имя конструктора совпадает с именем класса, где метод может или не может совпадать с именем класса.
4. Конструктор вызывается неявно, тогда как метод вызывается явно.
5. Конструктор компилятор предоставляет конструктор по умолчанию, где, как компилятор метода не предоставляет.
Другие инструкторы и ассистенты иногда говорят мне, что конструкторы - это специализированные методы. Я всегда утверждаю, что в Java конструкторы НЕ являются специализированными методами.
Если бы конструкторы были методами вообще, я бы ожидал, что они будут иметь те же способности, что и методы. Что они будут по крайней мере похожи во многих отношениях, чем они разные.
Чем конструкторы отличаются от методов? Позвольте мне сосчитать пути...
Конструкторы должны вызываться с
new
оператор, в то время как методы не могут быть вызваны сnew
оператор. Связано: Конструкторы не могут вызываться по имени, а методы должны вызываться по имени.Конструкторы могут не иметь возвращаемого типа, в то время как методы должны иметь возвращаемый тип.
Если метод имеет то же имя, что и класс, он должен иметь тип возвращаемого значения. В противном случае это конструктор. Тот факт, что вы можете иметь две сигнатуры MyClass() в одном и том же определении класса, которые обрабатываются по-разному, должен убедить всех, что конструкторы и методы - это разные сущности:
public class MyClass { public MyClass() { } // constructor public String MyClass() { return "MyClass() method"; } // method }
Конструкторы могут инициализировать константы экземпляра, а методы - нет.
Публичные и защищенные конструкторы не наследуются, а открытые и защищенные методы наследуются.
Конструкторы могут вызывать конструкторы суперкласса или того же класса, в то время как методы не могут вызывать ни super(), ни this().
Итак, что же похоже на методы и конструкторы?
У них обоих есть списки параметров.
Они оба имеют блоки кода, которые будут выполняться, когда этот блок вызывается напрямую (методами) или вызывается через
new
(конструкторы).
Что касается конструкторов и методов, имеющих одинаковые модификаторы видимости... поля и методы имеют больше общих модификаторов видимости.
Конструкторами могут быть: частные, защищенные, публичные.
Методы могут быть: приватными, защищенными, публичными, абстрактными, статическими, финальными, синхронизированными, нативными, строгими.
Поля данных могут быть: частными, защищенными, общедоступными, статическими, окончательными, временными, изменчивыми.
В заключение
В 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
:
- Имя конструктора должно совпадать с именем класса, но метод может быть создан под любым именем.
- Конструкторы не наследуются автоматически дочерними классами, в то время как дочерние классы наследуют метод от родительского класса, если они не защищены частным ключевым словом.
- Конструктор
r
вызывается явно пока методы имплициталы. - Конструктор не имеет возвращаемого типа, в то время как метод имеет.
Основное различие дано ниже -
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
- Конструкторы вызываются во время создания объекта автоматически. Но методы не вызываются во время создания объекта автоматически.
- Имя конструктора должно совпадать с именем класса. Метод не имеет такого протокола.
- Конструкторы не могут иметь никакого возвращаемого типа. Даже пустота. Но методы могут иметь тип возврата, а также void. Нажмите, чтобы узнать подробности - Разница между конструктором и методом в Java