1. Java 是一種強類型的語言,聲明變量時必須指明數據類型。變量(variable)的值佔據一定的內存空間。不同類型的變量佔據不同的大小。
2. Java中共有8種基本數據類型,包括4 種整型、2 種浮點型、1 種字符型、1 種布爾型,請見下表。
數據類型 | 說明 | 所佔內存 | 舉例 | 備註 |
---|---|---|---|---|
byte | 字節型 | 1 byte | 3, 127 | |
short | 短整型 | 2 bytes | 3, 32767 | |
int | 整型 | 4 bytes | 3, 21474836 | |
long | 長整型 | 8 bytes | 3L, 92233720368L | long最後要有一個L字母(大小寫無所謂)。 |
float | 單精度浮點型 | 4 bytes | 1.2F, 223.56F | float最後要有一個F字母(大小寫無所謂)。 |
double | 雙精度浮點型 | 8 bytes | 1.2, 1.2D, 223.56, 223.56D | double最後最好有一個D字母(大小寫無所謂)。 |
char | 字符型 | 2 bytes | 'a', ‘A’ | 字符型數據只能是一個字符,由單引號包圍。 |
boolean | 布爾型 | 1 bit | true, false |
3.
數學運算符
數學運算,結果爲一個數值。見下表:運算符 | 說明 | 舉例 |
---|---|---|
+ | 加法 | 1 + 2 |
- | 減法 | 4 - 3.4 |
* | 乘法 | 7 * 1.5 |
/ | 除法 | 3.5 / 7 |
% | 取餘 | 7 % 2 |
++ | 自增 | 3++ |
-- | 自減 | 3-- |
4.關係運算符,結果爲一個布爾值。見下表:
運算符 | 說明 | 舉例 |
---|---|---|
> | 大於 | a > 4.2 |
>= | 大於等於 | 3.4 >= b |
< | 小於 | 1.5 < 9 |
<= | 小於等於 | 6 <= 1 |
== | 等於 | 2 == 2 |
!= | 不等於 | 2 != 2 |
&& | 與 | true && false |
|| | 或 | (3 > 1) || (2 == 1) |
! | 非 | !true |
5.
位運算符
位運算符對整數的二進制形式逐位進行邏輯運算,得到一個整數。見下表:運算符 | 說明 | 舉例 |
---|---|---|
& | 與 | 1 & 4 |
| | 或 | 2 | 5 |
^ | 異或 | 2 ^ 3 |
~ | 非 | ~5 |
<< | 左移 | 5 << 3 |
>> | 右移 | 6 >> 1 |
6..
條件運算符
Java中也有一個條件運算符(三目運算符):condition ? x1 : x2
condition爲一個boolean值。根據condition,取x1或x2的值。
7.. string 對象 ?
1) length() 方法length() 返回字符串的長度,
2)charAt() 方法charAt() 方法的作用是按照索引值獲得字符串中的指定字符。
contains() 方法contains() 方法用來檢測字符串是否包含某個子串
4) replace() 方法字符串替換,用來替換字符串中所有指定的子串
split() 方法以指定字符串作爲分隔符,對當前字符串進行分割,分割的結果是一個數組,
8. String 的值是不可變的,每次對String的操作都會生成新的String對象,不僅效率低,而且耗費大量內存空間。
StringBuffer不像String,只能通過 new 來創建對象,不支持簡寫方式,例如:
- StringBuffer str1 = new StringBuffer(); // 分配16個字節長度的緩衝區
9..
StringBuffer 類的主要方法StringBuffer類中的方法主要偏重於對於字符串的操作, 追加、插入和刪除等
* append() 方法用於向當前字符串的末尾追加內容,類似於字符串的連接。
* deleteCharAt() 方法用來刪除指定位置的字符,並將剩餘的字符形成新的字符串。例如:
- StringBuffer str = new StringBuffer("abcdef");
- str. deleteCharAt(3); //該代碼將會刪除索引值爲3的字符,即”d“字符
- StringBuffer str = new StringBuffer("abcdef");
- str.delete(1, 4);//該代碼會刪除索引值爲1~4之間的字符,包括索引值1,但不包括4。
insert() 方法 insert() 用來在指定位置插入字符串,
- StringBuffer str = new StringBuffer("abcdef");
- str.insert(3, "xyz");
*4) setCharAt() 方法setCharAt() 方法用來修改指定位置的字符。例如:
- StringBuffer str = new StringBuffer("abcdef");
- str.setCharAt(3, 'z');
10.
StringBuilder類
StringBuilder類和StringBuffer類功能基本相似,方法也差不多,主要區別在於StringBuffer類的方法是多線程安全的,而StringBuilder不是線程安全的,相比而言,StringBuilder類會略微快一點。
* StringBuffer、StringBuilder、String中都實現了CharSequence(字符序列)接口。
StringBuffer、StringBuilder、String對CharSequence接口的實現過程不一樣,如下圖所示:
圖1 對CharSequence接口的實現
可見,String直接實現了CharSequence接口;StringBuilder 和 StringBuffer都是可變的字符序列,它們都繼承於AbstractStringBuilder,實現了CharSequence接口。
*
總結
線程安全:- StringBuffer:線程安全
- StringBuilder:線程不安全
速度:
一般情況下,速度從快到慢爲 StringBuilder > StringBuffer > String,當然這是相對的,不是絕對的。
使用環境:
- 操作少量的數據使用 String;
- 單線程操作大量數據使用 StringBuilder;
- 多線程操作大量數據使用 StringBuffer。
1. 類必須先定義才能使用。類是創建對象的模板,創建對象也叫類的實例化。 構造方法的名稱必須與類的名稱相同,並且沒有返回值。
2.對象是類的一個實例,創建對象的過程也叫類的實例化。對象是以類爲模板來創建的。
在Java中,使用new關鍵字來創建對象,一般有以下三個步驟:
- 聲明:聲明一個對象,包括對象名稱和對象類型。
- 實例化:使用關鍵字new來創建一個對象。
- 初始化:使用new創建對象時,會調用構造方法初始化對象。
修飾符 | 說明 |
---|---|
public | 共有的,對所有類可見。 |
protected | 受保護的,對同一包內的類和所有子類可見。 |
private | 私有的,在同一類內可見。 |
默認的 | 在同一包內可見。默認不使用任何修飾符。 |
4.
訪問控制和繼承
請注意以下方法繼承(不瞭解繼承概念的讀者可以跳過這裏,或者點擊 Java繼承和多態 預覽)的規則:
-
父類中聲明爲public的方法在子類中也必須爲public。
-
父類中聲明爲protected的方法在子類中要麼聲明爲protected,要麼聲明爲public。不能聲明爲private。
-
父類中默認修飾符聲明的方法,能夠在子類中聲明爲private。
-
父類中聲明爲private的方法,不能夠被繼承。
1. 在Java中,變量的作用域分爲四個級別:類級、對象實例級、方法級、塊級。
*類級變量又稱全局級變量或靜態變量,需要使用static關鍵字修飾,類級變量在類定義後就已經存在,佔用內存空間,可以通過類名來訪問,不需要實例化。
* 對象實例級變量就是成員變量,實例化後纔會分配內存空間,才能訪問。
* 方法級變量就是在方法內部定義的變量,就是局部變量。
* 塊級變量就是定義在一個塊內部的變量,變量的生存週期就是這個塊,出了這個塊就消失了,比如 if、for 語句的塊。
6.this 關鍵字用來表示當前對象本身,或當前類的一個實例,通過 this 可以調用本對象的所有方法和屬性。
7.在Java中,同一個類中的多個方法可以有相同的名字,只要它們的參數列表不同就可以,這被稱爲方法重載(method overloading)。
說明:
- 參數列表不同包括:個數不同、類型不同和順序不同。
- 僅僅參數變量名稱不同是不可以的。
- 跟成員方法一樣,構造方法也可以重載。
- 聲明爲final的方法不能被重載。
- 聲明爲static的方法不能被重載,但是能夠被再次聲明。
- 方法名稱必須相同。
- 參數列表必須不同(個數不同、或類型不同、參數排列順序不同等)。
- 方法的返回類型可以相同也可以不相同。
- 僅僅返回類型不同不足以成爲方法的重載。
8..
基本數據類型 | 對應的包裝類 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
Java 1.5(5.0) 之前必須手動拆箱裝箱。
Java 1.5 之後可以自動拆箱裝箱,也就是在進行基本數據類型和對應的包裝類轉換時,系統將自動進行
9..當在一個源文件中定義多個類,並且還有import語句和package語句時,要特別注意這些規則:
- 一個源文件中只能有一個public類。
- 一個源文件可以有多個非public類。
- 源文件的名稱應該和public類的類名保持一致。例如:源文件中public類的類名是Employee,那麼源文件應該命名爲Employee.java。
- 如果一個類定義在某個包中,那麼package語句應該在源文件的首行。
- 如果源文件包含import語句,那麼應該放在package語句和類定義之間。如果沒有package語句,那麼import語句應該在源文件中最前面。
- import語句和package語句對源文件中定義的所有類都有效。在同一源文件中,不能給不同的類不同的包聲明。
- 類有若干種訪問級別,並且類也分不同的類型:抽象類和final類等。這些將在後續章節介紹。
- 除了上面提到的幾種類型,Java還有一些特殊的類,如內部類、匿名類。