劉志雄
[摘 要]java中的構造函數與this在程序當中起著非常重要的作用:構造函數主要用來完成對對象屬性的初始化工作;this的作用類似于C語言里的指針。本文將結合簡單實例對構造函數與this的一般用法與特殊用法進行詳細分析。
[關鍵詞]構造函數;java;對象;this
在一個類中,如果定義了與成員變量同名的形式參數,要區(qū)分到底是成員變量還是形式參數,通過this來進行區(qū)分。在Java的學習當中,this關鍵字起著指針的作用,用來指示成員變量與成員方法還有構造函數。在已有的文獻當中分析構造函數與this的用法時,用例和分析過于復雜,下面用簡單實例來全面分析構造函數與this的用法。
一、構造函數與this用法實例
用例如下:
class student{
1.int age;
2.String name;
3.student(){
// 5.1 student(age);
4.System.out.println("空構造函數");}
5.student(int age){
6.this();
7.this.age=age;
8.System.out.println("帶一個形參的構造函數"); }
9.student(int age, String name){
10. this(age);
11. this.age=age;
12. this.name=name;
13. this.f();
14. System.out.println("帶兩個形參的構造函數"); }
15. void f(){
16. //this();
17. System.out.println("成員方法"); }
18.public static void main(String[] args){
19. student a1=new student();
20. student a2=new student(20,"小軍");
21. System.out.println("年齡"+a2.age+"名字"+a2.name);}}
程序運行結果如下:
二、構造函數與this一般用法的分析
第3行.5行.9 行是定義student類的構造函數,第6行.10行是用this來調用構造函數;另外,構造函數不能相互調用:如第5.1行與第6行。第7行.11行.12行是this用來指示成員變量,使用this.age, this.name來指示成員變量。第13行表示在構造函數中調用了成員方法f()。第19行與第20行是創(chuàng)建了兩個對象,實際是運行了空構造函數與帶兩個形參的構造函數。如果程序中保留第19行與第20行時,必須把空構造函數寫出來。程序的第21行是對對象a2的屬性值的輸出。
三、this 的特殊用法
接下來分析this在匿名類和內部類中的應用。
用例如下:
1.public class animal {
2.animal(){
3.Thread thread = new Thread(){
4.public void run() {
5.animal.this.run(); } }; //注意這里有分號
6.thread.start(); }
7.public void run() {
9.System.out.println("我是成員方法run ");}
10. public static void main(String[] args) {
11. animal as=new animal();}}
程序運行結果:
在上述實例中,thread是一個匿名類對象,run函數體內調用到了外部類animal的run函數。由于函數同名,不可直接調用:一是把外部類的run函數換一個名字如outrun,代碼第5行改成animal.outrun(); 第7行public void run()改成public static void outrun()但這種方法不建議使用。二是用上面例子中的辦法,用外部類的類名加上this引用來說明要調用的是外部類的方法run。
四、結語
構造函數:
1.構造函數的定義:方法名與類名相同且沒有返回值。
2.構造函數的作用是對象屬性的初始化,如程序中的第20行,依據參數傳遞分析知,20是對age的賦值,“小軍”是對name的賦值。
3.空構造函數可隨類的加載自動調用,但創(chuàng)建對象時,空構造函數與帶參數的構造函數都用上了,這時空構造函數就必須顯性的寫出來即程序代碼中的第3行。
this的用法:
1.this.變量名:用來指示成員變量,即代碼中的第7行.1行1.12行,如this.age=age,等號后面的age構造函數中括號里的age, this.age中的age是指的成員變量。
2.this.方法名():用來指示成員方法,如代碼中的this.f(),指的f()方法是成員方法。
3.this():這種格式的代碼是用來指調用構造函數,如果括號里帶了參數,指的是調用帶參數的構造函數,如代碼this(age),指的是調用帶age參數的構造函數。
參考文獻:
[1]唐明虎.基于項目任務驅動的Java語言教學模式研究[J].智能計算機與應用,2010,01.
[2] 安博教育集團,Java核心技術[M].北京:電子工業(yè)出版社,2012.
基金項目:湖南省教育科學“十三五”規(guī)劃2017年度課題:XJK17BGD083 。endprint