web-dev-qa-db-ja.com

Javaのメソッドとコンストラクタ

Javaでプログラミングを始めたばかりです。メソッドとコンストラクターについて話すときは、使用するテキストが不足しています。メソッドやコンストラクターが正確に何であり、それぞれが一意である理由はわかりません。誰かがそれらを定義し、2つを区別するのを手伝ってくれますか?

20
nckbrz

コンストラクターとメソッドの重要な違いは、コンストラクターがnew演算子を使用して作成されているオブジェクトを初期化し、メソッドが既に存在するオブジェクトに対して操作を実行することです。

コンストラクターを直接呼び出すことはできません。これらは、newキーワードがオブジェクトを作成するときに暗黙的に呼び出されます。メソッドは、newで既に作成されているオブジェクトで直接呼び出すことができます。

コンストラクターとメソッドの定義は、コードでは似ています。パラメータを取ることができ、修飾子(例:public)を持ち、メソッド本体を中括弧で囲むことができます。

コンストラクターには、クラス名と同じ名前を付ける必要があります。 void(オブジェクト自体が暗黙の戻り値)でさえ、何も返すことができません。

メソッドは、何かを返すように宣言する必要がありますが、voidでもかまいません。

54
rgettman

主な違いは

1 .Constructorはオブジェクトの状態を初期化するために使用されます。methodはオブジェクトの動作を公開します。

2 .コンストラクターには戻り値の型を指定しないでください。メソッドには戻り値の型を指定する必要があります。

3 .コンストラクタクラス名と同じ名前メソッドは同じクラス名である場合とそうでない場合があります。

4 .コンストラクター暗黙的に呼び出しますメソッドとして明示的に呼び出します。

5 .Constructorコンパイラーは、methodコンパイラーが提供しないデフォルトのコンストラクターを提供します。

7
murthy naika k

他のインストラクターやティーチングアシスタントから、コンストラクターは特殊なメソッドであると時々言われます。 in Javaコンストラクタは特殊なメソッドではありません

コンストラクターがまったくメソッドである場合、コンストラクターがメソッドと同じ能力を持つことを期待します。少なくとも、それらが異なるよりも多くの点で類似していること。

コンストラクタはメソッドとどう違うのですか?方法を数えてみましょう...

  1. コンストラクタはnew演算子で呼び出す必要がありますが、メソッドはnew演算子で呼び出すことはできません。関連:コンストラクターは名前で呼び出すことはできませんが、メソッドは名前で呼び出す必要があります。

  2. コンストラクタには戻り値の型がない場合がありますが、メソッドには戻り値の型が必要です。

  3. メソッドがクラスと同じ名前の場合、戻り値の型が必要です。それ以外の場合は、コンストラクターです。同じクラス定義に2つのMyClass()シグニチャーを別々に扱うことができるという事実は、コンストラクターとメソッドが異なるエンティティーであることを確信させるはずです。

    public class MyClass {
       public MyClass() { }                                   // constructor
       public String MyClass() { return "MyClass() method"; } // method
    }
    
  4. コンストラクターはインスタンス定数を初期化できますが、メソッドは初期化できません。

  5. パブリックおよび保護されたメソッドは継承されますが、パブリックおよび保護されたコンストラクタは継承されません。

  6. コンストラクターはスーパークラスまたは同じクラスのコンストラクターを呼び出すことができますが、メソッドはsuper()またはthis()を呼び出すことはできません。

それでは、メソッドとコンストラクターの類似点は何ですか?

  1. どちらにもパラメーターリストがあります。

  2. 両方とも、そのブロックが直接呼び出される(メソッド)か、new(コンストラクター)を介して呼び出されるときに実行されるコードのブロックを持っています。

同じ可視性修飾子を持つコンストラクターとメソッドに関しては...フィールドとメソッドには、より多くの可視性修飾子があります。

  1. コンストラクターは、privateprotectedpublic

  2. メソッドは、privateprotectedpublicabstractstaticfinalsynchronizednativestrictfp

  3. データフィールドは、privateprotectedpublicstaticfinaltransientvolatile

結論として

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. コンストラクタは子クラスによって自動的に継承されませんが、子はprivateキーワードで保護されていない限り、親クラスからメソッドを継承します。
  3. コンストラクタrは、メソッドが暗黙的に呼び出されている間に明示的に呼び出されます。
  4. コンストラクタには戻り型がありませんが、メソッドにはあります。
1
naved

コンストラクターは、データメンバーを初期化するために使用される特別な関数で、メソッドは特定のタスクを実行する関数です。

コンストラクター名は、クラス名と同じ名前です。メソッド名は、クラス名である場合とそうでない場合があります。

コンストラクターは戻り型を許可しません。メソッドは戻り型を許可します。

1
geetha

「メソッド」は「サブルーチン」、「プロシージャ」は「関数」、「サブプログラム」は... ...同じ概念は多くの異なる名前のもとにありますが、基本的には、他のコードから呼び出します。一般に、コードは何らかの形できちんとパッケージ化されており、名前とパラメータを与えるある種の「ヘッダー」と、BEGINENDまたは_{_& _}_またはそのようなもの。

「コンストラクタ」は、クラスまたは構造のインスタンスを初期化することを目的とする特別な形式のメソッドです。

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();

    }

}

:コンストラクタには戻り値の型はありませんが、メソッドには戻り値の型が必要です

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

通常、コンストラクタは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();

その後、メソッドが来ます。

ありがとう

アリンダム

0
Arindam Sarkar