java 板


LINE

醜話先說在前面 基本上這篇文章違反了版規 5 然後各種類型的錯字有點多 (我記得很久以前版規有要求錯字不能太多,忘記啥時候取消這條了) 不過我沒有要開罰的意思 [茶] ※ 引述《namahanka (生半可)》之銘言: : 小弟初學java,爬了文還是弄不清"."的作用 我比較好奇你怎麼爬文的 @___@ 這個 search 條件超難下的阿... 難道每篇文章都看過一次嗎? [炸] : 比方說 : class A{ : public int b; : public void c(){ : } : } : A.b : A.c() 你的程式碼要寫完整,不是 `A.b` or `A.c()` 在這個 case 中你要寫 A foo = new A(); //foo.b //foo.c() 當然在這種情況下你可以寫 `A.b` 跟 `A.c()` class A{ public static int b; public static void c() {} } 不過你先不要在意這個部份,因為跟你的問題沒有直接關聯 : 上面"."後面的b及c()是指A類別的成員變數及方法 : 那A.c().toString()的"."也是指A.c()的成員方法嗎? ==.==== 這邊又是另一個錯誤 你給的程式碼,`c()` 沒有回傳值,基本上不可能呼叫 `toString()` 請注意你在發問的時候,程式碼最好 follow [SSCCE] 原則 不然我(們)會不知道你到底是亂寫程式碼所以搞不懂 還是真的搞不懂 [SSCCE]: http://sscce.org : A.c()會為何能調用toString()而b.toString卻不行? ==.==== 這邊又是一個需要 SSCCE 的經典例子 `foo.toString()` 跟 `foo.toString` 意義完全不同 在決大多數的程式碼寫 `foo.toString()` 不會出錯 而 `foo.toString` 通常會炸光光 這樣說或許有老王賣瓜之嫌疑 但是請記得... 龜毛為學好程式(基礎)之本 尤其是你在學語法基礎概念的時候 : 搞不懂… : 甚至看過 xxx.toString().toString().toString()...這是為什麼? 我重新來一次,以下用我的程式碼討論 雖然我不是什麼大師,但是至少用我的方式發問 大抵上到哪裡問什麼問題都不會被酸 (除非你自稱 Java 高手 or 程度可以接案的人 lol) 不過更有可能的... 你就不用問問題了 [無誤] ======== 模擬原 po 問問題開始 ======== 我搞不太懂 Java 中關於「.」的問題 比方說這個程式碼 //FooClass.java public class FooClass { public int intValue; public String getString(){ return "fooClass"; } public int getInt() { return 0; } public WtfClass wtfValue = new WtfClass(); public FooClass() {} //PS 註:其實可以省略 public static void main(String[] args) { FooClass foo = new FooClass(); //這幾行沒有出錯 System.out.println(foo.intValue); System.out.println(foo.getInt()); System.out.println(foo.getString()); System.out.println(foo.getString().toString()); System.out.println(foo.wtfValue); System.out.println(foo.wtfValue.toString()); //這個就錯了 System.out.println(foo.intValue.toString()); System.out.println(foo.getInt().toString()); System.out.println(foo.wtfValue.toString); //PS 註:那個 void method 還要求 toString() 我就懶得吐槽了 } } class WtfClass { WtfClass() {} //PS 註:其實可以省略 } 錯誤是發生在用 javac.exe compile 的時候 PS 註:在 Eclipse 這類 IDE 中是會有紅色 error 不讓你執行 FooClass 錯誤訊息是 ,...... [略] //PS 註:我沒有實際測試,所以不知道實際錯誤訊息 [逃] 可是我不懂這錯誤訊息 //PS 註:最好先丟 Google,然後說你不懂某個 link 的哪個段落 可以請各位前輩幫忙突破盲點嗎? ======== 模擬結束分隔線 ======== 說真的,這樣子通常問題就自己解決了 不過,沒關係反正閒著也是閒著 我還是來解釋一下... 我的程式碼為甚麼這樣寫 我覺得如何測試自己的疑惑比知道原因還重要 首先,我發現 `foo.intValue` 跟 `foo.getString()` 不會出問題 但是 `foo.intValue.toString()` 就會出問題 嗯... 一個是成員變數、一個是方法(好不習慣這種講法) 所以試試看 `foo.getString().toString()` → 成功 那麼突發奇想(aka 對初學者來講有點難想到 XD)試試看 `foo.getInt().toString()` → 失敗 那麼測試到這邊,基本上已經可以排除「成員變數 vs 方法」的差異問題了 好像只要碰到 int 就會炸錯誤 那麼我就會繼續去 try 看看其他我知道可以拿來宣告變數的東西 `WtfClass` 好像也不會有這個困擾 但是 double、float、long 這些就會炸錯誤 (我上面程式碼沒有寫是因為懶惰... [逃]) 然後我就會死馬當活馬醫去 google 看看 嗯... 就用「java int double float long」 結果頭兩個連結的標題就出現很奇怪的東西 Java's Primitive Data Types - Cafe au Lait Java Primitive Data Types - JavaCamp.org 等等,不是說 Java 當中什麼都是物件嗎? 於是我至少知道一個關鍵字可以繼續 google (基本上錯誤訊息應該就會告訴你方向了) 就是 Java Primitive Data Type 看完那兩個連結(或是重新 google 中文資料) 大抵上到這邊,問題就會解決了 坦白說,要說我會什麼東西,我大概就是會這些 跟那種從 compiler 理論 or spec 開始讀起的 Java 高手不太一樣 我就是用這種方式學會、了解 Java 的 所以太難的東西我都不會,充其量就是能硬幹解決一些問題 好,如果上面這些你都不想知道 那我只能很怨歎又很可悲的直接告訴你答案: int 是 primitive data type,他不是物件 所以自然無法呼叫方法 or 存取成員變數 `foo.getString()` 對得到一個 `String` 物件 `foo.wtfValue` 是 `WtfClass` 物件 凡是物件都繼承自 `java.lang.Object` 所以自然也就擁有 `java.lang.Object` 有的 `toString()` 如此一來,`foo.wtfValue.toString().toString()` 為甚麼不會出錯 自然也就很清楚明瞭了 ======== 最後,請容許我很不要臉地自己 m 自己的文章 [核爆] -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.23.165
1F:→ DeathWatch:謝主隆恩 04/27 02:15
2F:推 fr373969:板主真是好人~ 04/27 02:29
3F:推 kurakidream:推推 04/27 02:51
4F:推 namahanka:驚! 肅然起敬 04/27 17:33
5F:→ namahanka:看到版大鉅細靡遺的解說,豁然開朗,真是謝謝了!!! 04/27 17:35
6F:推 gmoz:nice 講的好詳細 04/27 18:24
7F:→ andrew43:真是個好人! 發你張卡. 04/29 05:50
8F:推 No:這樣的思考推論方式對初學程式很有幫助 04/29 23:22
9F:推 pkmilk:推~ 05/05 20:46







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP