Методы против конструкторов в Java
Я только что начал программировать на Java. Текст, который мы используем, отсутствует при обсуждении методов и конструкторов. Я не уверен, что метод или конструктор точно и что делает каждый уникальный. Может кто-то, пожалуйста, помогите мне определить их и провести различие между ними?
Ответы
Ответ 1
Важное различие между конструкторами и методами заключается в том, что конструкторы инициализируют объекты, которые создаются с помощью оператора new
, тогда как методы выполняют операции над уже существующими объектами.
Конструкторы не могут быть вызваны напрямую; они называются неявно, когда ключевое слово new
создает объект. Методы могут быть вызваны непосредственно на объект, который уже был создан с помощью new
.
Определения конструкторов и методов выглядят одинаково в коде. Они могут принимать параметры, они могут иметь модификаторы (например, public
), и у них есть тела методов в фигурных скобках.
Конструкторы должны иметь имя с тем же именем, что и имя класса. Они ничего не могут вернуть, даже void
(сам объект является неявным возвратом).
Должны быть объявлены методы, чтобы вернуть что-то, хотя это может быть void
.
Ответ 2
Основное отличие
1. Конструктор используются для инициализации состояния объекта, где метод раскрывает поведение объекта.
2. Конструктор не должен иметь тип возвращаемого значения, где метод должен иметь тип возврата.
3. Конструктор имя совпадает с именем класса, где метод может или не может совпадать с тем же именем класса.
4. Конструктор вызывает неявно, когда метод вызывает явно.
5. Конструктор компилятор предоставляет конструктор по умолчанию, где компилятор метод не предоставляет.
Ответ 3
Другие преподаватели и преподаватели иногда говорят мне, что конструкторы - это специализированные методы. Я всегда утверждаю, что в конструкторах Java НЕ являются специализированными методами.
Если бы конструкторы были методами вообще, я бы ожидал, что они будут иметь те же способности, что и методы. То, что они, по крайней мере, были бы похожими по-разному, чем они отличаются.
Как конструкторы отличаются от методов? Позвольте мне посчитать пути...
-
Конструкторы должны быть вызваны с помощью оператора new
, в то время как методы не могут быть вызваны с помощью оператора new
. Связано: конструкторы могут не вызываться по имени, а методы должны вызываться по имени.
-
Конструкторы могут не иметь тип возвращаемого значения, тогда как методы должны иметь тип возврата.
-
Если метод имеет то же имя, что и класс, он должен иметь тип возврата. В противном случае это конструктор. Тот факт, что вы можете иметь две подписи MyClass() в том же определении класса, которые обрабатываются по-разному, должны убедить всех, что конструкторы и методы являются разными объектами:
public class MyClass {
public MyClass() { } // constructor
public String MyClass() { return "MyClass() method"; } // method
}
-
Конструкторы могут инициализировать константы экземпляра, в то время как методы не могут.
-
Публичные и защищенные конструкторы не наследуются, пока наследуются общедоступные и защищенные методы.
-
Конструкторы могут вызывать конструкторы суперкласса или одного класса, в то время как методы не могут вызывать либо super(), либо this().
Итак, что похоже на методы и конструкторы?
-
У них обоих есть списки параметров.
-
У них есть блоки кода, которые будут выполняться, когда этот блок либо вызван напрямую (методы), либо вызван через new
(конструкторы).
Что касается конструкторов и методов, имеющих одинаковые модификаторы видимости... поля и методы имеют более общие модификаторы видимости.
-
Конструкторы могут быть: private, protected, public.
-
Методы могут быть: private, protected, public, abstract, static, final, synchronized, native, strictfp.
-
Поля данных могут быть: конфиденциальными, защищенными, общедоступными, статическими, конечными, переходными, неустойчивыми.
В заключении
В Java форма и функция конструкторов существенно отличаются от форм. Таким образом, называть их специализированными методами на самом деле усложняет для новых программистов изучение различий. Они гораздо более похожи, чем аналогичные, и изучают их, поскольку разные сущности являются критическими в Java.
Я действительно признаю, что Java отличается от других языков в этом отношении, а именно С++, где возникает понятие специализированных методов и поддерживается языковыми правилами. Но в Java конструкторы не являются методами вообще, а тем более специализированными методами.
Даже javadoc распознает различия между конструкторами и методами, перевешивает сходства; и предоставляет отдельный раздел для конструкторов.
Ответ 4
Конструктор - это особый метод, который позволяет вам создать новый экземпляр класса. Он относится к логике инициализации.
Ответ 5
В 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 '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 type is " + a.type);
}
}
Надеюсь, я объяснил все в комментариях кода, но вот резюме:
Конструкторы "построят" объект типа класса. Конструктор должен называться тем же, что и класс. Они в основном используются для инициализации экземпляров varibales
Методы - это функциональность объектов.
Ответ 6
"Метод" - это "подпрограмма", "процедура" - это "функция", "подпрограмма" - это... Такая же концепция относится к множеству разных имен, но в основном это именованный сегмент кода, который вы можете "позвонить" из какого-то другого кода. Как правило, код аккуратно упакован с каким-то "заголовком", который дает свое имя и параметры и "тело", заданное 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> )
.)
Ответ 7
разность r
:
- Конструктор должен иметь имя такое же, как класс, но метод может быть создан любым именем.
- Конструктор не наследуется автоматически дочерними классами, а метод наследования потомков из родительского класса, если они не защищены секретным ключевым словом.
- Конструктор
r
называется явно, в то время как методы implicitaly.
- Конструктор не имеет какого-либо типа возвращаемого значения, а метод имеет.
Ответ 8
Конструктор - это специальная функция, используемая для инициализации элемента данных, где методы - это функции для выполнения конкретной задачи.
Имя конструктора - это то же имя, что и имя класса, где имя метода может быть или не быть или быть именем класса.
Конструктор не допускает никакого типа возврата, где методы позволяют возвращать тип.
Ответ 9
Конструктор обычно Метод.
Когда мы создаем объект использования нового класса класса, мы вызываем специальный метод, называемый конструктором.
Конструктор, используемый для инициализации переменной экземпляра.
Код:
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();
}
}
`
Итак, только покажите здесь конструктор метод Diff(), потому что мы создаем объект класса Diff. В этом случае конструктор всегда приходит первым, чтобы создать экземпляр класса класса Diff().
обычно,
Конструктор настроен.
Все начинается здесь, когда мы вызываем объект ob в главном конструкторе метода, этот класс принимает и создает копию и загружается в "загрузчик классов виртуальной машины Java".
Этот загрузчик классов берет эту копию и загружает в память, поэтому теперь мы можем использовать ее, ссылаясь.
Конструктор выполнил свою работу, затем метод пришел и выполнил свою реальную реализацию.
В этой программе, когда мы вызываем
ob.print();
тогда метод придет.
Спасибо
Arindam
Ответ 10
Основная разница приведена ниже -
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");
}
}