Javaでプログラミングを始めたばかりです。メソッドとコンストラクターについて話すときは、使用するテキストが不足しています。メソッドやコンストラクターが正確に何であり、それぞれが一意である理由はわかりません。誰かがそれらを定義し、2つを区別するのを手伝ってくれますか?
コンストラクターとメソッドの重要な違いは、コンストラクターがnew
演算子を使用して作成されているオブジェクトを初期化し、メソッドが既に存在するオブジェクトに対して操作を実行することです。
コンストラクターを直接呼び出すことはできません。これらは、new
キーワードがオブジェクトを作成するときに暗黙的に呼び出されます。メソッドは、new
で既に作成されているオブジェクトで直接呼び出すことができます。
コンストラクターとメソッドの定義は、コードでは似ています。パラメータを取ることができ、修飾子(例:public
)を持ち、メソッド本体を中括弧で囲むことができます。
コンストラクターには、クラス名と同じ名前を付ける必要があります。 void
(オブジェクト自体が暗黙の戻り値)でさえ、何も返すことができません。
メソッドは、何かを返すように宣言する必要がありますが、void
でもかまいません。
主な違いは
1 .Constructorはオブジェクトの状態を初期化するために使用されます。methodはオブジェクトの動作を公開します。
2 .コンストラクターには戻り値の型を指定しないでください。メソッドには戻り値の型を指定する必要があります。
3 .コンストラクタクラス名と同じ名前メソッドは同じクラス名である場合とそうでない場合があります。
4 .コンストラクター暗黙的に呼び出しますメソッドとして明示的に呼び出します。
5 .Constructorコンパイラーは、methodコンパイラーが提供しないデフォルトのコンストラクターを提供します。
他のインストラクターやティーチングアシスタントから、コンストラクターは特殊なメソッドであると時々言われます。 in Javaコンストラクタは特殊なメソッドではありません。
コンストラクターがまったくメソッドである場合、コンストラクターがメソッドと同じ能力を持つことを期待します。少なくとも、それらが異なるよりも多くの点で類似していること。
コンストラクタはnew
演算子で呼び出す必要がありますが、メソッドはnew
演算子で呼び出すことはできません。関連:コンストラクターは名前で呼び出すことはできませんが、メソッドは名前で呼び出す必要があります。
コンストラクタには戻り値の型がない場合がありますが、メソッドには戻り値の型が必要です。
メソッドがクラスと同じ名前の場合、戻り値の型が必要です。それ以外の場合は、コンストラクターです。同じクラス定義に2つの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。
データフィールドは、private、protected、public、static、final、transient、volatile。
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
は、メソッドが暗黙的に呼び出されている間に明示的に呼び出されます。コンストラクターは、データメンバーを初期化するために使用される特別な関数で、メソッドは特定のタスクを実行する関数です。
コンストラクター名は、クラス名と同じ名前です。メソッド名は、クラス名である場合とそうでない場合があります。
コンストラクターは戻り型を許可しません。メソッドは戻り型を許可します。
「メソッド」は「サブルーチン」、「プロシージャ」は「関数」、「サブプログラム」は... ...同じ概念は多くの異なる名前のもとにありますが、基本的には、他のコードから呼び出します。一般に、コードは何らかの形できちんとパッケージ化されており、名前とパラメータを与えるある種の「ヘッダー」と、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:コンストラクターはクラス名と同じ名前でなければなりませんが、メソッドの場合はそうではありません
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();
}
}
:コンストラクタには戻り値の型はありませんが、メソッドには戻り値の型が必要です
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");
}
}
通常、コンストラクタはMethodです。
クラスnew operator useのオブジェクトを作成するとき、コンストラクタと呼ばれる特別な種類のメソッドを呼び出しました。
インスタンス変数の初期化を実行するために使用されるコンストラクター。
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();
}
}
`
出力:
Constructor:Contructorのローカル変数A
Diffクラスオブジェクトを作成するため、コンストラクタメソッドDiff()ステートメントのみを表示します。その場合、コンストラクターは常に、ここでクラスDiff()をインスタンス化するために最初に来ます。
通常、
コンストラクターは機能をセットアップします。
Mainメソッドコンストラクターでobオブジェクトを呼び出すと、すべてがここから始まり、このクラスを取得してコピーを作成し、「Java Virtual Machine Class loader」にロードします。
このクラスローダーはこのコピーを取得してメモリにロードするため、参照して使用できるようになりました。
コンストラクターが処理を実行すると、メソッドが実行され、実際の実装が実行されます。
このプログラムでは
ob.print();
その後、メソッドが来ます。
ありがとう
アリンダム