今天學習了thinking in java的第三四五章,下面是所有的要點:
第三章:
第三章講的是操作符啡捶,操作符分為幾種但骨,最常見的就是賦值操作符,一般從右側把數(shù)據(jù)傳遞給左邊的變量拇舀。在不涉及類中數(shù)據(jù)傳遞時,傳遞的數(shù)據(jù)都存在于棧中蜻底,簡單類型則傳遞值骄崩,引用類型則傳遞引用(個人感覺是數(shù)據(jù)在堆中的地址)些椒;另外函數(shù)傳參也是這樣吏夯,所以有時對數(shù)組和對象要慎重一些;
除了賦值操作符后术奖,最常見的就是四則運算了站楚。+-*/%五種操作符脱惰,有他們自己的優(yōu)先級判斷,再加上括號窿春,這些都是很簡單的運算拉一;對于 n=++i 和 m=i++,他們都對i進行了+1運算旧乞,但是n的值是i+1舅踪,m的值是i;
對于random類來說良蛮,new對象時后面不提供參數(shù)則以時間為種子,每次生成不一樣的隨機數(shù)序列悍赢,而后面提供參數(shù)的話决瞳,每一次生成的都是一樣的隨機序列。用nextInt()函數(shù)生成int隨機數(shù)左权,括號內代表隨機數(shù)的范圍皮胡;
按位操作符和移位操作符都不是很會用,先留個坑赏迟;
另外類型之間的轉換屡贺,都是二進制位的擴展和舍棄。所以有的時候轉換類型會造成值的變化锌杀,要很小心甩栈;
第四章:
控制程序流程的方式只有那幾種,for糕再、while量没、do-while、switch突想、break殴蹄、continue究抓;在java中不能使用goto語句,但可以用goto語句的標簽配合break和continue來進行一波跳轉袭灯;
一個for循環(huán)的變種:foreach刺下;語法為:for( int i : sc){ print ( " number " + i ); }和python中的循環(huán)類似;這種在后面?zhèn)鬟f不定參數(shù)時很有用稽荧;
第五章:
第五章主要講解的是類和對象初始化時的運行狀態(tài)橘茉,這個很重要;
類在創(chuàng)建對象時用構造器(構造函數(shù))來創(chuàng)建蛤克;有時可以對構造器進行重構來滿足各種需求捺癞;構造器可以被其他構造器調用,但是這個構造器在代碼中必須是第一個構造器构挤,并且只能調用這一個髓介;
this在對象的函數(shù)中可以代表該對象,在內部函數(shù)的參數(shù)和內部變量相同時可以用this來標記筋现;
finalize()函數(shù):在對象被消除前調用的函數(shù)唐础,主要是進行一些毀壞前的工作,例如釋放某些內存矾飞,驗證該對象是否滿足被釋放的條件一膨;或者是該函數(shù)調用外部代碼所申請的內存,例如malloc,這樣java的回收機制是不能回收這部分內存洒沦,所有我們要自己調用free函數(shù)釋放豹绪;
垃圾回收的兩種方式:1.標記-清掃 模式:當垃圾較少的情況下,可以直接清除申眼;2.停止-復制 模式:這種情況下瞒津,垃圾比較多,則按照對應的引用表括尸,把現(xiàn)在現(xiàn)存的數(shù)據(jù)移動到另一大塊堆內存中整齊存放巷蚪,再更新引用表,這樣就可以對舊內存進行清理了濒翻;一般是兩種交替使用屁柏;
在對象初始化時,若沒有賦值有送,則它會有一個默認值淌喻,boolean為false,其他的類型全為0雀摘,引用類型為null似嗤;在類中,變量的初始化順序是先初始化變量届宠,再調用構造函數(shù)烁落;
對于靜態(tài)變量和靜態(tài)函數(shù)乘粒,他們都只會初始化一次,不管是在創(chuàng)建對象時還是直接用類調用靜態(tài)方法時伤塌;在需要初始化靜態(tài)變量時灯萍,類中初始化數(shù)據(jù)的順序是:靜態(tài)變量/快-》普通變量/塊-》構造器;
枚舉類型:enum abc{1,2,3,4,5}每聪;賦值: abc x = abc.3旦棉; ?可以用for(abc s : abc.values()){ print ( s + " and " s.ordinal );}其中ordinal是初始化的序號,由0開始药薯;
對于可變參數(shù)列表绑洛,用……來實現(xiàn)數(shù)組長度的可變,如果再用萬能類作為實參童本,則這個函數(shù)可以接受任何混合類型的數(shù)組真屯;所有有的時候,由于需要進行重構穷娱,一般在開頭添加一個帶類型的變量绑蔫,用來實現(xiàn)差異化完成方法重構;