0

私はJavaが初めてです。コンストラクタの基本的な概念を知っています。コンストラクターを作成しない場合、コンパイラーもデフォルトのコンストラクターを作成することを知っています。

この toString() メソッドがどのように使用できるかを確認するプログラムを作成しましたが、

public class Vehicle{
    int rollNo;
    String name;
    int age;
    public Vehicle(int rollNo, String name, int age){
        this.rollNo=rollNo;
        this.name=name;
        this.age=age;
    }

    public String toString(){
        return rollNo+""+name+""+age;
    }

    public static void main(String[] args){
        Vehicle v=new Vehicle(100, "XXX", 23);
        Vehicle v2=new Vehicle(101, "XXXS", 24);

        System.out.println(v);
        System.out.println(v2);
    }
}

そして、私は次のように出力を得ています:

   100XXX23
   101XXXS24

しかし、私の疑問は、なぜコンストラクターを作成し、同じ変数を引数として渡すのでしょうか?

このように変数に値を代入できず、コンストラクターなしで値を取得できないのはなぜですか?

public class Vehicle{
    int rollNo=100;
    String name="XXX";
    int age=23;
    // public Vehicle(int rollNo, String name, int age){
    //     this.rollNo=rollNo;
    //     this.name=name;
    //     this.age=age;
    // }
    // 


    public static void main(String[] args){
      //  Vehicle v=new Vehicle(100, "XXX", 23);
    //    Vehicle v2=new Vehicle(101, "XXXS", 24);

            Vehicle v=new Vehicle(rollno,name,age);
         //   Vehicle v2=new Vehicle();



        System.out.println(v);
      //  System.out.println(v2);
    }

     public String toString(){
        return rollNo+""+name+""+age;
    }
}
4

4 に答える 4

0

引数を持つコンストラクターを使用する必要がある理由は、作成されたインスタンスが不変オブジェクトであるためです。つまり、作成後にその状態を変更することはできません。つまり、オブジェクトにはセッターがなく、ゲッター メソッドしかありません。

Java プラットフォームでは、GC が JVM の主要部分であり、不変オブジェクトにより、GS がヒープ メモリ内の使用できないオブジェクトをクリーンアップする作業が少なくなります。

Pls はリンクhttp://c2.com/cgi/wiki?ImmutableObjectsAndGarbageCollectionを参照してください

于 2013-09-19T13:11:28.173 に答える
0

まず、クラス定義でコンストラクターを定義せずに、属性またはプロパティの値を設定できます。これは、Java クラス内の属性/プロパティでセッターを使用することで実行できます。たとえば、次のようになります。

public class Vehicle{
    int rollNo;
    String name;
    int age;

    // Note no constructor, so the default no-arg constructor can be used. 

    // Now the setters
    public void setRollNo(int anInt) {
        this.rollNo = anInt;
    }

    public String setName(String aName) {
        this.name = aName;
    }

    public void setAge(int anAge) {
        this.age = anAge;
    }

    public static void main(String[] args){
        Vehicle v=new Vehicle(); // note no-arg constructor being used.
        v.setRollNo(3);
        v.setName("Hello");
        v.setAge(12);
        System.out.println(v);
    }

}

重要な OOP 原則に準拠しているため、セッターの使用ははるかに優れています。カプセル化のそれは、Java とソフトウェアでは非常に重要です。

ゲッターとセッターの使用、およびコンストラクターの使用について説明している Oracleの次の Java チュートリアルをご覧ください。

于 2013-09-19T12:59:10.817 に答える