Java-オブジェクト向け(基本編)--構築方法と匿名オブジェクト


一.構造方法は、オブジェクトをインスタンス化した後、そのオブジェクトの属性に値を割り当てる場合は、setter法で属性に値を別々に割り当てる必要があります.これは明らかに便利ではありません.この場合、このような操作を構造方法で行うことができる.オブジェクト向けの構築方法の主な役割は、クラス内の属性を初期化することです.構造方法は特殊な方法と見なすことができる:【構造方法の定義フォーマット】
class    {1   12   2,…….){
        …….//         
    }
}

メソッドを構築するときは、*メソッドの名前はクラス名と一致する必要があります.構築メソッドの宣言には、戻り値タイプの宣言はありません.構造メソッドでreturnを使用して値を返すことはできません.*
構築方法を宣言します.
class Person{
    public Person(){        //       
        System.out.println("    Person    。") ;
    }
};
public class ConsDemo01{
    public static void main(String args[]){
        System.out.println("    :Person per = null ;") ;
        Person per = null ; //               
        System.out.println("     :per = new Person() ;") ;
        per = new Person() ;//     
    }
};

実行結果:
    :Person per = null ;
     :per = new Person() ;
    Person    。

プログラムインスタンス化オブジェクトのプロセスは、以前と同様にクラスにpersonクラスの構築方法を定義しますが、プログラムの実行結果から、キーワードnewインスタンス化オブジェクトが呼び出されると、構築方法が呼び出されます.前の例では、クラスには構築方法はありませんが、呼び出すこともできます.なぜですか.まず説明するのは、クラスであれば必ず構造方法が存在し、Javaでは一つのクラスに明確な構造方法が宣言されていない場合、コンパイル時に無パラメータで何もしない構造方法が直接生成されます.つまり、以上のPersonクラスに構造方法が宣言されていない場合、実際にコンパイル時に以下の構造方法が加えられます.
class Person{
    public Person(){}
}

以下、構造方法でコピーします.
class Person{
    private String name ;
    private int age ;
    public Person(String n,int a){      //       ,         
        this.setName(n) ;
        this.setAge(a) ;
    }
    public void setName(String n){
        name = n ;
    }
    public void setAge(int a){
        if(a>0&&a<150){
            age = a ;
        }
    }
    public String getName(){
        return name ;
    }
    public int getAge(){
        return age ;
    }
    public void tell(){
        System.out.println("  :" + this.getName() + ";  :" + this.getAge()) ;
    }
};
public class ConsDemo02{
    public static void main(String args[]){
        System.out.println("    :Person per = null ;") ;
        Person per = null ; //               
        System.out.println("     :per = new Person() ;") ;
        per = new Person("  ",30) ;//     
        per.tell() ;
    }
};

実行結果:
    :Person per = null ;
     :per = new Person() ;
  :  ;  :30

比較から,setter法よりも構造法による付与が便利であることが分かった.通常の方法と同様に、構造方法もリロード可能であり、各構造方法のパラメータタイプやパラメータ個数が異なる限り、リロード【構造方法のリロード】を実現できる
class Person{
    private String name ;
    private int age ;
    public Person(){}                   //            
    public Person(String n){            //             
        this.setName(n) ;
    }
    public Person(String n,int a){      //       ,         
        this.setName(n) ;
        this.setAge(a) ;
    }
    public void setName(String n){
        name = n ;
    }
    public void setAge(int a){
        if(a>0&&a<150){
            age = a ;
        }
    }
    public String getName(){
        return name ;
    }
    public int getAge(){
        return age ;
    }
    public void tell(){
        System.out.println("  :" + this.getName() + ";  :" + this.getAge()) ;
    }
};
public class ConsDemo03{
    public static void main(String args[]){
        System.out.println("    :Person per = null ;") ;
        Person per = null ; //               
        System.out.println("     :per = new Person() ;") ;
        per = new Person("  ",30) ;//     
        per.tell() ;
    }
};

実行結果:
    :Person per = null ;
     :per = new Person() ;
  :  ;  :30

以上のメソッドは3回再ロードされ,メインメソッドではパラメータが1つしかない構造メソッドが呼び出される.二.匿名オブジェクト匿名オブジェクトとは、明確な名前が与えられていないオブジェクトである.一般に匿名オブジェクトは1回のみ使用され、匿名オブジェクトはスタックメモリの参照なしにスタックメモリにスペースを開くだけです.【匿名対象の使用】
class Person{
    private String name ;
    private int age ;
    public Person(String n,int a){      //       ,         
        this.setName(n) ;
        this.setAge(a) ;
    }
    public void setName(String n){
        name = n ;
    }
    public void setAge(int a){
        if(a>0&&a<150){
            age = a ;
        }
    }
    public String getName(){
        return name ;
    }
    public int getAge(){
        return age ;
    }
    public void tell(){
        System.out.println("  :" + this.getName() + ";  :" + this.getAge()) ;
    }
};
public class NonameDemo01{
    public static void main(String args[]){
        new Person("  ",30).tell() ;
    }
};

実行結果:
  :  ;  :30

上記のプログラムでは、「new Person("張三",30)」文が直接使用されています.これは実際には匿名のオブジェクトであり、以前に宣言されたオブジェクトとは異なり、ここにはスタックメモリが参照されていないため、このオブジェクトが1回使用された後、ゴミ収集機制で回収されるのを待っています.