程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java學習中,匿名函數、構造方法、構造代碼塊、構造方法中調用構造方法(java 學習中的小記錄),java構造

java學習中,匿名函數、構造方法、構造代碼塊、構造方法中調用構造方法(java 學習中的小記錄),java構造

編輯:JAVA綜合教程

java學習中,匿名函數、構造方法、構造代碼塊、構造方法中調用構造方法(java 學習中的小記錄),java構造


java學習中,匿名函數、構造方法、構造代碼塊、構造方法中調用構造方法(java 學習中的小記錄)

作者:王可利(Star·星星)

 

匿名函數

匿名對象:沒有名字的對象

 

匿名對象使用的注意點:

1.一般不會用匿名對象給屬性賦值,無法獲取屬性值,每次new 都是一個新的對象。

2.匿名對象永遠都不可能是一個對象。

如:person new().name = “星星”;是不行的

 

匿名對象的好處:書寫簡單。

匿名對象使用的場景:
1.如果一個對象調用一個方法一次的時候,就可以用匿名對象來調用.
2.可以作為實際參數在方法中調用


 

構造方法
Object-C 中自定義初始化方法:創建對象的時候 init 就調用這些方法;
1.可以在對象創建的時候初始化屬性值。
2.創建對象的時候 只調用了一次方法。



java 中 ,這個方法叫構造方法

構造方法的作用:給對象進行初始化,對象創建時初始化屬性值。

 

創建構造方法:

1.構造方法沒有返回類型,方法名和類名保持一致。

2.構造方法不是我們手動調用的,是對象被創建的時候jvm(java虛擬機)調用的。

3.如果一個類我們沒有給它定義構造方法,jvm(java虛擬機)在編譯的時候 會給這個類默認添加一個無參構造方法。

4.如果自己定義了構造方法,那麼jvm不會再創建無參構造方法。

5.創建對象的時候,有幾個參數,就要有相應的構造方法,也是對應的要有幾個參數。

格式:

    1.修飾符 類名(參數列表){}

    2.直接類名 (參數列表){}

代碼如下 

 1 class Person{
 2     //公有屬性
 3     String name;
 4     int age;
 5     
 6     //創建一個構造方法(有兩個參數)
 7     public Person(String n,int a){
 8         name = n;
 9         age = a;
10     }
11     //無參構造方法
12     public Person(){
13         
14     }
15     
16     //行為
17     public void study(){
18         System.out.println(age+"歲的"+name+"正在學習");
19     }
20 }
21 public class Star_gzff {
22     
23     public static void main(String[] args) {
24         //創建一個Person對象
25         Person p = new Person("星星",12);//這裡傳的是兩個參數的那個構造方法
26         //調用普通的方法-工作
27         p.study();
28         
29         //沒有無參構造方法這裡會出錯
30         Person p1 = new Person();//這裡傳的是無參數的構造方法
31         p1.name = "小明";
32         p1.study();
33     }
34 }

 

方法重載

java中,方法是可以重名的,我們把這種重名的方法叫 方法的重載。

使用方法重載注意的地方:

1.方法名一樣才叫方法重載。

2.任何方法(普通方法,構造方法)都可以實現方法重載。

3.參數列表要保證順序 或者 個數是不一樣的。

  如 :Person (String a , int b);

         Person ( int b, String a);//順序不一樣

         Person (String a , int b,String c);//個數不一樣


 

構造代碼塊

代碼塊分為三類:

 

1.構造代碼塊

 

2.局部代碼塊:寫在方法中,也是以大括號來表示

 

3.靜態代碼塊

 

在上面的構造方法中,構造方法是可以調用普通方法的,在創建對象的同時就使用這個普通方法,不需要後期對象再調用方法。

如:

      public Person(String n,int a){
                 name = n;
                 age = a;
                 study();//調用普通的方法
      }

如果我們有很多的這樣的構造方法(無參的,一個參數的,兩個參數的...),每一個都要調用這個方法,代碼就會顯得復雜麻煩,於是就有了構造代碼塊。

代碼塊作用:給對象統一初始化。(對象創建之前都會走這個方法)

構造代碼塊的格式:{} 就一個大括號。。

代碼分析:

 1 class Person{
 2     //公共屬性
 3     String name;
 4 
 5     //構造代碼塊
 6     {
 7         age = 18;
 8     }
 9     //創建一個構造方法
10     public Person(String n,int a){
11         name = n;
12         age = a;
13     }
14     
15     int age = 20;
16     
17     public void study(){
18         
19         System.out.println(age+"歲的"+name+"在學習");
20     }
21 }
22 
23 public class Star_gzdmk {
24     
25     public static void main(String[] args) {
26         
27         Person p = new Person("星星",12);
28         p.study();
29     }
30 }

構造代碼塊使用注意點總結:

1.構造代碼塊必須寫在成員變量(屬性)的位置。

2.對象創建之前都會走這個方法。

3.java中編譯器編譯java源文件的時候,會把成員變量的聲明放到最前面。

4.成員變量的初始化都是在構造方法中執行的,一旦經過java編譯器編譯,構造代碼塊的方法會移到構造函數中執行,放在構造函數的最前面執行。

5.如果沒有構造方法,只有成員變量初始化和構造代碼塊,按照當前代碼的順序來執行。

在普通方法裡面,如果添加一個局部變量,名字和屬性的名字一樣的話:

System.out.println(name),這裡的那麼就是 局部變量的 name。

如果用了this關鍵字的話,System.out.println(this.name);就是構造方法裡面的name。

在構造方法裡面,傳入的參數名字和屬性的名字一樣的話:如:name = name;//拿到的兩個name都是局部變量

這時要寫 this.name = name;//拿到的第一個name才是屬性

this關鍵字:

    1.代表所屬方法的調用對象,和oc中的 self 相似。

    2.如果成員變量和局部變量重名,在方法中的默認調用局部變量(就近原則),通過this可以讓方法的調用成員變量。

    3.如果方法中不存在與成員變量重名的局部變量,java編譯器就會默認給變量前面加一個this。


 

構造方法中調用構造方法

構造方法是可以調用普通方法(實例方法)。

構造方法中也是可以調用構造方法的。

問題代碼如下:

class Student{
    //公有屬性
    String id;
    String name;
    String classNum;
    String sex;
    int age;
    //創建構造方法
    public Student(String id,String name,String classNum,String sex,int age){
        this.name = name;
        this.id =id;
        this.classNum = classNum;
        this.sex = sex;
        this.age = age;
    }
    //重載構造方法,只寫四個參數的
    public Student(String id,String name,String classNum,String sex){
        this.name = name;
        this.id =id;
        this.classNum = classNum;
        this.sex = sex;
    }
    //重載構造方法,只寫三個參數的
    public Student(String id,String name,String classNum){
        this.name = name;
        this.id =id;
        this.classNum = classNum;
    }
    //普通方法
    public void Student(){
        
    }
}

這樣子寫代碼的話就會顯得代碼很復雜,我們在這個時候就可以嘗試使用構造方法之間的調用。

比方說:4個參數的構造方法包含了3個參數的構造方法,我只需要在四個參數的構造方法裡面調用3個參數的構造方法,在從中添加一個自己與三個參數不同的一個參數就可以簡化代碼了。

解決第一步的代碼如下:

 

class Student{
    //公有屬性
    String id;
    String name;
    String classNum;
    String sex;
    int age;
    //創建構造方法
    public Student(String id,String name,String classNum,String sex,int age){
        Student(id,name,classNum,sex);//四個參數
        this.age = age;
    }
    //重載構造方法,只寫四個參數的
    public Student(String id,String name,String classNum,String sex){
        Student(id,name,classNum);//三個參數
        this.sex = sex;
    }
    //重載構造方法,只寫三個參數的
    public Student(String id,String name,String classNum){
        this.name = name;
        this.id =id;
        this.classNum = classNum;
    }
    //普通方法
    public void Student(){
        
    }
}

 

但是如果你這樣子調用的話會出現一個問題,你調用的不是構造方法,而是普通方法。

總結:直接使用方法名來調用方法,調用的是普通方法,不會是構造方法。

最後的解決方法,代碼如下:

 

class Student{
    //公有屬性
    String id;
    String name;
    String classNum;
    String sex;
    int age;
    //創建構造方法
    public Student(String id,String name,String classNum,String sex,int age){
        this(id,name,classNum,sex);
        this.age = age;
    }
    //重載構造方法,只寫四個參數的
    public Student(String id,String name,String classNum,String sex){
        this(id,name,classNum);
        this.sex = sex;
    }
    //重載構造方法,只寫三個參數的
    public Student(String id,String name,String classNum){
        this.name = name;
        this.id =id;
        this.classNum = classNum;
    }
    //普通方法
    public void Student(){
        
    }
}

 

構造方法調用的總結:

1.直接使用方法名來調用方法 調用的是普通的方法,不會將這個方法作為構造方法。

   如:Student(name,id,classNum,sex);

2.如果在方法名前面添加this ,也是錯誤的。

   如:this,Student(name,id,classNum,sex);

3.正確的調用方法應該是直接一個this()來調用構造方法。而且要是第一個語句,否則會報錯。

   如:this(name,id,classNum,sex);

         this.id = id;

4.不要在兩個構造方法之間相互調用構造方法。會導致死循環。

    如:this(name,id,classNum,10);//傳了一個常量

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved