Java面向對象-構造方法,this關鍵字


Java面向對象-構造方法,this關鍵字

 

構造方法

概念:構造方法是一個特殊的方法,這個特殊方法用於創建實例時執行初始化操作;

 

上代碼:

 1 package com.java1234.chap03.sec04;
 2  
 3 /**
 4  * 定義人類
 5  * @author user
 6  *
 7  */
 8 public class People {
 9  
10     // 定義屬性 
11     private String name; // 實例化對象時,默認值是null
12     private int age; // 實例化對象時,默認值是0
13      
14     /**
15      * 默認構造方法
16      */
17     People(){
18         System.out.println("默認構造方法!");
19     }
20      
21  
22      
23     public void say(){
24         System.out.println("我叫:"+name+",我今年:"+age);
25     }
26      
27     public static void main(String[] args) {
28         People people=new People();
29         people.say();
30     }
31 }

運行輸出:

默認構造方法!

我叫:null,我今年:0
 
 

 

這里我們發現: 實例化對象的時候,String類型的默認值是null,int基本類型的默認值是0 ;

People(){} 構造方法 

特點 1,沒有返回值類型,區別於其他一般方法;

       2,方法名和類名一樣;

 

我們現在可以寫一個有參數的構造方法,用來初始化對象屬性;

 1 package com.java1234.chap03.sec04;
 2  
 3 /**
 4  * 定義人類
 5  * @author user
 6  *
 7  */
 8 public class People {
 9  
10     // 定義屬性 
11     private String name; // 實例化對象時,默認值是null
12     private int age; // 實例化對象時,默認值是0
13      
14     /**
15      * 默認構造方法
16      */
17     People(){
18         System.out.println("默認構造方法!");
19     }
20      
21     /**
22      * 有參數的構造方法
23      * @param name2
24      * @param age2
25      */
26     People(String name2,int age2){
27         System.out.println("調用的是有參數的構造方法");
28         name=name2;
29         age=age2;
30     }
31      
32     public void say(){
33         System.out.println("我叫:"+name+",我今年:"+age);
34     }
35      
36     public static void main(String[] args) {
37         // People people=new People();
38         People people=new People("張三",20);
39         people.say();
40     }
41 }

運行結果

調用的是有參數的構造方法

我叫:張三,我今年:20
 
 

這里我們定義了一個有參數的構造方法,參數有name2 age2,當調用構造方法的時候,用於賦值給name和age屬性;

 

 

注意點:

1,假如沒有構造方法,系統會自動生成一個默認的無參構造方法;

 

上代碼,我們去掉剛才定義的People(){} 

 1 package com.java1234.chap03.sec04;
 2  
 3 /**
 4  * 定義人類
 5  * @author user
 6  *
 7  */
 8 public class People {
 9  
10     // 定義屬性 
11     private String name; // 實例化對象時,默認值是null
12     private int age; // 實例化對象時,默認值是0
13      
14     /**
15      * 默認構造方法
16      */
17     /*People(){
18         System.out.println("默認構造方法!");
19     }*/
20      
21     /**
22      * 有參數的構造方法
23      * @param name2
24      * @param age2
25      */
26     /*People(String name2,int age2){
27         System.out.println("調用的是有參數的構造方法");
28         name=name2;
29         age=age2;
30     }*/
31      
32     public void say(){
33         System.out.println("我叫:"+name+",我今年:"+age);
34     }
35      
36     public static void main(String[] args) {
37         People people=new People();
38         //People people=new People("張三",20);
39         people.say();
40     }
41 }

我們把兩個構造方法注釋了,運行的話,依然沒問題。

 

2,假如有構造方法,系統不會自動生成構造方法;

假如我們單獨去掉無參數的構造方法,上代碼:

 1 package com.java1234.chap03.sec04;
 2  
 3 /**
 4  * 定義人類
 5  * @author user
 6  *
 7  */
 8 public class People {
 9  
10     // 定義屬性 
11     private String name; // 實例化對象時,默認值是null
12     private int age; // 實例化對象時,默認值是0
13      
14      
15     /**
16      * 有參數的構造方法
17      * @param name2
18      * @param age2
19      */
20     People(String name2,int age2){
21         System.out.println("調用的是有參數的構造方法");
22         name=name2;
23         age=age2;
24     }
25      
26     public void say(){
27         System.out.println("我叫:"+name+",我今年:"+age);
28     }
29      
30     public static void main(String[] args) {
31         People people=new People();
32         //People people=new People("張三",20);
33         people.say();
34     }
35 }

我們會發現編譯報錯了:

 

The constructor People() is undefined

說找不到People()構造方法 

 

this關鍵字

this表示當前對象

1,使用this調用本類中的屬性和方法;

2,使用this調用構造方法;

 

我們上面的例子

1 People(String name2,int age2){
2     System.out.println("調用的是有參數的構造方法");
3     name=name2;
4     age=age2;
5 }

構造方法的屬性名和類里的屬性名不一致; 假如說我們搞成一致;

 

 

這里警告的意思 是自己賦值給自己 沒有意義,這里的name和age變量 作用范圍在方法里 所以和類里的屬性名搭不上邊;

我們如何才行指定類里的屬性呢,這時候this關鍵字派上用場了。

 

我們可以用this關鍵字類執行當前對象  this.屬性 實現;

 

上代碼:

 1 package com.java1234.chap03.sec04;
 2  
 3 /**
 4  * 定義人類
 5  * @author user
 6  *
 7  */
 8 public class People {
 9  
10     // 定義屬性 
11     private String name; // 實例化對象時,默認值是null
12     private int age; // 實例化對象時,默認值是0
13      
14     /**
15      * 默認構造方法
16      */
17     /*People(){
18         System.out.println("默認構造方法!");
19     }*/
20      
21     /**
22      * 有參數的構造方法
23      * @param name
24      * @param age
25      */
26     People(String name,int age){
27         System.out.println("調用的是有參數的構造方法");
28         this.name=name;
29         this.age=age;
30     }
31      
32     public void say(){
33         System.out.println("我叫:"+name+",我今年:"+age);
34     }
35      
36     public static void main(String[] args) {
37         // People people=new People();
38         People people=new People("張三",20);
39         people.say();
40     }
41 }

 

假如在我們還有需求,在構造方法中調用另外一個構造方法,比如默認構造方法里是基本的初始化,有參數的構造方法是附加初始化,

再調用有參數的構造方法時候,我們先調用無參數構造方法,實現基本初始化,然后再進行附加初始化,這時候this關鍵字又派上用場了,

我們調用this()就是調用無參數構造方法,括號里也可以加參數,來調用有參數的構造方法。

 

上代碼:

 1 package com.java1234.chap03.sec04;
 2  
 3 /**
 4  * 定義人類
 5  * @author user
 6  *
 7  */
 8 public class People {
 9  
10     // 定義屬性 
11     private String name; // 實例化對象時,默認值是null
12     private int age; // 實例化對象時,默認值是0
13      
14     /**
15      * 默認構造方法
16      */
17     People(){
18         System.out.println("默認構造方法!");
19     }
20      
21     /**
22      * 有參數的構造方法
23      * @param name
24      * @param age
25      */
26     People(String name,int age){
27         this(); // 調用無參數的構造方法
28         System.out.println("調用的是有參數的構造方法");
29         this.name=name;
30         this.age=age;
31     }
32      
33     public void say(){
34         System.out.println("我叫:"+name+",我今年:"+age);
35     }
36      
37     public static void main(String[] args) {
38         // People people=new People();
39         People people=new People("張三",20);
40         people.say();
41     }
42 }

運行輸出

默認構造方法!

調用的是有參數的構造方法
我叫:張三,我今年:20

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM