1. 程式人生 > >JAVA筆記一:基礎知識

JAVA筆記一:基礎知識

基礎知識

一、註釋

 1. //
 2. /* */
 3. /**
	XXXX自動生成文件
	*/

二、JAVA資料型別

型別 儲存需求(Byte) 取值範圍
int 4 -2 147483 648 ~ 2 147 483647( > 20億)
short 2 -32 768 ~ 32767
long 8 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
byte 1 -128 ~ 127
float 4 大約 ± \pm 3.402 823 47E+38F(有效位數為6 ~ 7位)
double 8 大約 ±
\pm
1.797 693 134 862 315 70E+308(有效位數為15位)
char 2 \u0000 ~ \uffff(char描述了UTF-16編碼的一個程式碼單元)
boolean 1bit false和true

注意細節

  • 長整型數字字尾L或者l(如4000000000L)。十六進位制數值有一個字首0x或0X(如0xCAFE)。八進位制有字首0。
  • 從Java7開始,0b或0B表示二進位制,還可以在數字內加下劃線更易讀(4_000_000_000L)。
  • double精度是float型別的兩倍,float有後綴F或f,沒有後綴的浮點數預設為double,也可以加D或d。
  • 注意轉義字元(\u0000 ~ \ufffff),\uxx,在任何時候都會進行轉義,包括註釋行,因此可能會產生錯誤。

三、變數與常量

  • 宣告一個變數後必須用賦值語句顯示初始化才能被使用。
  • 利用關鍵字final指示常量,且只能被賦值一次,賦值之後不可再更改。
final double CM_OER = 2.54
import static java.lang.Math.*;
  • 數學函式 Math.sin, Math.exp, Math.PI …

3.1型別轉換

3.1.2 隱式轉換

有兩個運算元a,b
如果有一個double,另一個也會轉為double;
否則如果有一個float,另一個也會轉為float;
否則如果有一個long,另一個也會轉為long;
否則都將轉為int。
如下圖所示,虛線表示轉換可能會損失精度。
在這裡插入圖片描述

3.1.2 強制型別轉換

強制轉換可能會截斷成完全不同的值,注意!

double x = 9.997;
int nx = (int) x;

3.2 位運算子

& // and
| // or
^ // xor
~ // not

3.3 運算子優先順序

運算子由高到低
[] . ()(方法呼叫)
! ++ – +(一元運算子) - (一元運算子) () (強制型別轉換) new
* / %
+ -
<< >> >>>
< <= > >= instanceof
== !=
&
^
\mid
&&
\mid \mid
?:
= += -= *= /= %= &= \mid = ^= <<= >>= >>>=

3.3不可變字串

	java.lang.string 1.0
1. substring(index, endIndex)
	String greeting = "Hello";
	String s = greeting.substring(0, 3);// Hel endIndex - 1
2. +
	String sJoin = s + greeting ;//HelloHel
3. join(sep, str...)
	String all = String.join("/", "s", "m", "l", "xl")// s/m/l/xl
4. equals
	s.equals(greeting); //不要使用"=="判斷是否相等,"=="只會判斷是否放置在同一位置上
5. 空串與Null串
	str.length() == 0  || str.equals("");
	String s = null;//此時不可呼叫方法,否則會報錯 java.lang.NullPointerException
	s == null //判斷是否為空
6. string api
	char charAt(int index)
	boolean equals(Object other)
	int length()
	String replace(oldString, newString)
	String substring(beginIndex)
	String substring(beginIndex, endIndex)
7. StringBuilder 字串構建器,高效拼接字串 java.lang.StringBuilder 5.0
	StringBuilder builder = new StringBuilder();
	builder.append(ch);
	builder.append(str)
	String str = builder.toString();
api
	StringBuilder()
	int length()
	StringBuilder append(String str),StringBuilder append(char c)
	void setCharAt(int i, char c)
	StringBuilder insert(int offset, String str),StringBuilder insert(int offset, char c)
	String toString()
	

四、輸入與輸出

4.1 輸入

java.util.Scanner 5.0
Scanner in = new Scanner(System.in);
String nextLine()
String next()
int nextInt()
double nextDouble()
boolean hasNext()
boolean hasNextInt()
boolean has NextDouble()

五、迴圈、陣列

  1. 帶標籤break,可用於跳出多層迴圈
label:
for(){
	for(){
		if()	break label;
	}
}//jump here,跳到label的語句塊之後。
  1. 大數值 BigInteger BigDecimal(整型和浮點型)
(1) BigInteger a = BigInteger.valueOf(100);
(2) Bigdata API  java.math.BigInteger 1.1
	BigInteger add(BigInteger other), subtract(), multiply(), divide(), mod() 
	int compareTo(BigInteger other)
	static BigInteger valueOf(long x)
  1. 陣列
(1) 初始化
	int[] a;
	int a[];
	
	int[] smallPrimes = {2, 3, 5, 7};
	smallPrimes = new int[] {5, 6, 7 ,8 ,9};
	int[] a = {1 , 2, 3};
	smallPrimes = a;//  ----1
	smallPrimes = rrays.copyOf(a,3);// ----2
	
	int[] a = new int[0];
	int[]a = {};
	
	a = new int[100];//預設初始化為0
	String[] names = new String[10] // 預設初始化為null
(2) for each
	for(variable : collection) statement; //clllection 是一個數組或者實現了Iterable介面
	for (int element : a)
		System.out.println(element);
(3) 淺拷貝與深拷貝
	如上面程式碼1表示淺拷貝,2表示深拷貝。淺拷貝只會指向同一陣列記憶體。
(4) java.util.Arrays 1.2 API
	static String toString(type[] a) 5.0
	static type copyOf(type[] a, int length) 6
	static type copyOf(type[] a, int start, int end) 6
	static void sort(type[] a)
	static int binarySearch(type[] a, type v)
	static int binarySearch(type[] a, int start, int end, type v) 6
	static void fill(type[] a, type v)
	static boolean equals(type[] a, type[] b)
(5) 多維陣列
	int[][] a = new int[10][10];