《Java編程思想》學習記錄(一)

20170409

1、每個對象都是某個類的一個實例

2、當將對象引用置入容器時,它必須被向上轉型爲Object,所以有了範型(爲什麼不寫成泛型o(╯□╰)o)

20170410

1、擁有一個引用,並不一定需要有一個對象與它關聯

2、【對象引用】存放在【棧區】,【Java對象】存放在【堆區】

3、

	{
		String s = new String("a string");
	}// End of scope

引用 s 在作用域終點就消失了,然而,s 指向的 String 對象仍繼續佔據內存空間

 

4、如果字段(類裏面的)是對某個對象的引用,那麼必須初始化該引用,以便使其與一個實際的對象(使用 new 來實現)相關聯

但如果字段是基本數據類型,即使沒有初始化,Java也會確保它獲得一個默認值(方法中的變量不是字段, int x ,x 可能爲任意值)

5、java方法傳遞的參數,除了基本類型外,傳遞的都是對象引用

20170411

1、一個static字段對每個類來說都只有一份存儲空間,而非static字段則是對每個對象有一個存儲空間

 

//今天看到的方法
//查看屬性
System.getProperties().list(System.out);

 

20170412

1、基本類型存儲了實際的數值,而非指向一個對象的引用

2、(敲黑板,重點)==和!=比較的是對象的引用,如果想比較兩個對象的實際內容是否相等,必須使用所有對象都適用的特殊方法equals()(但這個方法不適用於基本類型)

 

//今天看到的方法
//生成隨機數
Random.nextInt();
Random.nextFloat();
Random.nextLong();
Random.nextDouble();

 

20170415

爲什麼有2天沒更,因爲看《人民的名義》去了。。。全書855頁,目前到了第53頁,繼續哈。。。

1、字符串操作符有一個很有趣的行爲(書上說的有趣/(ㄒoㄒ)/~~)如果表達式以一個字符串起頭,那麼後續所有操作數都必須是字符串型

20170416

1、在將float或double轉型爲整型值時,總是對該數字進行截尾。java.lang.Math中的round()方法纔是四捨五入

2、java不允許我們將一個數字作爲布爾值使用

3、我覺得這個有點意思:Java編譯器生成他自己的“彙編代碼”,但是這個代碼是運行在Java虛擬機上的,而不是直接運行在CPU硬件上

 

//今天看到的方法
//1、四捨五入
Math.round();
//2、產生0-1之間的數,double類型,包括0,不包括1
Math.random()
//3、檢查字符是否爲小寫字母
Character.isLowerCase(c)
//4、將String變爲char數組
"Test".toCharArry();

20170417

1、在case語句中,使用單引號引起的字符也會產生用於比較的整數值

經過我的測試,下面的代碼是會輸出數字的

 

int c = 'a';
System.out.println(c);
//輸出97

 

2、new表達式返回新建對象的引用

3、-------------------重要-----------------︿( ̄︶ ̄)︿----------

1)如果類中沒有構造器,則編譯器會自動創建一個無參構造器

2)如果已經定義了一個構造器(無論是否有參數),編譯器就不會幫你自動創建無參構造器

 

public class BaseTest {

	public static void main(String[] args) {
		Bird bird = new Bird();//這樣寫是錯誤的,因爲沒有匹配的構造器
	}

	static class Bird {
		public Bird(int i) {}

		public Bird(float f) {}
	}
}

如上述代碼中的註釋,那樣寫是錯誤的,因爲沒有匹配的構造器

4、this關鍵字只能在方法內部使用,表示對“調用方法的那個對象”的引用。如果在方法內部調用同一個類的另一個方法,就不必使用this,直接調用即可

 

return this;//返回當前對象的引用

 

5、儘管可以用this調用一個構造器,但卻不能調用兩個

 

this(a);
this(b);//不能調用兩個

 

6、構造器調用必須置於最起始處,否則編譯器會報錯

7、

8、垃圾回收器只知道釋放那些經由new分配的內存

9、Joshua Bloch這個哥們說finalize() 函數是無法預料,常常是危險的,總之是多餘的(⊙﹏⊙)b  

要使用finalize(),必須是通過【創建對象以外】的方式爲對象分配了內存空間,不過Java中一切皆對象(好高深。。。)上述怎麼實現呢?

可能是由於在分配內存是可能採用了類似C語言中的做法,比如使用“本地方法”的情況下,調用C的malloc() 函數分配內存,需要在finalize() 中調用free()

20170418

1、方法的局部變量,必須初始化;若類的成員變量是基本類型,則會有初始值

 

//1、方法中
	Void f() {
		int i;
		i++;// 錯誤
	}
//2、類中
	public class c{
		int i;
		void f(){
			System.out.println(i);//正確
		}
	}

20170419

1、在類的內部,變量定義的先後順序決定了初始化的順序。即使變量定義散佈於方法定義之間,他們仍舊會在任何方法(包括構造器)被調用之前的到初始化

2、初始化的順序是先靜態對象(如果它們尚未因前面的對象創建過程而被初始化),而後是“非靜態”對象。靜態對象只會被初始化一次

3、在靜態塊裏的一行代碼執行後,其餘行代碼就會緊跟着執行

4、編譯器不允許指定數組的大小

 

int[] a1;

 

上面的代碼只是爲引用分配了空間(已經足夠了),而且並沒有給數組對象本身分配空間哦

 

//今天看到的方法
//產生一維數組a的可打印版本
Arrays.toString(a);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章