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