Javaのコンストラクタの説明をしてください?

私はどのようにコンストラクタが動作するのかわかりません 次のコードでは、クラスがあり、次に2つの変数があることがわかります。変数を作成するときは、値のコンテナを作成するので、変数xとyを宣言することで2つのコンテナが作成され、それらには0,0が含まれます。

なぜコンストラクタ、なぜaとb?

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int a, int b) {
        x = a;
        y = b;
    }
}
2
私はあなたがJavaの基礎についての良い本を見つける必要があるかもしれないと思う...
追加された 著者 Oliver Charlesworth,
この特定の場合、x = 0およびy = 0は冗長である。アーギュメントを持たないコンストラクタ public Point(){} を持たない限り、0の値は常に上書きされます。インスタンスの整数変数はjavaの中で0に初期化されるので、さらに冗長です。
追加された 著者 user1084563,

8 答え

コンストラクタは、クラスのインスタンスを初期化するために使用されます。

各インスタンスのxとyの値は、コンストラクタに渡す値に初期化されます。ここでは、パラメータの名前は "a"と "b"です。

一般に、インスタンス変数へのパブリックアクセスは直接手を加えず、getterやsetterを介してアクセスします。

3
追加された
単に "= 0;"を削除してください。それがあなたを混乱させているならば、xとyの宣言から。あなたのケースで本当に重要なビットは、コンストラクタに渡される値です。
追加された 著者 ninesided,
@FairFireなぜですか?制御がコンストラクタに達する前に、0から始まります。コンストラクタは、それらをaとbの値に設定します。
追加された 著者 Dave Newton,
私はxとy = 0の方法と混同して、aとbと等しい
追加された 著者 Fair Fire,

"x"と "y"の値はコンストラクタから渡されるものに初期化されます。この場合 "a"と "b"

1
追加された

Pointクラスがインスタンス化されるとき、xとyは値0を持ちます。しかし、ユーザー値を与えることによってクラスがインスタンス化されるとき、このコンストラクターを使用してxとyの値をユーザーの意図通りにします。

1
追加された
これはインスタンスではなく、静的なブロックに属していなければx = 0およびy = 0になります(そうでない場合)
追加された 著者 Ankit,
はい、それは本当だ。
追加された 著者 aps,

すなわち、 1つは作成することができます:

Point pt=new Point();  //point which has x and y as 0

または

Point pt=new Point(10,5);  //point which has x=10 and y=5
1
追加された
クラスにはデフォルトのコンストラクタはありません。
追加された 著者 Dave Newton,
この例を正しくするには、クラス内のコンストラクタとして public Point(){および public Point(int a、int b){の両方が必要です。 public Point(){はデフォルトです。
追加された 著者 user873578,

このコンストラクタは別のクラスで使用されます。この場合、「グラフ上の点」を作成しようとしているように見えます。そのため、別のクラスでは、このコンストラクターを使用してPointクラスのインスタンスを作成します。

public class Example {

  private Point pt;

  public static void main(String[]args) {

    pt = new Point(20,10);

  }

}

この例では、xが20、yが10のPointクラスの新しいインスタンスを作成します。

0
追加された

非常にわかりやすい例を使って説明し、簡単にそれを学び、適応させることができます。

class store
{
    protected String nameproduct;
    protected String idproduct;

    public store(String nameproduct, String idproduct) {
        this.nameproduct = nameproduct;
        this.idproduct = idproduct;
    } 
}

上記のコードに基づいて、nameproductとidproductをStringとして宣言しました。私はあなたがこれらの変数を宣言する必要がないように、このクラスを他のクラスに継承するときに、それが関係しているので、なぜ私はprotectedを使うのですか?したがって、変数は構築の準備ができている原材料のようであり、コンストラクタはそれを開発するためのツールです。

0
追加された

ここにコードがありますので、私はそれを1行ずつ説明します。

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int a, int b) {
        x = a;
        y = b;
    }
}

まず、 public class Point {]があります。これはクラスの開始点です。すべてのクラスの関数/変数はこのブレースの内部に入ります。

public int x = 0;
public int y = 0;

xとyはここで宣言されています。いずれかの機能の外部として宣言することで、クラス全体でグローバルにアクセスできるようになります。これらの2つの変数は public です。つまり、スクリプトの外部からアクセスできるのですが、 static ではないので、 Point new インスタンスが作成されました。

public Point(int a、int b){

このコード行はコンストラクタと呼ばれます。これは、(a)が戻り型を持たず、(b)がクラスと同じ名前を共有していることからもわかります。インストラクターは、クラスの新しいインスタンスが new キーワードを使用して作成されたときに呼び出されます。 I. new Point() int a int b は2つの必須変数なので、このクラスの新しいインスタンスを new Point(5、10); 5はAを表し、10はBを表す。

コンストラクタの内部では、コンストラクタに渡される2つの値を格納する変数xとyを設定しています。 Xは私の例を使って5になり、Yは10になります。

XとYはすでに値0を使用して作成されており、現在は別の値に設定されているため、0になりません。

コンストラクタにパラメータを指定する必要はなく、パラメータを渡す必要がない場合は単に public Point(){として記述することができます。

0
追加された

"なぜコンストラクタ?" 回答:変数に2つの値を渡してクラスポイントをインスタンス化する必要があります。誰がPointを使い、価値を与え、それを使用したいのかを示します。 "なぜaとb?" 回答:Pointクラスの変数に2つの明示的にユーザー値を与えました。あなたはaとbを忘れるようなこともできます:

enter code here: public class Point {
public int x = 0;
public int y = 0;

//constructor
public Point(int x, int y) {
    this.x = x;
    this.y = y;
}

}

0
追加された
これはあなたの3番目の答えです。今はやめてください。あなたの熱意は高く評価されますが、新しい答えを追加し続けることは決して適切ではありません。むしろ、1つの回答を編集して改善する必要があります。できるだけ読みやすく、理解しやすいように注意してください。たとえば、ここでコードを入力してください。
追加された 著者 Dave Newton,
私はこのフォーラムには初めてです。編集のことを教えてくれてありがとう。私は必要な時にそれを心に留めます。ありがとうございました。
追加された 著者 aps,