JavaSE基礎學習筆記:1.基本語法部分
JavaSE基礎
JDK、JRE、JVM
JDK (Java Development Kit):是 Java 語言的軟體開發工具包(SDK)。
JRE(Java Runtime Environment,Java執行環境),包含JVM標準實現及Java核心類庫。
JVM是Java Virtual Machine(Java虛擬機器)的縮寫,JVM是一種用於計算裝置的規範,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。
基本語法
註釋、識別符號、關鍵字(BAT)
書寫註釋是一個非常好的習慣,平時寫程式碼一定要注意規範
註釋
- 單行註釋 //
- 可以註釋一行文字
- 多行註釋 /**/
- 可以註釋一段文字
- 文件註釋(JavaDoc)/** */
- 大公司經常用
識別符號
識別符號規則如下
-
Java所有的組成部分都需要名字。類名、變數名以及方法名都被稱為識別符號。
-
所有的識別符號都應該以字母,美元符($)、或者下劃線開始
-
首字母之後可以是字母,美元符,下劃線或數字的任何字元組合
-
不能使用關鍵字作為變數名或方法名
-
識別符號是大小寫敏感的
合法識別符號舉例:age、$salary,_value、__1_value
非法識別符號距離:123abc、-salary、#abc
關鍵字
Java中的關鍵字有如下表格中這麼多
具體細節檢視:
資料型別
Java的資料型別分為兩大類
- 基本資料型別
- 引用資料型別
基本資料型別
Java語言提供了八種基本型別。六種數字型別(四個整數型,兩個浮點型),一種字元型別,還有一種布林型。
資料型別 | 範圍 |
---|---|
byte | 8位、有符號 |
short | 16 位、有符號 |
int | 32位、有符號 |
long | 0L(64 位、有符號) |
float | 0.0f(單精度、32位) |
double | 0.0d(雙精度、64 位) |
char | 'u0000' ~ 'uffff' |
boolean | false |
- 最大最小值表示方式:封裝類.MIN(MAX)_VALUE
- 面試真題:銀行業務少用浮點型別,常用BigDecimal 數學工具類
float f = 0.1f;
double d = 1/10;
system.out.printl(f == d);//false
float f1 = 2311231231231231231231f;
float f2 = f1 + 1;
system.out.printl(f1 == f2);//true
引用資料型別
- 物件、陣列、類、介面都是引用資料型別。
- 所有引用型別的預設值都是null。
特殊的轉義字元
符號 | 字元含義 |
---|---|
\n | 換行 (0x0a) |
\r | 回車 (0x0d) |
\f | 換頁符(0x0c) |
\b | 退格 (0x08) |
\0 | 空字元 (0x0) |
\s | 空格 (0x20) |
\t | 製表符 |
" | 雙引號 |
' | 單引號 |
\ | 反斜槓 |
\ddd | 八進位制字元 (ddd) |
\uxxxx | 16進位制Unicode字元 (xxxx) |
自動型別轉換
整型、實型(常量)、字元型資料可以混合運算。運算中,不同型別的資料先轉化為同一型別,然後進行運算。
轉換從低階到高階。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
- 強制轉換(高——低)
(型別)變數名
- 自動轉換(低——高)
- 不能進行Boolean型別轉換
- 不能把物件型別轉換為不相干的型別
- 把高容量轉換到低容量時,強制轉換
- 轉換時可能存在記憶體溢位,或者精度損失!
//操作比較大的數的時候,注意溢位問題
int money = 10_0000_0000;//JDK7新特性,數字之間可以用下劃線分割
int year = 20;
int total1 = money * year;//輸出一個負數,計算的時候溢位的
long total2 = money * year;//先用原始的int型別計算完再轉為long型別,所以轉換之前已經出錯
//正確做法是在計算前先把一個數的資料型別轉化為long類,再計算乘法
long total3 = money * ((long) year);
常量、變數、作用域
常量
常量在程式執行時是不能被修改的。
在 Java 中使用 final 關鍵字來修飾常量,宣告方式和變數類似:
final double PI = 3.1415927;
變數
Java變數是程式中最基本的儲存單元,其要素包括變數名,變數型別和作用域。
type varName [=value] [{,varName[value]}]
//資料型別 變數名 = 值;可以使用逗號隔開來宣告多個同類型變數。
作用域
-
類變數(修飾符static):static+資料型別+變數名
- 可以不初始化
- 可以在方法中直接呼叫
-
例項變數
- 從屬於物件,需要宣告不需要初始化
- 在方法中呼叫前,需要先將類例項化(新建一個物件)
-
區域性變數
- 必須宣告和初始化值,只在方法內有效
public class Variable{
static int allClicks=0;//類變數
String str="hello world";//例項變數
public void method(){
int i =0;//區域性變數
}
}
運算子
Java的運算子,分為四類:
算數運算子、關係運算符、邏輯運算子、位運算子。
- 算數運算子(9):+ - * / % -(取反) ~ ++ --
- 關係運算符(6):== != > >= < <=
- 邏輯運算子(6):&& || ! ^ & |
- 位運算子(7):& | ~ ^ >> << >>>
一、算數運算子
算數運算子運算元必須是數值型別
分為一元運算子和二元運算子;
因運算元是一個,故稱為一元運算子。
運算子 | 含義 | 例子 |
---|---|---|
- | 改變數值的符號,取反 | -x(-1*x) |
~ | 逐位取反,屬於位運算子 | ~x |
++ | 自加1 | x++ |
-- | 自減1 | x-- |
數學中的加、減、乘、除等運算。因算術運算子是運算兩個操作符,故又稱為二元運算子。
運算子 | 含義 | 例子 |
---|---|---|
+ | 加法運算 | x+y |
- | 減法運算 | x-y |
* | 乘法運算 | x*y |
/ | 除法運算 | x/y |
% | 取模運算(求餘運算) | x%y |
二、關係運算符
關係運算符用於比較兩個數值之間的大小,其運算結果為一個邏輯型別(boolean布林型別)的數值。
等於'==',不等於'!=',大於'>',大於等於'>=',小於'<',小於等於'<='
三、邏輯運算子
邏輯與'&&',邏輯或'||',邏輯非'!',邏輯異或'^',邏輯與'&',邏輯或'|'
兩種邏輯與(&&和&)的運算規則基本相同,兩種邏輯或(||和|)的運算規則也基本相同。
&和|運算是把邏輯表示式全部計算完,而&&和||運算具有短路計算功能。
對於&來說,如果左側條件為false,也會計算右側條件的值,而對於&&來說,如果左側的條件為false,則不計算右側的條件,這種現象被稱作短路現象。
所謂短路計算,是指系統從左至右進行邏輯表示式的計算,一旦出現計算結果已經確定的情況,則計算過程即被終止。
對於&&運算來說,只要運算子左端的值為false,則因無論運算子右端的值為true或為false,其最終結果都為false。
所以,系統一旦判斷出&&運算子左端的值為false,則系統將終止其後的計算過程;
對於 || 運算來說,只要運算子左端的值為true,則因無論運算子右端的值為true或為false,其最終結果都為true。
所以,系統一旦判斷出|| 運算子左端的值為true,則系統將終止其後的計算過程。
注:異或相同為false,相反則為true。
在程式設計時使用&&和||運算子,不建議使用&和|運算子。
四、位運算子
位運算是以二進位制位為單位進行的運算,其運算元和運算結果都是整型值。
位與'&',位或'|',位非'~',位異或'^',右移'>>',左移'<<',0填充的右移'>>>'
位運算的位與'&',位或'|',位非'~',位異或'^'與邏輯運算的相應操作的真值表完全相同,其差別只是位運算操作的運算元和運算結果都是二進位制整數,而邏輯運算相應操作的運算元和運算結果都是邏輯值boolean型。
位運算效率高
- &:與
- |:或
- ^:異或
- ~:非,取反
- <<:左移,相當於乘2
- >>:右移,相當於除以2
面試題:2*8=16,怎樣運算最快
答:用位運算最快
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
所以把2
左移3,就可以得到16
System.out.printlin(2<<3);//輸出16
五、賦值運算子與其他運算子的簡捷使用方式
- 賦值運算子
可以與二元算術運算子、邏輯運算子和位運算子組合成簡捷運算子,從而可以簡化一些常用表示式的書寫
- 條件運算子(三目運算子)
x ? y : z
如果x==true,則返回y,否則返回z
- 物件運算子instanceof
物件運算子instanceof用來測試一個指定物件是否是指定類(或它的子類)的例項,若是則返回true,否則返回false。
String s = new String("sa");
if(s instanceof Object){
System.out.println("String is object class");
}