標籤:空間 pass 代碼 單線程 函數 str style 強制 字串拼接
1.一個簡單的Java應用程式
public class FirstSample{ public static void main(String[] args) { System.out.pringln("We will not use ‘Hello,World!‘"); }}
這個程式雖然簡單,但所有的Java應用程式都具有這種結構:
首先,Java區分大小寫(如將main寫成Main程式將無法運行)
下面逐行分析這段代碼:
public關鍵字稱為存取修飾詞,用於控製程序的其它部分對這段代碼的存取層級。
class關鍵字表明Java程式中的全部內容都包含在類中。
類名緊跟在class關鍵字後面,名字必須以字母開頭,後面可以跟字母和數位任意組合,不能使用Java關鍵字
static關鍵字修飾的方法稱為類方法
void關鍵字表示無傳回型別
標準的命名規範——駱駝命名法
原始碼的檔案名稱必須與類名相同
2.注釋
1.// 最常用的注釋方式,其注釋內容從//開始到本行結尾
2./*和*/ 用於長篇注釋,將注釋內容放在/*和*/中間
3./**和*/用來產生自動文檔,將注釋內容放在/**和*/中間
3.資料類型
Java是一種強型別語言,必須為每一個變數聲明一種類型。
基礎資料型別 (Elementary Data Type):4種整型、2種浮點型、1種字元型、一種布爾型
3.1 整型
從Java7開始,加上首碼0b或0B就可以寫位元。
從Java7開始,還可以為數字字面量加底線(1_000_000表示100萬)
3.2 浮點類型
三種特殊的浮點數值:正無窮大(一個正整數除以0)、負無窮大、NaN(不是一個數字,如0/0或者負數的平方根)
不能用x==Double.NaN檢測x是否等於Double.NaN,可以使用Double.isNaN(x)檢測
2.0-1.1將列印出0.899999999999,如果數值在計算中不允許有任何誤差,就應該用BigDecimal類
3.3 char類型
char類型的字面量要用單引號括起來
有些Unicode字元可以用一個char值描述,另外一些Unicode字元則需要兩個char值
3.4 boolean類型
用來判定邏輯條件:true/false
4.變數4.1 變數
變數名必須是一個以字母開頭並由字母(包括”_“、"$")或數字構成的序列.
聲明一個變數後,必須用指派陳述式對變數進行顯式的初始化。
變數的聲明儘可能地靠近變數第一次使用的地方是一種良好的編程風格
4.2 常量
final關鍵字用於指示常量(習慣上常量名使用全大寫)
static final設定一個類常量
5.運算子
strictfp關鍵字標記的方法必須使用嚴格的浮點計算來產生可再生的結果(有可能產生溢出)
5.1數學函數
floorMod方法是解決整數求餘的問題
在Math類中,為了達到最快的效能,所有方法都使用電腦浮點單位中的常式,如果得到一個完全可預測的結果比運算速度更重要的話,應該使用StrictMath類。
5.2 數實值型別之間的轉換
轉換順序:double->float->long->int
int轉float失效原因(55224990)
5.3 強制類型轉換
對浮點數進行舍入運算:Math.round
5.4 結合賦值和運算子
x+=4;
5.5 自增與自減運算子5.6 關係和boolean運算子
==、!=、&&、||(短路)、x<y?x:y;
5.7 位元運算符
&、|(不短路)、^、~、>>、<<(移位操作要進行模32操作或64)
5.8 括弧與運算子層級
5.9 枚舉類型
enum Size{ SMALL,MEDIUM,LARGE,EXTRA_LARGE}
Size s=Size.MEDIUM
6 字串
Java沒有內建的字串類型,而是在標準Java類庫中提供了一個預定義類,叫做String
6.1 子串
String類的substring方法
6.2 拼接
1.使用+號串連:當一個字串與一個非字串拼接時,後者會被轉換成字串(任何一個Java對象都能被轉換成字串)
2.如果需要把多個字串放在一起,用一個定界符分隔,可以使用靜態join方法:String.join("/","S","M","L","XL");
6.3 不可變字串
String類沒有提供修改字串的方法,因此Java文檔中將String類對象稱為不可變字串。
不可變字串有一個優點:編譯器可以讓字串共用
Java設計者認為共用帶來的高效率遠遠勝過於提取、拼接字串所帶來的低效率
6.4 檢測字串是否相等
使用equals而不要使用==
如果虛擬機器始終將相同的字串共用,就可以使用==運算子檢測是否相等。但實際上只有字串常量是共用的,而+或substring等操作產生的結果並不是共用的,當使用==運算子測試字串相等時,從表面上看,這種bug很像隨機產生的間歇性錯誤。
6.5 空串與null串
if(str != null && str.length != 0) 首先檢查str不為null
6.6 碼點與代碼單元
不要使用char資料類型(代碼單元)來儲存從字串中取出的碼點
6.7 構建字串
構建字串時如果採用字串串連的方式,每次連接字串都會構建一個新的String對象,既耗時,又浪費空間。使用StringBuilder類可以避免這個問題發生(單線程)。
StringBuffer類較StringBuilder類效率稍低,但允許在多線程中使用。
7 輸入輸出7.1 讀取輸入
輸入可見:Scanner in=new Scanner(System.in);
輸入不可見:Console cons=System.console();
String username=cons.readLine("User name:");
char[] passwd=cons.readPassword("Password:");——每次只能讀取一行輸入,而沒有能讀取一個單詞或一個數值的方法
7.2 格式化輸出
System.printf("Hello,%s. Next year,you‘ll be %d",name,age);
每一個以%開始的格式說明符都用相應的參數替換
String date=String.format("%1$s %2$tB %2$te,%2$tY","Due date:",new Date());
格式說明符的文法圖:
7.3 檔案輸入與輸出
如果檔案名稱中包含反斜線符號,就要記住在每個反斜線前加一個額外的反斜線:"c:\\mydirectory\\myfile.txt"
尋找檔案路徑:String dir=System.getProperty("user.dir");
8 控制流程程
Java使用條件陳述式和迴圈結構確定控制流程程
8.1 塊範圍
塊是指由一對大括弧括起來的若干條簡單的Java語句,塊確定了變數的範圍。
8.2 條件陳述式
if/else
8.3 迴圈語句
while/do-while
8.4 確定迴圈
在迴圈中,檢測兩個浮點數是否相等需要格外小心:
for(double x=0;x!=10;x+=0.1) 因為0.1無法精確的使用二進位表示,所以迴圈可能永遠無法結束
8.5 多重選取
switch
8.6 中斷控制流程程語句
Java中增加了一條帶標籤的break,用於跳出多重迴圈。
對於任何使用break語句的代碼都需要檢測迴圈是正常結束還是由break跳出。
9 大數值
大數值可以處理包含任意長度數字序列的數值
BigInteger(任意精度整數)和BigDecimal(任意精度浮點數)
BIgInteger lotterOdds=lotterOdds.multiply(BigInteger.valueOf(n-i+1).divide(BigInteger.valueOf(i));
10 數組
數組是一種資料結構,用來儲存同一類型值得集合。
數字數組所有元素初始化為0;Boolean數組元素會初始化為false;對象數組得元素會初始化為null。
獲得數組中的元素個數:array.length
一旦建立了數組,就不能改變它的大小。如果經常需要在運行中擴充數組的大小,就應該使用數組列表(ArrayList)。
要列印數組可以使用Arrays.toString(a);
10.1 增強for迴圈
for each迴圈可以用來依次處理數組中的每個元素(無需使用下標)
10.2 數組初始化以及匿名數組
數組的初始化:
int[] smallPrimes={2,3,5,6,11};
使用匿名數組可以在不建立新變數的情況下重新初始化一個數組。
smallPrimes=new int[]{17,18,23,29,31};
10.3 數組拷貝
一個陣列變數拷貝給另一個陣列變數:這時兩個變數將引用同一個數組。
int[] luckyNumbers=smallPrimes;
一個數組的值拷貝給另一個數組:使用Arrays.copyOf方法:
int[] copiedLuckyNumbers=Arrays.copyOf(luckyNumbers,2*luckyNumbers.length);
10.4 命令列參數10.5 數組排序
對數值型數組進行排序可以使用Arrays類中的sort方法,這個方法使用了最佳化的快速排序演算法。
10.6 二維數組
多維陣列將使用多個下標訪問數組元素,它適用於表示表格或更加複雜的排列形式。
遍曆二維數組:
for(int i=0;i<balances.length;i++)
{
for(int j=0;j<balances[i].length;j++)
{ ... }
}
for each迴圈語句不能自動處理二維數組的每一個元素,需要使用兩個嵌套迴圈
要想快速列印一個二維數組的資料元素列表,可以調用:Arrays.deepToString(a));
10.6 不規則數組
Java實際上沒有多維陣列,只有一維數組,多維陣列被解釋為“數組的數組”
Java核心技術-Java的基本程式設計結構