Java 入門指南- 物件的模板,類別

文章推薦指數: 80 %
投票人數:10人

介紹如何定義Java 的類別。

... 《程式語言教學誌》的範例程式http://pydoing.blogspot.com/ 檔名:Demo2.java 功能:示範Java 程式作者:張凱慶時間:西元2011 年4 月*/ 網頁 導論 G+專頁 G+社群 FB粉絲團 FB社團 微博 YouTube Twitter GitHub 關於本站 意見提供或問題回報 新站 公告 《如何自學程式設計》入選GooglePlay台灣地區2016年度最佳書籍|本站於GooglePlay銷售電子書。

預計之後會調整本站內容,凡是有兩個版本的教材,舊版本將刪除。

------ Udemy|Python專案開發入門的二十一堂課|促銷優惠 Java入門指南-物件的模板,類別 典型的類別(class)定義,如下圖 整體結構就是宣告類別,類別名稱之後用一對大括弧把定義圍起來,裡頭有屬性(field)、建構子(constructor)、方法(method)的的定義,如果這個類別還需要是可執行的,就得額外定義main()方法。

我們將上面的定義例子寫成完整的範例程式,如下 //宣告類別名稱 publicclassDemo2{ //這裡定義屬性 inta; intb; //這裡定義建構子 publicDemo2(inta,intb){ this.a=a; this.b=b; } //這裡定義方法 publicintdo_something(){ returna+b; } //這裡定義main()方法 publicstaticvoidmain(String[]args){ Demo2demo=newDemo2(11,22); System.out.println(); System.out.printf("a=%d,b=%d\n",demo.a,demo.b); System.out.printf("a+b=%d\n",demo.do_something()); System.out.println(); } } /*《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:Demo2.java 功能:示範Java程式 作者:張凱慶 時間:西元2011年4月*/ 先來編譯執行,看看執行出什麼結果囉 程式的執行在main()方法的定義地方 //這裡定義main()方法 publicstaticvoidmain(String[]args){ Demo2demo=newDemo2(11,22); System.out.println(); System.out.printf("a=%d,b=%d\n",demo.a,demo.b); System.out.printf("a+b=%d\n",demo.do_something()); System.out.println(); } 我們在main()中宣告(declare)並建立相同Demo2型態的物件demo,為什麼可以這樣做呢?為什麼要在main()中另外建立物件(object),而非直接存取屬性a及b呢?答案很簡單,首先,因為a與b沒有給初值,我們當然可以定義後直接給初值,例如 //這裡定義屬性 inta=11; intb=22; 這樣屬性a與b就各自擁有初值11及22,我們的作法卻是 //這裡定義屬性 inta; intb; 屬性通常定義在所有方法之外,通常直接放在大括弧之後,類別宣告的下一行。

這裡只有進行屬性的宣告,也就是宣告屬性為int型態的變數,注意,這裡我們在int之後空一格,然後接上屬性的識別字(identifier)名稱。

Java並沒有嚴格限制程式的編排方式,所以只要合乎語法,int空一格,或空兩格並沒有多大關係,但須小心,如果把int跟識別字連結在一起,如inta或intb,編譯器會認為這是額外的識別字名稱,並非我們想要的a或b了。

因為我們的目的是宣告類別Demo2有哪些屬性,也就是先宣告屬性的資料型態,以及屬性的識別字名稱,屬性的值實際是由建構子所賦予,這也是建構子的主要功能之一。

再來看到建構子定義的地方 //這裡定義建構子 publicDemo2(inta,intb){ this.a=a; this.b=b; } 建構子如同方法,但不具有回傳值(returnvalue)型態(type),因為建構子的目的就是建立物件(object),因此無須指明回傳值的型態。

這裡,建構子有兩個參數(parameter),分別是a與b,由於名稱和屬性相同,在建構子後面的大括弧,也就是建構子的程式區塊(block)中,參數a與b作為此區塊的區域變數(localvariable),屬性名稱a與b便無法使用,因此我們利用關鍵字(keyword)this來存取屬性,並把參數指派(assignment)給屬性。

當然,若是屬性名稱與建構子的參數名稱不同,我們可以不用this便可直接存取屬性名稱,例如 //這裡定義建構子 publicDemo2(intc,intd){ a=c; b=d; } 這樣的小程式中,怎麼寫倒是看個人喜好,往後陸續介紹public、private,也就是權限方面的修飾詞(modifier)之後,我們會提供另外一種寫法。

附帶一提,public是公開的意思,private則是私有的意思。

Demo2只有定義一個方法,也就是do_something() //這裡定義方法 publicintdo_something(){ returna+b; } do_something()回傳兩個屬性的相加值,return是關鍵字之一,用來在方法中回傳數值。

這裡+是Java的算術運算子(arithmeticoperator)之一,用來作加法,因此a+b構成一個運算式(expression),運算式會有一個計算結果,return就是回傳這個計算結果。

注意,+是鍵盤上直接打出來的半形字元,非全形字元+。

方法宣告時,除了回傳值型態,就是小括弧中的參數列(parameterlist),若無提供參數,小括弧就應該留空,也就是不填進任何東西,類似的,方法若無回傳值,應該宣告為void,像是main()就宣告成沒有回傳值的void。

我們回到最早的問題,也就是為什麼可以在main()中建立與Demo2相同的物件?其實原因很簡單,就是static的緣故。

static中文稱為靜態的,由於屬性與方法在類別中合稱為成員(member),宣告為static的成員被稱為static成員,static成員屬於類別,非static成員屬於物件。

成員屬於類別跟屬於物件到底有什麼不同呢?差別在,static成員可以以類別名稱呼叫,我們不是已經用過很多個System.out.println()的例子了嗎? System.out.println() out是System類別的static成員,out是個PrintStream型態的物件,而println()為out的非static成員,其為印出字串(string)結尾附加上新行符號的方法。

所以,我們要讓Demo2變成可執行的類別,我們就得替Demo2加上main()方法的定義,由於main()屬於static的成員,static成員不能存取非static成員,這裡所謂的不能,其實是Java的語法規則,所以為了使Demo2可以測試Demo2自己,語法允許我們可以在Demo2的main()中建立Demo2的物件。

有很難懂嗎?如果我們不想用Demo2測試Demo2他自己,那我們就得另寫一個含有main()的類別,如Demo3,然後在Demo3中的main()建立Demo2的物件 //測試Demo2的類別 publicclassDemo3{ publicstaticvoidmain(String[]args){ Demo2demo=newDemo2(11,22); System.out.println(); System.out.printf("a=%d,b=%d\n",demo.a,demo.b); System.out.printf("a+b=%d\n",demo.do_something()); System.out.println(); } } /*《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:Demo3.java 功能:示範Java程式 作者:張凱慶 時間:西元2011年4月*/ Demo3必須和Demo2在相同資料夾內,兩個類別檔案也必須分開編譯(compile)。

嗯,Demo2、Demo3等等講了這麼多名稱,這些都是識別字,我們接下來看看變數命名規則吧! 中英文術語對照 類別class 屬性field 建構子constructor 方法method 宣告declare 物件object 識別字identifier 回傳值returnvalue 型態type 物件object 參數parameter 區塊block 區域變數localvariable 關鍵字keyword 指派assignment 修飾詞modifier 算術運算子arithmeticoperator 運算式expression 參數列parameterlist 成員member 字串string 編譯compile 您可以繼續參考 基礎篇 認識Java語言 如何編譯與執行 基本資料型態、物件與參考 物件的模板,類別 變數命名規則 運算式與陳述 選擇 迴圈 相關目錄 回Java入門指南 回Java教材目錄 回首頁 參考資料 TheJavaTMTutorials:GettingStarted TheJavaTMTutorials:LearningtheJavaLanguage TheJavaTMTutorials:EssentialClasses TheJavaLanguageSpecification,ThirdEdition 本文於2013年1月訂正 以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook分享到Pinterest 標籤: Java入門指南, Java教學 2則留言: Unknown 提到... out應該是System類別的"物件"而不是System類別的成員 2013年10月22日凌晨4:09 KaichingChang 提到... 類別中的field與method合稱為成員沒錯,當然這裡也有說明out是PrintStream型態的物件^_^ 2013年10月22日下午1:44 張貼留言 較新的文章 較舊的文章 首頁 訂閱: 張貼留言(Atom) 搜尋此網誌 RSS訂閱 連結到本站 [email protected] 重要說明 本站教材的設計目標是以高中生到大一程度或程式設計的完全新手為主,尤其《入門指南》系列帶領讀者開發簡單的GUI軟體,簡言之目標為學習開發軟體的流程,其作為學習程式語言的第一本書,而非最後一本書,建議您完成《入門指南》後繼續找尋其他書籍研讀程式設計的技巧及程式語言的細節,語言細節部分也可先參考本站的《快速導覽》或《速查手冊》,謝謝。

本站電子書 GooglePlayBooks 如何自學寫作V1.00 如何自學程式設計V1.00 如何自學程式設計第二部分V2.00 C的一堂課V2.00 C速查手冊V1.00 Python的一堂課V2.00 Python新手之旅V1.10 Python入門指南V4.00 Python速查手冊V2.00 C++入門指南V2.21 C++速查手冊V1.02 Java入門指南V2.11 Swift入門指南V3.00 HTML的一堂課V5.00 CSS的一堂課V1.00 EPUB的一堂課V1.00 iBooksStore 如何自學程式設計V1.00 Python的一堂課V1.00 Python新手之旅V1.10 Python入門指南V2.31 C++入門指南V2.21 C++速查手冊V1.02 Java入門指南V2.11 Swift入門指南V3.00 EPUB的一堂課V1.10 Readmoo 如何自學寫作V1.00 如何自學程式設計V1.00 C速查手冊V1.00 Python新手之旅V1.10 Python入門指南V4.00 Python速查手冊V2.00 C++入門指南V2.20 C++速查手冊V1.02 Java入門指南V2.10 Swift入門指南V3.00 樂天kobo 如何自學程式設計V1.00 如何自學程式設計第二部分V2.00 C的一堂課V2.00 C速查手冊V1.00 Python的一堂課V2.00 Python新手之旅V1.10 Python入門指南V4.00 Python速查手冊V2.00 C++入門指南V2.21 C++速查手冊V1.02 Java入門指南V2.11 HyRead Python的一堂課V1.00H Python新手之旅V1.00H Python入門指南V2.00H C++入門指南V2.00H C++速查手冊V1.00H Java入門指南V2.00H Swift入門指南V1.00H 印客邦-紙本書 如何自學程式設計(合訂本)V2.00 C++入門指南V2.30(附C的一堂課) C++速查手冊V1.20 Java入門指南V3.00 Python入門指南V4.10 Swift入門指南V3.00



請為這篇文章評分?