java概述
1991 年Sun公司開發的面向對象的編程語言, 如今廣泛應用在電腦,打印機,手機等各種設備上。
三種技術構架
- JAVAEE:Java Platform Enterprise Edition,開發企業環境下的應用程序,主要針對web程序開發;
JAVASE:Java Platform Standard Edition,完成桌面應用程序的開發,是其它兩者的基礎;
JAVAME:Java Platform Micro Edition,開發電子消費產品和嵌入式設備,如手機中的程序;
兩個軟件包
1、JDK:Java Development Kit,java的開發和運行環境,java的開發工具和JRE。
2、JRE:Java Runtime Environment,java程序的運行環境,java運行的所需的類庫+JVM(java虛擬機)。
字
關鍵字:
- java中賦予了特殊含義的單詞。
標識符:
- 自定義的名詞,比如類名,變量名,函數名,可包含 0-9、a-z、$、_ ;
原則:
- 1、數字不可以開頭。
2、不可以使用關鍵字。
3、對大小寫敏感
4、不限長度
- 規範:(駝峯式大小寫)
- 類、接口名:通常使用名詞,且每個單詞的首字母要大寫
方法名:通常使用動詞,首字母小寫,其後用大寫字母分隔每個單詞
常量名:全部大寫,單詞之間用下劃線分隔
變量名:通常使用名詞,首字母小寫,其後大寫字母分隔每個單詞,避免使用$符號。
常量:
- 是在程序中的不會變化的數據。
變量:
- 其實就是內存中的一個存儲空間,用於存儲常量數據。
變量聲明(開闢內存空間)的三要素:
- 數據類型:變量的類型,決定變量空間的大小
名稱:變量名 ,方便計算機找到這個變量
值: 存儲的數據,即初始化值
- 變量的作用域:
- 作用域從變量定義的位置開始,到該變量所在的那對大括號結束;
- 生命週期:
- 變量從定義的位置開始就在內存中存在;
變量到達它所在的作用域的時候就在內存中消失;
運算符
1、算術運算符。
- +、 -、* 、/、% :加減乘除、除後取餘數
+:連接符,用於連接字符串
++,一 一:自增、自減,能夠自增或自減的必須是變量
- c=a+b++和d=a+ ++b的區別:c=a+b, b=b+1; b=b+1, d=a+b
2、賦值運算符。
= 、 +=、-=、*=、/=、%=
3、比較運算符。
- “>”大於、“<”小於、“>=”大於等於、“<=”小於等於、“==”等於、“!=”不等於
這些運算符基本上同數學中的比較運算符是一致的。
特點:該運算符的特點是:運算完的結果,要麼是true,要麼是false。
4、邏輯運算符。& | ^ ! && ||
- 邏輯運算符除了 ! 外都是用於連接兩個boolean類型表達式。
&: 只有兩邊都爲true結果是true。否則就是false。
|:只要兩邊都爲false結果是false,否則就是true
^:異或:和或有點不一樣。
- 兩邊結果一樣,就爲false。 兩邊結果不一樣,就爲true.
- & 和 &&區別: & :無論左邊結果是什麼,右邊都參與運算。
- &&:短路與,如果左邊爲false,那麼右邊不參數與運算。
- | 和|| 區別:|:兩邊都運算。
- ||:短路或,如果左邊爲true,那麼右邊不參與運算。
5、位運算符:用於操作二進制位的運算符。
& | ^
<< >> >>>(無符號右移)
^的特點:a^b^a = b
6、運算符的優先級:
數據類型
需要注意的是:
- 邏輯型boolean只能是true 或false,不能以數值代替。
字符型char:Unicode編碼,佔2個字節,可用16進製表示。
整數型默認是int類型,如果是short或long型,值後面要加標識:如12345L。long型最好用大寫L,避免小寫l與1混淆。
整型數據有三種書寫格式:
- 十進制:正常書寫:12
八進制:以0開頭,如012
十六進制:以0x開頭,如0x12
- 浮點型默認是double而不是float,若要聲明爲float類型,需在後面加f或F。
在數學中0到1有無數個浮點數;而計算機是離散的,所以表示的時候有誤差,計算機用精度(小數點後幾位來表示正確),比較浮點數時a==0.1是不合適的,應該a-0.1==0;如果a是0.1,則即使有誤差 a-0.1==0因爲a和0.1都被表示爲一個有誤差的計算機二進制
- 自動類型轉換:從低級別到高級別,系統自動轉的;
強制類型轉換:把一個高級別的數賦給一個別該數的級別低的變量;
語句
1、選擇:If語句、switch語句
語句的選擇:
- 1、當判斷固定個數的值的時候,可以使用if,也可以使用switch。
但是建議使用switch,效率相對較高。
2、當判斷數據範圍,獲取判斷運算結果boolean類型時,需要使用if。
3、當某些語句需要執行很多次時,就用循環結構。
switch語句工作原理:用小括號中的變量的值依次和case後面的值進行對比,和哪個case後面的值相同了
就執行哪個case後面的語句,如果沒有相同的則執行default後面的語句;
switch(變量)
{
case 值:要執行的語句;break;
…
default:要執行的語句;
}
細節:
- 1):break是可以省略的,如果省略了就一直執行到遇到break爲止;
2):switch 後面的小括號中的變量應該是byte,char,short,int四種類型中的一種;
3):default可以寫在switch結構中的任意位置;如果將default語句放在了第一行,則不管expression與case中的value是否匹配,程序會從default開始執行直到第一個break出現。
2、循環:do while語句、 while語句 、for 語句
while和for可以進行互換。
區別在於:如果需要定義變量控制循環次數。建議使用for。因爲for循環完畢,變量在內存中釋放。
3、語句中的關鍵字
break:作用於switch ,和循環語句,用於跳出,或者稱爲結束。
break語句單獨存在時,下面不要定義其他語句,因爲執行不到,編譯會失敗。當循環嵌套時,break只跳出當前所在循環。要跳出嵌套中的外部循環,只要給循環起名字即可,這個名字稱之爲標號。
continue:只作用於循環結構,繼續循環用的。
作用:結束本次循環,繼續下次循環。該語句單獨存在時,下面不可以定義語句,執行不到。
多重循環中跳出到外循環:
ok:for(int i=0;i<10;++i)
{
for(int j=0;j<10;++j)
{
System.out.println("i="+i+"j="+j);
if(j==5)
break ok;
}
}
函數
爲了提高代碼的複用性,可以將其定義成一個單獨的功能,就是java中的函數,也稱爲方法。
1、java中的函數的定義格式:
- 修飾符 返回值類型 函數名(參數類型 形式參數1,參數類型 形式參數1,…)
{
執行語句;
return 返回值;
}
當函數沒有具體的返回值時,返回的返回值類型用void關鍵字表示。
如果函數的返回值類型是void時,return語句可以省略不寫的,系統會幫你自動加上。
return的作用:結束函數。結束功能。
2、如何定義一個函數?
- 函數其實就是一個功能,定義函數就是實現功能,通過兩個明確來完成:
1)、明確該功能的運算完的結果,其實是在明確這個函數的返回值類型。
2)、在實現該功能的過程中是否有未知內容參與了運算,其實就是在明確這個函數的參數列表(參數類型&參數個數)。
3、函數的作用:
- 1)、用於定義功能。
2)、用於封裝代碼提高代碼的複用性。
注意:函數中只能調用函數,不能定義函數,也就是函數不能嵌套,比如,不能在主函數中再定義另外的函數。
4、主函數:
- 1)、保證該類的獨立運行。
2)、因爲它是程序的入口。
3)、因爲它在被jvm調用。
5、函數的值傳遞:
- 如果參數是基本類型,函數不能改變實際參數的值;如果參數是引用數據類型(某對象),那麼傳入的實際值是該對象的引用,也就是對象哈希值(地址)。方法中的操作會影響實際參數。
6、重載:
- 在一個類中,如果出現了兩個或者兩個以上的同名函數,只要它們的參數的個數,或者參數的類型不同,即可稱之爲該函數重載了。與返回值類型無關。
數組
用於存儲同一類型數據的一個容器。好處:可以對該容器中的數據進行編號,從0開始。數組用於封裝數據,就是一個具體的實體。
數組的聲明:
1)、元素類型[] 變量名 = new 元素類型[元素的個數];
2)、元素類型[] 變量名 = {元素1,元素2…};
元素類型[] 變量名 = new 元素類型[]{元素1,元素2…};
內存區域劃分
java分了4片內存。
1、棧區(stacksegment)—由編譯器自動分配釋放,存放函數的參數值,局部變量的值等,具體方法執行結束之後,系統自動釋放JVM內存資源
2、堆區(heapsegment)—一般由程序員分配釋放,存放由new創建的對象和數組,jvm不定時查看這個對象,如果沒有引用指向這個對象就回收
3、靜態區(datasegment)—存放全局變量,靜態變量和字符串常量,不釋放
4、代碼區(codesegment)—存放程序中方法的二進制代碼,而且是多個對象共享一個代碼空間區域