java 板


LINE

※ 引述《SuperNeo (潜水初号机)》之铭言: : ∣________∣ new : (指标?)c1--> ∣_Circle_∣--------- : ↑ ∣________∣ ∣ : ∣ ∣________∣ ∣ : ∣ ↓ : ∣ Circle的物件 : ∣ ________ : ∣ | | : ---------------------| | : 把Circle物件指向c1 (=?) |________| : 我理解是这个样子 不知是不是了-_-" 虽然你想画图,但我觉得你的观念好像有严重的错误。囧。 下面是非常低阶的碎碎念,讲的是现在市面上一般的程式书籍愈来愈少提到的 部份,至於看不看得完,看完後有没有用,就要看造化了。XD 我只能说,自从我建立了以下的 Mental Model 後,基本上学任何 OO 或 程序导向语言都没遇到过什麽困难(学 functional programming 的时候倒 是问题一堆),所以有用没用就要看个人了。 看完一整个讨论串,我先说结论吧: 1. 个人认为你需要的是一本入门的程式设计书籍,一整个讨论串下来感觉你 很多基本观念都没有就想一步登天搞到进阶的观念。 2.老实说,我还是觉得把基础功练好一点比较实在。orz... 什麽是基础功? * 小人电脑 / Native Binary / VM / Bytecode / Memory Model 间的关联 * Pointer (真正可以给你胡乱操作的指标,C 是最好的范例,但也最让人害怕) * 如果你想学任何 OO 语言,先搞懂类别和物件的关联吧 虽然就算讲到嘴破了,还是有很多人觉得不懂第一点和第二点的那一大堆东 西无伤大雅,一样可以写程式。但我还是坚持这是基础中的基础,搞懂了学 什麽语言都不会有大问题。 回到正题,先不论多型的部份(你的程式码里 Shape a = new Circle 的那一 部份),单看下面这只完整的 Java 程式好了。 ===== ClassExample.java ===== 1 public class ClassExample 2 { 3 int x = 3; 4 5 public static void main (String [] args) 6 { 7 int stackVar = 10; 8 9 ClassExample ex = new ClassExample (); 10 System.println ("ex.x = " + ex.x); 11 12 return; 13 } 14 } ============================ 我知道,接下来讲的东西对很多初学者来说很琐碎,但我认为从一开始就建立 正确并且一致的 Mental Model 会让以後的学习顺利的很多,很多进阶的观念 也比较容易吸收。 这只程式在做什麽?『建立一个 ClassExample 物件,并且把这个物件里面的 x 成员函数印出』,好简单的一句话,好复杂的程式。 首先,你要了解一个程式可以大致区分成两个部份:CODE 与 DATA,CODE 指 的是程式的『指令』,也就是大致相当於你写出来的程式码,告知电脑每一步 该如何做。 这个部份是永恒不变的,不管你执行几次,只要你没更动过你的程式码,就永 永不会变。 DATA 是你程式里放在『记忆体』里的『资料』的部份,是会随着环境和你程 式执行的过程中而更动的,例如程式里的『变数』、『物件』都是属於 DATA 的部份。 举例来说 x = 10 这个叙述,『把 x 指定成 10』的动作是『CODE』,而 x 就 是 DATA,而这个 DATA 是放在记忆体中的。 『记忆体』,关键字出来了,所有『变数』、『物件』都是放在记忆体中的。 但『记忆体』并没那麽简单,『记忆体』又可以分成两部份,一个是 stack,另 一个是 Heap ,请简单记住以下几个观念: 1. Java 里所有的区域变数、函数的所传入的参数都放在 Stack。 2. Stack 的生命周期只有从『进入函式』到『离开函式』这段期间。 3. 所有物件都在 Heap 以上是关於 Stack 和 Heap 的原则,至於到底什麽是 Stack 和 Heap,请 Google 一下呗,了解这两者是很有帮助的。 接下来,要了解的是关於『变数』这回事,Java 里你会在函式里看到三种型态的 变数宣告,分别如下: 1 void func () 2 { 3 int x = 10; // Type 1 4 Object object; // Type 2 6 int [] array; // Type 3 7 Object [] array2 // Type 4 8 9 object = new Object (); 11 array = new int[2] 11 array2 = new Object[2] 12 } 第一种(第三行的部份),资料型态小写开头的,那叫『基础资料型态』,包括 内建的 int/double 这种东西,遇到这种的请记住这个口诀:『Stack 上长了一 块叫做 x 的东西,他的内容是整数十(或浮点数 3.14 等)』。 第二种(第四行的部份),资料型态是大写开头的,也就是 Class 的部份,注 意,这是陷阱,请谨记这个口诀:『Stack 上长了一个叫做 object 的东西, 他的内容是「记忆体地址」,而且这个地址应该指到 Heap 里面一个类别为 Object 的物件。』 第三种是第二种的特例,因为实际上 Java 的阵列也是物件,所以请记得以下的 口诀:『Stack 上长了一个叫做 array 的东西,他的内容是记忆体地址,而且这个 地址应该指到 Heap 里面一个阵列物件,而这个阵列里面的每个原素应该要是 int。』 第四种又是第三种的特例,不同的地方在於阵列里每个原素存的也是『记忆体地 址』,口诀:『Stack 上长了一个叫做 array2 的东西,他的内容是记忆体地址, 而且这个地址应该指到 Heap 里面一个阵列物件,而这个阵列里面的每个原素也 是一个记忆体地址,而这些记忆体地址应该指到类别为 Object 的物件。』 ========================================================================= 请覆诵: Type 1:『Stack 上长了一块叫做 x 的东西,他的内容是整数十。』 Type 2:『Stack 上长了一个叫做 object 的东西,他的内容是「记忆体地址」, 而且这个地址应该指到 Heap 里面一个类别为 Object 的物件。』 Type 3:『Stack 上长了一个叫做 array 的东西,他的内容是记忆体地址,而且 这个地址应该指到 Heap 里面一个阵列物件,而这个阵列里面的每个原 素应该要是 int。』 Type 4:『Stack 上长了一个叫做 array2 的东西,他的内容是记忆体地址,而且 这个地址应该指到 Heap 里面一个阵列物件,而这个阵列里面的每个原 素也是一个记忆体地址,而这些记忆体地址应该指到类别为 Object 的 物件。』 PS. 上述口诀里的『应该』都是有理由的,请不要省略,将来遇到多型的部份就不 会觉得奇怪了! ========================================================================= 累了,等下再继续写画图的部份。 -- ~ 白马带着她一步步地回到中原。白马已经老了,只能慢慢地走, 'v' Brian Hsu 但终是能回到中原的。江南有杨柳、桃花,有燕子、金鱼…… // \\ ( 坟 墓 ) /( )\ 但这个美丽的姑娘就像古高昌国人那样固执。 【白马啸西风】 ^`~'^ http://bone.twbbs.org.tw/blog 『那都是很好很好的,可我偏不喜欢。』 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.199.114 ※ 编辑: brianhsu 来自: 59.120.199.114 (01/01 20:01)
1F:推 dendrobium:好长的口诀XD 01/01 20:12
2F:→ dendrobium:建议不要几乎整段都画重点,这样等於没画...而且很伤眼 01/01 20:14
※ 编辑: brianhsu 来自: 59.120.199.114 (01/01 20:24)
3F:推 ogamenewbie:其实我觉得整段画有他的优点在, 但是颜色的确有点太亮 01/01 20:25
4F:→ johnhmj:Stack长了一块青春痘… XD 哈哈哈… 01/01 20:39
5F:→ adrianshum:我觉得先不需要谈stack和heap, 不然太多恐怕吸收不了 01/01 20:39
6F:→ brianhsu:先谈 Stack/Heap 才有办法建立一致,将来也不会变的 01/01 20:43
7F:→ brianhsu:Mental Model 啊,这是两难。XD 01/01 20:44
8F:→ brianhsu:例如 scope,GC 等,都和是在 Stack 或 Heap 有关的。 01/01 20:46
9F:推 vencees:推好长的口诀XD 01/01 23:11
10F:→ brianhsu:独孤九剑光总诀式就三千字啦!这一点都不长。XD 01/01 23:13
11F:推 papayamilk:推 04/20 20:31
12F:→ papayamilk:推 04/20 20:32







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