初識java語言
Java SE -- Java Platform, Standard Edition 是 Java 平臺的基礎(chǔ)
Java SE 以前稱為 J2SE, 可以編寫桌面應(yīng)用和基于 web 的應(yīng)用程序拗引。
JDK > JRE > JVM。
Javac.exe -- 編譯器, 主要用于將高級 Java 源代碼翻譯成字節(jié)碼文件幌衣。
Java.exe -- 解釋器, 主要用于啟動 JVM 對字節(jié)碼文件進(jìn)行解釋并執(zhí)行矾削。
不同的操作系統(tǒng)提供了 JVM 規(guī)范的實(shí)現(xiàn), 達(dá)成跨平臺的目的壤玫。
JVM 解釋 Java 字節(jié)碼文件為具體平臺能夠執(zhí)行的機(jī)器指令。
Java EE -- Java Platform, Enterprise Edition
J2EE 是 1999 年到 2003 年 Java EE 的抽象規(guī)范的版本名稱哼凯。
Java EE 構(gòu)建在 Java SE 基礎(chǔ)之上, 用于構(gòu)建企業(yè)級應(yīng)用欲间。
Java EE 是一個抽象的規(guī)范, 具體實(shí)現(xiàn)稱為應(yīng)用服務(wù)器。
EJB 遵循 Java EE 的規(guī)范, 所以 EJB 屬于 Java EE断部。
注釋
// 單行注釋
/*
多行注釋
*/
/**
多行或文檔注釋, 支持提取的注釋
*/
變量與數(shù)據(jù)類型
變量
Java 是強(qiáng)類型語言, 變量在使用前必須聲明來指明其數(shù)據(jù)類型猎贴;
變量在使用之前必須初始化;
變量不能重復(fù)聲明 蝴光;
標(biāo)識符命名
由數(shù)字, 字母, 下劃線以及$等等, 不能數(shù)字開頭她渴;
不能使用 Java 語言的關(guān)鍵字 ;
區(qū)分大小寫, 長度沒有限制但不宜過長蔑祟;
支持中文, 但不推薦使用 趁耗;
標(biāo)識符可以給 類/變量/屬性/方法/包 起名字;
數(shù)據(jù)類型
基本類型: byte(1字節(jié)), short(2字節(jié)), int(4字節(jié)), long(8字節(jié)), float(4字節(jié)), double(8字節(jié)), boolean(1字節(jié)), char(2字節(jié))疆虚。
引用類型: 數(shù)組, 類, 接口, 枚舉, 標(biāo)注 苛败。
基本數(shù)據(jù)類型之間的轉(zhuǎn)換
自動類型轉(zhuǎn)換 --從小到大類型的轉(zhuǎn)換:byte->short,char->int->long->float->double。
強(qiáng)制類型轉(zhuǎn)換 -- 從大到小類型的轉(zhuǎn)換:目標(biāo)類型 變量名 = (目標(biāo)類型)源類型變量名径簿。
//比如實(shí)現(xiàn) double類型(3.12) 向 float類型 著拭,即大類型向小類型轉(zhuǎn)換
float a = 3.12F;
float a = (float)3.12;
注:成員變量和局部變量的區(qū)別:
區(qū)別一:定義的位置不同。
(1)成員變量定義在類中牍帚,整個類全都可以通用儡遮。
(2)局部變量定義在方法中,只有方法當(dāng)中才可以使用,出了方法就不能再用暗赶。區(qū)別二:在內(nèi)存中的位置不同鄙币。
(1)成員變量存儲在堆內(nèi)存的對象中。
(2)局部變量存儲在棧內(nèi)存的方法中蹂随。區(qū)別三:聲明周期不同:
(1)成員變量隨著對象的出現(xiàn)而出現(xiàn)十嘿,隨著對象的消失而消失。
(2)局部變量是隨著方法的運(yùn)行而出現(xiàn)岳锁,隨著方法的彈棧而消失绩衷。區(qū)別四:初始化不同:
(1)成員變量因?yàn)樵诙褍?nèi)存中,所以有默認(rèn)的初始化值激率。
(2)局部變量沒有默認(rèn)初始化值咳燕,必須初始化后才可以使用。
運(yùn)算符(部分)
算術(shù)運(yùn)算符 : / 和 %
- / 表示做除法(商)運(yùn)算乒躺,%表示做取余(模)運(yùn)算招盲。
自增減運(yùn)算符 :++ 和 --
a++: 先讓 a 的數(shù)值作為整個表達(dá)式的最終結(jié)果, 然后讓 a 自增 。
++a: 先讓 a 自增, 然后讓 a 的新值作為整個表達(dá)式的最終結(jié)果 嘉冒。
邏輯運(yùn)算符 : && 曹货、 || 咆繁、 !
&& :表示邏輯與運(yùn)算符顶籽,相當(dāng)于"并且"玩般,同真為真,一假為假(短路特性: 對于邏輯與 運(yùn)算符來說礼饱,若第一個表達(dá)式為假則結(jié)果為假壤短,此時跳過第二個表達(dá)式)。
|| :表示邏輯或運(yùn)算符慨仿,相當(dāng)于"或者"久脯,一真為真,同假為假镰吆。
! : 表示邏輯非運(yùn)算符帘撰,相當(dāng)于"取反",真為假万皿,假為真摧找。
注:邏輯運(yùn)算符的操作數(shù)均為boolean表達(dá)式。
條件/三目運(yùn)算符 :條件表達(dá)式? 表達(dá)式1: 表達(dá)式2
- 判斷條件表達(dá)式是否成立牢硅,若成立則執(zhí)行表達(dá)式1蹬耘,否則執(zhí)行表達(dá)式2 。
移位運(yùn)算符**
<<
左移運(yùn)算符减余,用于將數(shù)據(jù)的二進(jìn)制位向左移動综苔,右邊使用0補(bǔ)充
>>
右移運(yùn)算符,用于將數(shù)據(jù)的二進(jìn)制位向右移動位岔,左邊使用符號位補(bǔ)充
>>>
表示邏輯右移運(yùn)算符如筛,用于將數(shù)據(jù)的二進(jìn)制位向右移動,左邊使用0 補(bǔ)充
位運(yùn)算符**
& 表示按位與運(yùn)算符抒抬,按照二進(jìn)制位進(jìn)行與運(yùn)算杨刨,同1為1,一0為0.
| 表示按位或運(yùn)算符擦剑,按照二進(jìn)制位進(jìn)行或運(yùn)算妖胀,一1為1,同0為0.
~ 表示按位取反運(yùn)算符惠勒,按照二進(jìn)制位進(jìn)行取反赚抡,1為0,0為1.
^ 表示按位異或運(yùn)算符捉撮,按照二進(jìn)制位進(jìn)行異或運(yùn)算怕品,同為0妇垢,不同為1.
流程控制語句
局部變量 -- 作用范圍是從聲明開始一直到方法體結(jié)束
塊變量 -- 作用訪問是從聲明開始一直到當(dāng)前語句塊結(jié)束
選擇結(jié)構(gòu)語句:
-
if 條件語句
(1)if 條件語句
if(表達(dá)式1){
語句1巾遭;
}
如果表達(dá)式1的判斷為真(正確/true)就執(zhí)語句1
(2)if else 表達(dá)式
if(表達(dá)式1){
語句1肉康;
}else{
語句2;
}
當(dāng)表達(dá)式1的判斷為真(正確/true)就執(zhí)行語句1灼舍,否則吼和,就執(zhí)行語句2(不執(zhí)行1就執(zhí)行2)。
(3)if else if 表達(dá)式
if else if 表達(dá)式
if(表達(dá)式1){
語句1骑素;
}else if(表達(dá)式2){
語句2炫乓;
}else{
語句3;
}
當(dāng)表達(dá)式1的判斷為真(正確/true)就執(zhí)行語句1献丑,否則 末捣,當(dāng)表達(dá)式2的判斷為真就執(zhí)行語句2,否則就執(zhí)行語句3创橄。
注:字符串的判斷
錯誤的字符串判斷相等(字符串的判斷不能使用 "==" )
public class HelloWorld {
public static void main(String[] args) {
String name = new String("張三");
if( name == "王五" ){
System.out.println("yes1");
} else if( name == "趙四"){
System.out.println("yes2");
} else if( name == "張三"){
System.out.println("yes3");
} else{
System.out.println("yes4");
}
}
}
正確的字符串判斷相等(使用 "equal")
public class HelloWorld {
public static void main(String[] args) {
String name = new String("張三");
if( name.equals("王五")){
System.out.println("yes1");
} else if( "趙四".equals(name)){
System.out.println("yes2");
} else if( name.equals("張三")){
System.out.println("yes3");
} else{
System.out.println("yes4");
}
}
}
-
switch 條件語句
switch(表達(dá)式){
case 表達(dá)式常量1:
語句1箩做;
break;
case 表達(dá)式常量2:
語句2妥畏;
break邦邦;
......
case 表達(dá)式常量n:
語句n;
break醉蚁;
[default:語句n+1燃辖;]
}
其中,一個 case 表達(dá)式常量稱為標(biāo)號网棍,代表一個 case 分支的入口黔龟。switch 語句在運(yùn)行時首先計算 switch 圓括號中“表達(dá)式”的值(注意:這個值必須是整型或字符型的);同時后面各個 case 表達(dá)式常量的值的類型要與 switch 圓括號中“表達(dá)式”的值類型一致滥玷。
一個 case 語句代表一個操作捌锭,當(dāng) switch 表達(dá)式的值與哪一個 case 表達(dá)式常量的值匹配時,執(zhí)行其對應(yīng)的語句罗捎,執(zhí)行完成后遇到 break 輸出观谦;default 子句是可選的,當(dāng)表達(dá)式的值與 case 表達(dá)式常量的值都不匹配時桨菜,就運(yùn)行 default 子句并輸出豁状。
注意:
switch 表達(dá)式的值決定選擇哪個 case 分支,如果找不到相應(yīng)的分支倒得,就直接從”default” 開始輸出泻红;當(dāng)程序執(zhí)行一條 case 語句后,如果 case 分支中沒有 break 和 return 語句霞掺,程序會執(zhí)行緊接于其后的語句谊路。
case 是常量表達(dá)式,也就是說 B 的取值只能是常量或者 int菩彬、byte缠劝、short潮梯、char,如果你需要在此處寫一個表達(dá)式或者變量惨恭,那么就要加上單引號秉馏。
循環(huán)結(jié)構(gòu)語句:
-
for循環(huán)語句
適合于明確循環(huán)次數(shù)的場合, 也可以成為死循環(huán)
for (初始化表達(dá)式; 條件表達(dá)式; 修改初始值表達(dá)式)
{
循環(huán)體 ;
}
案例:連續(xù)輸出十句話
不使用for循環(huán)
public class HelloWorld {
public static void main(String[] args) {
System.out.println("這是第"+1+"句話");
System.out.println("這是第"+2+"句話");
System.out.println("這是第"+3+"句話");
System.out.println("這是第"+4+"句話");
System.out.println("這是第"+5+"句話");
System.out.println("這是第"+6+"句話");
System.out.println("這是第"+7+"句話");
System.out.println("這是第"+8+"句話");
System.out.println("這是第"+9+"句話");
System.out.println("這是第"+10+"句話");
}
}
使用for循環(huán)
public class HelloWorld {
public static void main(String[] args) {
for(int i = 0; i < 10; i++){
System.out.println("這是第"+i+"句話");
}
}
}
-
while循環(huán)
while循環(huán)適合于明確循環(huán)條件, 但不明確循環(huán)次數(shù)的場合
基本格式:
while(判斷條件語句) {
循環(huán)體語句;}
擴(kuò)展格式
初始化語句;
while(判斷條件語句) {
循環(huán)體語句;
控制條件語句;
}
-
do ... while循環(huán)
do while 循環(huán)主要用于至少執(zhí)行一次循環(huán)體的場合
do {
循環(huán)體;
} while (條件表達(dá)式);
注: do while 循環(huán)格式: 最后要加分號
continue 語句, 結(jié)束本次循環(huán)開始下次循環(huán) break 關(guān)鍵字, 退出當(dāng)前語句塊, 在循環(huán)體中用于退出循環(huán)
數(shù)組
- 常見異常:
ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常
ArithmeticException 算術(shù)異常
- 內(nèi)存結(jié)構(gòu)之棧區(qū):
用于存放程序運(yùn)行過程中所有的局部變量
- 內(nèi)存結(jié)構(gòu)之堆區(qū):
用于存儲使用 new 關(guān)鍵字創(chuàng)建的數(shù)組和對象
一維數(shù)組
是相同數(shù)據(jù)類型的多個元素的容器,本質(zhì)上是在空間中申請一段連續(xù)的存儲單元脱羡。 在 Java 語言中體現(xiàn)為一種引用數(shù)據(jù)類型
格式:數(shù)據(jù)類型[] 數(shù)組名稱 = new 數(shù)據(jù)類型[數(shù)組的長度]
數(shù)組名的內(nèi)存空間中存放的是數(shù)據(jù)在堆區(qū)中的內(nèi)存地址信息
通過下標(biāo)訪問數(shù)組每一個元素, 從 0 開始 到 array.length - 1
初始化方式:
基本類型數(shù)組初始值:
byte, short, char, int, long 為 0;
float, double 為 0.0; boolean 為 false;可以在數(shù)組聲明的同時進(jìn)行初始化:
數(shù)據(jù)類型[] 數(shù)組名稱 = new 數(shù)據(jù)類型[]{value0, value1, value2}
數(shù)據(jù)類型[] 數(shù)組名稱 = {value0, value1, value2} // simplified
優(yōu)缺點(diǎn):
可以通過下標(biāo)快速訪問指定位置的元素
要求所有元素的類型相同
要求內(nèi)存空間連續(xù), 并且長度一旦確定就不能修改
增加和刪除效率低
變長數(shù)組: 主要指變量可以作為數(shù)組的長度, 但絕不是數(shù)組的長度可以改變
數(shù)據(jù)工具類:
java.util.Arrays 類可以實(shí)現(xiàn)對數(shù)組中元素的遍歷, 查找, 排序等操作
常用方法:
Arrays.toString(array):輸出數(shù)組中的內(nèi)容
Arrays.fill(array, val):將參數(shù)指定元素賦值給數(shù)組中所有元素
Arrays.equals(array1, array2):判斷兩個數(shù)組元素內(nèi)容和次序是否相同
Arrays.sort(array):對數(shù)組中的元素進(jìn)行從小到大排序
Arrays.binarySearch(array, val):從數(shù)組中查找參數(shù)指定元素所在的位置
二維數(shù)組
本質(zhì)上由多個一維數(shù)組摞在一起的數(shù)組萝究;每個元素都是一維數(shù)組, 而一維數(shù)組中的每個元素才是數(shù)據(jù)內(nèi)容
格式:數(shù)據(jù)類型[][] 數(shù)組名稱 = new 數(shù)據(jù)類型[行數(shù)][列數(shù)];
初始化方式:
數(shù)據(jù)類型[][] 數(shù)組名稱 = {{element0, element1, ...}, ...};
int[][] arr = new int[3][]; // 每一行列數(shù)不一樣
arr[0] = new int[3];
arr[1] = new int[4];
arr[2] = new int[5];