馬斯克打造“巨魔式慈善”:捐錢不為提高個人聲望
Java 基礎語法
1、識別符號
java 中用來給變數、方法、類、介面等命名的名稱 稱為識別符號;(名稱 = 識別符號)
識別符號的命名規則:
(1)、包名:所有字母一律小寫。如:com.abc.demo。
(2)、類名和介面名:每個單詞的首字母大寫,其餘小寫。如:StudentDemo,HelloWorld。
(3)、常量名:所有字母都大寫,單詞間以下劃線(_)連線。如:DAY_OF_MONTH。
(4)、變數名和方法名:第一個單詞首字母小寫,從第二個單詞開始每個單詞首字母大寫。即駝峰式命名法。如:chineseScore,getTotalMoney()。
(5)、在程式中,應儘量使用有意義的英文單詞來定義識別符號,即見名知義,這樣便於閱讀。如:password表示密碼,name表示姓名等
2、關鍵字
java 中賦以特定的含義的,有專門用途的字串稱為關鍵字;並且java中所有的關鍵字都是小寫;
資料型別:boolean、int、long、short、byte、float、double、char、class、interface。
資料型別:boolean、int、long、short、byte、float、double、char、class、interface 流程控制:if、else、do、while、for、switch、case、default、break、continue、return、try、catch、finally。 修飾符:public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native。 動作:package、import、throw、throws、extends、implements、this、supper、instanceof、new。 保留字:true、false、null、goto、const。
3、註釋
註釋:java 中的註釋不會出現在任何可執行程式中
-
行內註釋 : 在每行開頭標價// ,註釋內容是從// 開始到本行結尾
-
多行註釋:使用/* 和*/註釋界定符將一段比較常的註釋括起來
-
文件註釋:以/** 開始,以 */ 結束,這種註釋可以用來自動生成文件;
注意:在java 中,/**/ 註釋不能巢狀,也就是說,不能簡單的把程式碼用 / * 和* /括起來作為註釋,因為這段程式碼本身可能也包含一個*/ 界定符
4、基本資料型別
java 是一種強型別語言,必須為每個變數宣告一種型別;
java 中的資料型別主要分為4類8種:4種整型、2種浮點型別、1種字元型別和一種布林型別
1、整數型別:
整型用於表示沒有小數部分的值,允許是負數
- int
- 4個位元組
- 取值範圍:-2147483648 ~ 2147483648(剛好超過20億)
- short
- 2個位元組
- 取值範圍:-32768 ~ 32767
- long
- 8個位元組
- 取值範圍:
- byte
- 1位元組
- 取值範圍:-128 ~127
2、浮點型別
浮點型別用於表示有小數部分的數值
- float
- 4位元組
- 取值範圍:大約+-3.40282347E+38F(有效位數約為6~7位)
- float 型別的數字有一個字尾 f或F,沒有後綴的預設是double
- double
- 8位元組
- 有效位數大為15位
注意:浮點數值不適用於無法接受舍入誤差的金融計算 金融計算應該使用BigDecimal 類
3、char(字元) 型別
char 型別原本是用於表示單個字元的,不過現在有些Unicode 字元可以用一個char 值描述;
char 型別的值可以表示為16進位制值,其範圍從 \u0000 到 \uFFFF
例如:\u2122表示商標符號(™) \u03C0 表示希臘字母π
4、布林型別 boolean
bollean 只有兩個值 false 和 true,用來判定邏輯條件
整型和布林型別之間不能進行相互轉換
5、資料型別轉換
-
將一種數值型別磚混為另外只用數值型別,但有些轉換會造成數值丟失,損失精度
-
強制型別轉換例:例如double 型別轉換為 int 型別
double x = 9.9997; int nx = (int)x;// 變數nx 的值為9
5、變數與常量
1、常量
常量就是值不變的變數
使用關鍵字 final 指示常量 - final 修飾後表示這個變數只能被賦值一次,一旦賦值就不能再更改;
常量名 - 常量名通常全部使用大寫字母;
注意:
- 類常量的定義位於main方法的外部,同一個類的其他方法也可以使用這個常量;
- 如果一個常量被宣告為public ,name其他類的方法也可以使用這個常量;
2、變數
每個變數都有一個型別(type);
在宣告變數之前,需要先指定變數的型別,然後是變數名;
可以在一行中宣告多個變數:(不提倡這個風格)
int i,j ;
變數名 :
- 必須遵循駝峰命名標準,變數名大小寫敏感
- 不能使用java 保留字作為變數名
注意:
- 宣告一個變數後,要使用必須使用賦值語句對變數進行初始化,千萬不要使用未初始化的變數;
3、列舉型別
變數的取值只在一個有限的集合內;
自定義列舉型別,列舉型別包括有限的命名值:
// 自定義列舉
enum Size {SMALL,MEDIUM,LARGE,EXTRA_LARGE}
// 宣告這種型別的變數
Size s = Size.MEDIUM
// Size 型別的變數只能儲存這個型別宣告中給定的某個列舉值,或特殊值null,null表示這個變數沒有設定任何值
6、運算子
運算子用於連線值
1、算數運算子
(+ - * / %)加 減 乘 除 取模
2、邏輯運算子
( 與 - && 、或 - ||、非 - !)
3、關係運算符
4、位運算子
( >> 、 << 、>>> )
3、數學函式
在Math類中,包含了各種各樣的數學函式;
java中沒有冪運算,因此需要藉助Math 類中的pow方法
double y = Math.pow(x,a); // 將x的a次冪 = y
4、結合賦值與運算子
二元運算子
x +=4;
x = x+4;
自增 自減運算子
a++
a--
7、字串
從概念上講,java字串就是Unicode 字元序列 - String
1、子串
-
String 類的substring方法可以從一個較大的字串中提取一個子串
String greeting = "Hello"; String s = greeting.substing(0,3); // s 的字元為"Hel"
2、拼接
java 語言允許使用+號連線(拼接)兩個字串
-
將一個字串與一個非字串的值進行拼接,後者會轉換成字串(任何一個java物件都可以轉換成字串)
-
String 每次拼接字串都會構建一個新的String 物件
3、檢測字串是否相等
-
可以使用equals 方法檢測兩個字串是否相當
s.equals(t);
注意:千萬不要使用 == 運算子來檢測兩個字串是否相等;
4、使用StringBuilder 類構建一個字串
// 首先構建一個空的stringbuilder 字串構建器
StringBuilder builder = new StringBuilder();
// 每次需要新增一部分內容,就直接呼叫append 方法
builder.append(ch);
builder.append(str);
// 最後呼叫toSring 方法,就可以得到一個字串物件
String completedString = builder.toString();
8、控制流程
1、順序結構
自上而下的執行
2、選擇結構
- if 單選擇結構
- if - else 雙選擇結構
- if - else if - else 多選擇結構
- switch
- (JDK7 支援了String型別)
- case穿透現象
- break
- default
3、分支結構(迴圈結構)
- while:儘量避免死迴圈
- do... while
- for - 可計次數一般用for迴圈 ,不可計次數一般用while 迴圈
- for(int i=0;i<100;i++)
- 經典案例 - 99 乘法表
- 增強for迴圈
- break & continue
- break 跳出迴圈
- continue 終止當此迴圈,繼續下次迴圈
- (帶標籤的continue 廢棄的)
- return 結束方法的執行;
9、大數
如果基本的整數和浮點數精度都不能滿足需求,那麼可以使用java.math 包中兩個很有用的類
這兩個類可以處理包含任意長度數字序列的數值
- BigInteger
- 可以實現任意精度的整數運算
- BigDecimal
- 可以實現任意精度的浮點數運算
使用靜態的 valueOf 方法可以將普通的數值轉換為大數:
BigInteger a = BigInteger.valueOf(100);
對於更大的數,可以使用一個帶字串引數的構造器:
BigInteger reallyBig = new BigInteger("1232321312312312312312312312312324575868947474646894644")
注意:
-
不能使用我們熟悉的算數運算子(如:+ 、*) 處理大數,需要使用大數類的add 和multiply 方法進行運算;
BigInteger c = a.add(b) // c = a + b BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); d = c*(b+2)
10、 陣列
陣列: 用來儲存相同型別值得序列;
1、定義陣列
- int[] a = new int[5] // or var a = new int[5]
- int[] a = {1,2,3,4,5};
- 宣告匿名陣列:new int[] {1,2,3,4,5}
- 陣列必須是同一個型別
2、陣列的使用
-
通過下標拿到值
-
ArrayIndexoutofBounds - 陣列下標越界異常
-
通過增強for迴圈遍歷陣列元素
-
for each 增強for 迴圈
for(a: b){ }
-
-
陣列拷貝
-
java中允許將一個數組變數拷貝到另外一個數組變數,這時,兩個陣列變數將引用同一陣列;
-
將一個數組所有值拷貝到一個新陣列中,使用Arrays類的copyOf 方法:
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers,luckyNumbers.length);// 第二個引數是新陣列的長度,這個方法通常用來增加陣列的大小;
注意:如果陣列元素是數值型,那麼額外的元素將被賦值為0;如果陣列元素是布林型,則將賦值為false。相反,如果長度小於原始陣列,則只拷貝前面的值;
-
-
陣列排序
-
數值型陣列排序
使用Arrays類中的sort 方法 - 使用了 快速排序(QuickSort)演算法
-
3、多維陣列
多維陣列將使用多個下標訪問陣列元素
例如:
int[][] a = {{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
注意:java 中實際上沒有多維陣列,只有一維陣列。多維陣列實際就是“陣列的陣列” - (套娃陣列)
4、陣列演算法
- 二分查詢
- 氣泡排序
- 選擇排序
- 直接插入排序
- 希爾排序
- 快速排序
- 歸併排序
- 基數排序
- 堆排序
11、方法
1、什麼是方法?
- 語句塊的集合
2、方法的定義
-
修飾符 返回值 方法名(引數名){ return 返回值; }
3、方法的呼叫
- 類名.方法
- 物件.方法
4、方法過載
- 名字相同,方法形參列表不同;
5、命令列傳參 - 給mian 方法傳遞引數 (涉及JVM調優)
- main 方法是自帶了引數的,可以通過命令列的方式傳遞引數進執行程式;
12、JavaDoc - JDK工具
1、JDK 幫助文件
- 由原始檔生成一個HTML文件
2、命令 javadoc
生成文件
- @author 作者
- @Version 版本
- @Since 最早支援哪個java版本
- @param 引數
- @return 返回值
- @throws 丟擲的異常