Javaでプログラミングを始めたばかりです。メソッドとコンストラクターについて話すときに使用するテキストが不足しています。メソッドまたはコンストラクターが正確に何であり、それぞれが一意である理由がわかりません。誰かがそれらを定義して2つを区別するのを手伝ってくれませんか?
11 に答える
コンストラクターとメソッドの重要な違いは、コンストラクターはnew
オペレーターで作成されるオブジェクトを初期化するのに対し、メソッドは既存のオブジェクトに対して操作を実行することです。
コンストラクターを直接呼び出すことはできません。new
これらは、キーワードがオブジェクトを作成するときに暗黙的に呼び出されます。メソッドは、 で作成済みのオブジェクトに対して直接呼び出すことができますnew
。
コンストラクターとメソッドの定義は、コードでは似ています。これらはパラメーターを受け取ることができ、修飾子 ( などpublic
) を持つことができ、中かっこで囲まれたメソッド本体を持ちます。
コンストラクターには、クラス名と同じ名前を付ける必要があります。それらは何も返すことができませんvoid
(オブジェクト自体が暗黙の戻り値です)。
メソッドは何かを返すように宣言する必要がありますが、void
.
他のインストラクターやティーチング アシスタントから、コンストラクターは特殊なメソッドであると時々言われます。私は常に、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++ とは異なることは認識しています。C++ では、特殊化されたメソッドの概念が生まれ、言語規則によってサポートされています。しかし、Java では、コンストラクターはメソッドではなく、特殊化されたメソッドではありません。
javadoc でさえ、コンストラクターとメソッドの違いが類似点を上回っていることを認識しています。コンストラクター用の別のセクションを提供します。
コンストラクターは、クラスの新しいインスタンスを作成できる特別な種類のメソッドです。それ自体が初期化ロジックに関係しています。
主な違いは以下のとおりです -
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");
}
}
コンストラクターは通常Methodです。
new 演算子が使用するクラスのオブジェクトを作成すると、コンストラクターと呼ばれる特別な種類のメソッドが呼び出されます。
インスタンス変数の初期化を実行するために使用されるコンストラクター。
コード:
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 Print me
というわけで、ここではコンストラクタメソッドの Diff() 文だけを示します。これは、Diff クラス オブジェクトを作成するためです。その場合、コンストラクターは常に最初に Class here class Diff() をインスタンス化します。
通常、
コンストラクターはセットアップ機能です。
ここからすべてが始まります。メイン メソッド コンストラクターで ob オブジェクトを呼び出すと、このクラスが取得されてコピーが作成され、「Java 仮想マシン クラス ローダー」に読み込まれます。
このクラスローダはこのコピーとメモリへのロードを取得するので、参照して使用できるようになります。
コンストラクターがその作業を完了し、次にメソッドが来て、実際の実装が完了します。
このプログラムでは、呼び出し時に
ob.print();
それから方法が来ます。
ありがとう
アリンダム
Javaのコンストラクターとメソッドの主な主な違いを次に示します
- コンストラクターは、オブジェクトの作成時に自動的に呼び出されます。ただし、オブジェクトの作成時にメソッドが自動的に呼び出されることはありません。
- コンストラクター名はクラス名と同じでなければなりません。メソッドにはそのようなプロトコルがありません。
- コンストラクターに戻り値の型を指定することはできません。ボイドでもない。ただし、メソッドは戻り値の型と void を持つことができます。 クリックして詳細を知る - Java のコンストラクターとメソッドの違い