天天看點

Java基礎學習記錄

找工作告一段落了,不管如何,向前看。本來學的是C++,但因為将來工作需要,開始學Java,記錄點基礎知識點,友善自己回顧。

1. 位運算符:
>>> : 使用 0 填充高位 (*)
>>   :使用符号位填充高位
<<< :Java 沒有這個運算符
2. 檢查字元串是否相等:
s.equals( t ):s、t 可以使字元串變量,也可以是常量( “Hello”.equals(greeting);   OK)
“ == ” :确定兩個字元串是否放在同一個位置上;因為隻有常量字元串是共享的,而 + 或 substring 等操作會生成新的字元串,
是以不可以使用 == 判斷字元串是否相等。
3. 空串 和 null 串

null 串:表明沒有任何對象與該String變量關聯;使用 if(str == null) 判斷是否為空

空串: 是一個長度為 0 的字元串,空串是一個Java對象,有自己的長度(0)和内容(空),判斷空串  if(str.length() == 0)或 if(str.equals(""))

注:檢查一個字元串既不是null 也不是 空串: if(str != null  &&  str.length() != 0),首先檢查str不為null,然後才可以調用方法,null調用方法會出錯。

4. 數組
  • int[] array = new int[100];  
獲得數組中元素的個數  array.length,注意 沒有“()”小括号,不是方法
  • 多元數組 : double[][] balances = new double[N][M];
可以單獨存取數組的某一行,是以可以讓兩行交換
double[] temp = balances[i];
balances[i] = balances[i + 1];
balances[i + 1] = temp;
5. 類之間關系         
  • 依賴  use-a:一個類的方法操縱另一個類對象
  • 聚合  has-a:類A 的對象包含類B 的對象             
  • 繼承  is-a: 表特殊與一般的關系
6.對象與對象變量
  • 所有Java對象都存儲在堆中
  • new Date()  構造了一個Date類型對象,并且它的值是對新建立對象的引用
  • Date deadline; 定義了一個對象變量,它可以引用一個Date類型的對象
     ※ 變量deadline 不是一個對象,它隻是可以 引用一個對象(并沒有包含一個對象)
     ※ 如果deadline 沒有引用對象(未初始化),則不能将任何Date方法應用于這個變量
  • Java中,任何對象變量的值都是對存儲在另外一個地方的一個對象的引用
  • 可以顯示地将對象變量設定為null,将方法應用于值為null的對象會産生 runtime error
  • 局部變量不會自動初始化為null,必須通過調用 new  或 将 他們設定為 null 進行初始化
7. 時間、月曆類(Date、GregorianCalendar)
  • Date類表示一個時間點,精确到毫秒數;GregorianCalendar表示月曆
  • Date擷取年、月、日的方法不鼓勵使用,可以使用before(after)方法比較一個時間點是否早于(晚于)另一個時間點
  • GregorianCalendar有多個構造器 

new GregorianCalendar()

new GregorianCalendar(1999, 11, 31)     // 月份從0開始,11 表示十二月

new GregorianCalendar(1999,Calendar.DECEMBER, 31)     // 月份使用常量,更清晰

new GregorianCalendar(1999, Calendar.DECEMBER, 31, 23, 59, 59)   // 設定具體時間

  • GregorianCalendar 的get 方法、set 方法
GregorianCalendar now = new GregorianCalendar();
int month = now.get(Calendar.MONTH);     // 擷取月份
now. set( Calendar.MONTH,  Calendar.OCTOBER);  // 設定月份
// 其他類似
  • GregorianCalendar 的 add 方法
now. add(Calendar.MONTH, 3);   // 将 now 表示的日期增加 3個月
  ※ 如果傳遞的數值是 負數,日期就向 前移
  • GregorianCalendar 的 getTime、setTime 方法實作 與 Date 類之間的轉換
Date time = calendar.getTime();    // Calendar 類轉 Date
calendar. setTime(time); // Date 類轉Calendar
補充:http://blog.csdn.net/shibenjie/article/details/4263912

8. 構造器

  • Java中的構造器,C++中的構造函數。
  • 所有Java對象都是在堆中構造的,是以Java構造器總是和 new 操作符一起使用;C++可以在堆、棧上構造對象
Employee number007("James Bond", 100000, 1950, 1, 1);     // C++, not  Java 
  • 不要在構造器中定義與執行個體域重名的局部變量(在所有的方法中不要命名與執行個體域同名的變量)

9. 類與方法

  • C++中方法可以定義在類的外部,如果在類的内部定義方法,則自動成為 内聯(inline)方法
  • Java中的方法必須定義在類的内部,但并不表示它們是内聯方法。是否将某個方法設定為内聯方法是 JAVA 虛拟機的任務。
  • 不要編寫傳回 引用可變對象 的通路器方法,否則 對類外部對象變量 調用更改器 就可以更改原對象内部的私有成員變量,破壞類的封裝。如果需要傳回一個可變對象的引用,應該首先對它進行克隆,對象 clone 是指存放在另一個位置上的對象副本。
class Employee {
public Date getHireDay() {
return hireDay.clone();
}
}