1、對(duì)象的存儲(chǔ):Java中所有對(duì)象的存儲(chǔ)空間都是在堆中分配的,但是這個(gè)對(duì)象的引用卻是在堆棧中分配,也就是說(shuō)在建立一個(gè)對(duì)象時(shí)從兩個(gè)地方都分配內(nèi)存,在堆中分配的內(nèi)存實(shí)際建立這個(gè)對(duì)象,而在堆棧中分配的內(nèi)存只是一個(gè)指向這個(gè)堆對(duì)象的指針(引用)而已。堆的特點(diǎn)是靈活性,但為此犧牲了高效性,可以在運(yùn)行時(shí)動(dòng)態(tài)地分配存儲(chǔ);堆棧的特點(diǎn)是高效性,但缺乏靈活性,在編譯時(shí)刻必須知道所要分配的空間大小。堆像個(gè)大饅頭,可以根據(jù)你的食量隨便吃,吃飽了算;堆棧像是吃大鍋飯,每個(gè)人都是定食定量的,你必須告訴廚子你的飯量,廚子據(jù)此做飯,然后你們就排隊(duì)打飯吧。它們沒(méi)有孰優(yōu)孰劣之分,各自不同特點(diǎn)有不同的應(yīng)用。

          2、Java的設(shè)計(jì)在很多方面都基于安全的考慮,減少語(yǔ)言上的混亂,所以喜歡的人很多,屬于大眾情人型。如:運(yùn)行時(shí)數(shù)組下標(biāo)檢查、嚴(yán)格的類(lèi)型檢查,還有消除變量隱藏語(yǔ)法。
          int x = 10;
          {
              int x = 12;  //不合法的!想想看,這種變量隱藏是多么危險(xiǎn),多么不容易察覺(jué),而且多么多余!
          }
          有人說(shuō),Java是C++ 再++ 再--,即Java = C++++--。加入了C++沒(méi)有的新特性,消除了C++混亂危險(xiǎn)的特性。《Thinking in Java》中總是拿C++來(lái)做對(duì)比,開(kāi)涮,大家別忘了,他也是那本經(jīng)典的《Thinking in C++》的作者!最終投靠到我們Java陣營(yíng)里來(lái)了,呵呵。

          3、static方法常常拿來(lái)做“牧羊人”的角色,負(fù)責(zé)看護(hù)與其隸屬同一類(lèi)型的實(shí)例群。看看main方法就可以理解這一含義了。

          1、邏輯表達(dá)式的短路會(huì)獲得潛在的性能提升,有點(diǎn)智能了,不會(huì)傻乎乎地一算到底了。利用這點(diǎn)能寫(xiě)出高效的代碼,如:用||連接的表達(dá)式,把為true可能性大的語(yǔ)句放在前面;用&&連接的表達(dá)式,把為false可能性大的語(yǔ)句放在前面。

          2、從按位操作符可以看出Java的歷史痕跡,一個(gè)跨平臺(tái)的語(yǔ)言怎么會(huì)牽扯到位操作呢?Java最初是用來(lái)開(kāi)發(fā)嵌入式機(jī)頂盒的。j2me嵌入式開(kāi)發(fā)也是Java的強(qiáng)項(xiàng)之一,老本行嘛。現(xiàn)在買(mǎi)手機(jī)基本都會(huì)看支持Java嗎?Java無(wú)處不在地滲透著。

          3、在作者的工具箱中有這樣兩個(gè)工具printBinaryInt()和printBinaryLong(),并且給出了一個(gè)很復(fù)雜的實(shí)現(xiàn)。這里我給用Java的類(lèi)庫(kù)給簡(jiǎn)化一下吧。
              static void printBinaryInt(String s, int i) {
                  System.out.println(s + ", int:" + i + ", binary:");
                  System.out.print("     ");
                  System.out.print(Integer.toBinaryString(i));
                  System.out.println();
              }
          當(dāng)然作者的目的是講解位操作。

          4、字符串的連接。
          int i=1,j=2,k=3;
          System.out.println(i+j+k);
          輸出了6。
          int i=1,j=2,k=3;
          System.out.println(""+i+j+k);
          輸出了123。有趣吧?這是因?yàn)閺淖蟮接业倪\(yùn)算順序。

          Feedback

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-16 22:03 by zhrb
          new一個(gè)數(shù)組,數(shù)組變量是存放在棧,數(shù)組本身是不是存放在堆中呢?
          還有就是是不是有一個(gè)叫做方法區(qū)的地方?對(duì)象在堆區(qū),那么類(lèi)是在什么區(qū)?

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 09:38 by 翔南
          @zhrb
          棧存的是引用,堆存的是實(shí)質(zhì)的東西
          "new一個(gè)數(shù)組,數(shù)組變量是存放在棧,數(shù)組本身是不是存放在堆中呢?"
          是對(duì)的
          但第二個(gè)問(wèn)題我就不知道了

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 09:39 by 翔南
          3、static方法常常拿來(lái)做“牧羊人”的角色,負(fù)責(zé)看護(hù)與其隸屬同一類(lèi)型的實(shí)例群。看看main方法就可以理解這一含義了。

          這是什么意思...
          沒(méi)明白

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 10:26 by tomlove
          為什么沒(méi)有一個(gè) 留言板 呢?

          搞的每次留言都在評(píng)論里面~~~!!!

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 10:28 by tomlove
          出道題,大家研究一下:

          一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地時(shí),共經(jīng)過(guò)多少米?第10次反彈多高?

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 11:31 by tomlove
          樓主在csdn上有空間沒(méi)?

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 12:58 by zhrb
          可能是類(lèi)似工廠模式的東西吧,你可以查查相關(guān)的資料@翔南

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 18:03 by Raylong
          @zhrb
          數(shù)組對(duì)象的引用在棧里,數(shù)組對(duì)象本身在堆中。java中的類(lèi)是動(dòng)態(tài)加載的,需要的時(shí)候才加載,這樣可以節(jié)省內(nèi)存空間。
          下面是網(wǎng)上找到的資料,共同學(xué)習(xí)一下: 在Java虛擬機(jī)中,被裝載類(lèi)型的信息存儲(chǔ)在一個(gè)邏輯上被稱(chēng)為方法區(qū)的內(nèi)存中。當(dāng)虛擬機(jī)裝載某個(gè)類(lèi)型時(shí),它使用類(lèi)裝載器定位相應(yīng)的class文件,然后讀入這個(gè)class文件,然后將它傳輸?shù)教摂M機(jī)中,緊接著虛擬機(jī)提取其中的類(lèi)型信息,并將這些信息存儲(chǔ)到方法區(qū)。該類(lèi)型中的類(lèi)(靜態(tài))變量同樣也是存儲(chǔ)在方法區(qū)中。方法區(qū)的大小不必固定,可以根據(jù)需要?jiǎng)討B(tài)調(diào)整。方法區(qū)也可以被垃圾收集,因?yàn)樘摂M機(jī)允許通過(guò)用戶定義的類(lèi)裝載器來(lái)動(dòng)態(tài)擴(kuò)展Java程序,因此,一些類(lèi)也會(huì)成為“不再引用”的類(lèi)。 原文參見(jiàn):http://blog.csdn.net/mimicimim/archive/2007/10/08/1815880.aspx

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 18:04 by Raylong
          @翔南
          第二個(gè)問(wèn)題請(qǐng)參看:http://blog.csdn.net/mimicimim/archive/2007/10/08/1815880.aspx
          我也是第一次知道方法區(qū),大家一起學(xué)習(xí)一下吧。

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 18:09 by Raylong
          @翔南
          我們一般會(huì)寫(xiě)public static void main(String[] args){}函數(shù)嗎?通常我們用這個(gè)main函數(shù)進(jìn)行該類(lèi)的測(cè)試,主要當(dāng)然是測(cè)試方法了,方法里面有實(shí)質(zhì)的算法,而且每個(gè)類(lèi)都寫(xiě)一個(gè)main函數(shù)測(cè)試。牧羊人就是這個(gè)意思吧。另外在Java類(lèi)庫(kù)中的許多工具都是static,可以拿來(lái)就用,不必生成對(duì)象,這正是靜態(tài)方法,也就是類(lèi)方法的作用吧。

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 18:10 by Raylong
          @tomlove
          有留言板啊,可是沒(méi)人往里面寫(xiě)呢……

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 19:00 by Raylong
          @tomlove
          這個(gè)是我寫(xiě)的,初步測(cè)試了一下,還沒(méi)學(xué)junit所以測(cè)試得不夠全面,結(jié)果不知對(duì)不對(duì)……
          public class BallTest {
          // 球的初始高度
          private double height;

          // 球第N次彈起的高度
          private double bounceHeight;

          // 球彈落過(guò)程走過(guò)的路程
          private double bounceDistance;

          // 帶設(shè)置球初始的高度的構(gòu)造函數(shù)
          public BallTest(double height) {
          this.height = height;
          bounceDistance = height;
          bounceHeight=height;
          }

          // 默認(rèn)構(gòu)造函數(shù),就是你要求的100
          public BallTest() {
          height = 100;
          bounceDistance = height;
          bounceHeight=height;
          }

          // 計(jì)算球彈落過(guò)程走過(guò)的路程,參數(shù)是你說(shuō)的落地的次數(shù)
          public double bounceDistance(int dropGroundTimes) {
          double distance = height;
          if (dropGroundTimes == 1) {
          return bounceDistance;
          } else if (dropGroundTimes > 1) {
          for (int i = dropGroundTimes; i > 1; i--) {
          bounceDistance += distance;
          distance /= 2;
          }
          return bounceDistance;
          } else {
          System.out.println("illegal number");
          return 0;
          }
          }

          // 計(jì)算球第N次彈起的高度
          public double bounceHeight(int dropGroundTimes) {
          if (dropGroundTimes > 0) {
          for (int i = dropGroundTimes; i > 0; i--) {
          bounceHeight /= 2;
          }
          return bounceHeight;
          } else {
          System.out.println("illegal number");
          return 0;
          }
          }

          public static void main(String[] args) {
          BallTest ball = new BallTest();
          System.out.println(ball.bounceDistance(10));
          System.out.println(ball.bounceHeight(10));
          }

          }

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 19:02 by Raylong
          @tomlove
          我的firefox一進(jìn)csdn就假死,不知道為什么,所以不在csdn了,你可以看出我是多么喜歡ff了吧 呵呵

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 19:05 by zhrb
          @Raylong
          謝謝你的資料,不知道 這個(gè)所謂的方法區(qū)是不是可以和堆區(qū)、棧區(qū)并列的概念。呵呵

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 19:21 by Raylong
          @zhrb
          呵呵 我在考慮是不是要深入地研究jvm的機(jī)制,不然很多概念都是模糊的。
          昨天看了一段教程,里面提到移位運(yùn)算。“移位運(yùn)算的效率要比正常的乘法要高。所以遇見(jiàn)乘以或者除以2的整數(shù)次冪時(shí),可以用移位操作。”作者說(shuō),他的一個(gè)朋友的同事是清華的研究生,他在做乘除法就用移位操作。細(xì)節(jié)地方才能體現(xiàn)高手高明的地方啊!

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-17 23:23 by zhrb
          很多常用技巧是挺不錯(cuò)的,上回看了一些java本身常用類(lèi)庫(kù)編寫(xiě)的代碼,那個(gè)技巧用的真好.呵呵
          @Raylong

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-18 07:35 by Raylong
          @zhrb
          是啊,常看看庫(kù)的源文件對(duì)編程是很大的提高呢,網(wǎng)上找的代碼質(zhì)量參差不齊,沒(méi)有保證。Java類(lèi)庫(kù)有些東西的算法是許多專(zhuān)家一起研究的結(jié)果,比如生成隨機(jī)數(shù)。很高深有點(diǎn)看不懂 呵呵

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-19 10:56 by 翔南
          謝謝Raylong 和zhrb的講解
          看來(lái)偶要好好學(xué)習(xí)一下JVM的運(yùn)行機(jī)制了
          要不好多東西雖然會(huì)用,但不知道為什么要這么用..

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-19 12:25 by tomlove
          @Raylong
          呵呵,寫(xiě)的不錯(cuò)了阿。我在 第n次反彈多高?
          的算法和你的一樣,你的更簡(jiǎn)潔一些~~~

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-20 11:19 by Raylong
          @tomlove
          simple is good!呵呵 簡(jiǎn)單就不容易出錯(cuò)!

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-20 14:33 by tomlove
          @Raylong
          我是用 等比數(shù)列 求N項(xiàng)和的公式 和 等比數(shù)列的N項(xiàng)公式作的

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-20 15:40 by Raylong
          @tomlove
          貼出來(lái)看看吧,程序語(yǔ)言只是工具,要想高效的算法,還得看數(shù)學(xué)方面。

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-20 20:58 by tomlove
          呵呵,我只是在紙上寫(xiě)了一下算法,沒(méi)有編譯。----- :( 是不是很懶? 的向你學(xué)習(xí)了

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-10-21 00:31 by zhrb
          @tomlove
          其實(shí)我也覺(jué)得寫(xiě)一個(gè)公式就好了...
          類(lèi)似于高中常作的題目一樣

          # re: 讀書(shū)筆記《Thinking in Java》-第二、三章-07/10/16  回復(fù)  更多評(píng)論   

          2007-12-08 15:38 by wǒ愛(ài)伱--咾婆
          你駁殼做的..相當(dāng)?shù)牟诲e(cuò)哦..呵呵..Java真的很棒...學(xué)習(xí)啊轉(zhuǎn)了你寫(xiě)的那經(jīng)典文章....謝謝啊
          主站蜘蛛池模板: 唐河县| 哈密市| 肥乡县| 云浮市| 广汉市| 漯河市| 彰化市| 紫阳县| 虹口区| 南昌市| 灵山县| 合作市| 库车县| 内丘县| 临安市| 大竹县| 南川市| 枣阳市| 望谟县| 龙山县| 莱芜市| 石狮市| 静安区| 甘肃省| 防城港市| 南充市| 天气| 沙湾县| 枣阳市| 凤城市| 陈巴尔虎旗| 古丈县| 安国市| 莆田市| 洛扎县| 连山| 灯塔市| 竹溪县| 定边县| 东辽县| 天台县|