J2SE(Java 2 Platform Standard Edition)java
J2ME(Java 2 Platform Micro Edtion)面試
J2EE(Java 2 Platform Enterprise Edition)數組
Java語言特色:開源 跨平臺(JVM) 面向對象等工具
JRE與JDK開發工具
JRE(JVM和jJava類庫) spa
JDK包含JDK,以及其餘開發工具code
Java源代碼----->javac編譯------>Java字節碼文件------->java執行----->運行結果orm
path環境變量裏面記錄的是可執行性文件,如exe,對可執行文件先在當前路徑去找,若是沒有找到就去path環境變量中配置的路徑去找對象
classpath環境變量裏記錄的是java類的運行文件所在的目錄blog
------------------------------------------------------------------------------------------------------------------------------------------------------------
Java語言基礎
關鍵字:全小寫 在IDE中以不一樣顏色顯示,goto和const做爲保留字存在
標識符:就是給變量,類,接口,方法等起名字 (英文大小寫,數字,$ 和 _)以及命名法
類或接口:首字母大寫
方法或變量:首字母小寫
常量:全大寫,單詞之間用「_」隔開
註釋:// /* */ /** */
常量:字面值常量:1.字符串常量 2.整數常量 3.小數常量 4.字符常量 5.布爾常量 6. 空常量
進制相關:
1byte = 8bit;1k = 1024byte; 1m = 1024k; 1g = 1024m;1t = 1024g
二進制(以0b開頭),八進制(以0開頭),十進制,十六進制(以0x開頭)的相互轉換
8421BCD碼四位表示一個十進制碼,十進制157 = 0001 0101 0111
原碼,反碼,補碼(計算機都是使用補碼來計算的)
原碼:最高位符號位0正1負,其他爲數值位
反碼:正數反碼與原碼相同,負數反碼與符號位相同,數值位取反
補碼:正數補碼與原碼相同,負數補碼爲反碼末位加一
變量:數據類型 變量名 = 初始化值
數據類型:
八種基本數據類型:
byte:八位,一個字節,有符號,以二進制補碼錶示的整數,最小值:-128(-2^7)最大值:127(2^7-1)
short:16位,兩個字節,有符號,以二進制補碼錶示的整數,最小值:-32768(-2^15)最大值:32767(2^15-1)
int: 32位,四個字節,有符號,以二進制補碼錶示的整數,最小值:-2^31 最大值:2^31-1
long: 64位,八個字節,有符號,以二進制補碼錶示的整數,最小值:-2^63 最大值: 2^63-1 默認值:0L
float:單精度 32位 四個字節 浮點數 默認值:0.0f
double: 雙精度 64位 八個字節 浮點數 默認值0.0d 浮點數的默認類型位double類型
boolean:true/false 一個字節
char:單一的 16 位 Unicode 字符,佔兩個字節,最小值是 \u0000(即爲0);最大值是 \uffff(即爲65,535),char 數據類型能夠儲存任何字符;(能夠儲存漢字)
整數默認int類型,浮點數默認double類型
級別從低到高爲:byte,char,short(這三個平級)–>int–>float–>long–>double
自動類型轉換(默認轉換):從低級別到高級別,系統自動轉的;
強制類型轉換:什麼狀況下使用?把一個高級別的數賦給一個比該數的級別低的變量;目標數據類型 變量 = (目標數據類型)(被轉換的數據)
float雖然佔4個字節,long佔八個字節,可是float表示範圍比long大(緣由:略,可自行Google)
//面試題:如下語句會報錯嗎s's's's byte a = 1 , b;fo b = a + a; //會報錯,沒法編譯,由於默認轉換a爲int,再從int到byte須要強制轉換
//面試題,下列輸出是多少: byte a = (byte) 214; System.out.println(a); //由於強制轉換,只截最後一個字節,而且這個字節爲補碼,所要作的就是把補碼轉爲原碼便可
System.out.println('a'+1); //輸出98,由於‘a’爲char類型,根據ACSII錶轉爲int 97
System.out.println('a'+1); // 98 System.out.println("a"+1); // a1 System.out.println('a'+1+"a"); //98a //字符串後的+爲字符串拼接操做
運算符:
算數運算符:「/」爲除法,整數相除只能獲得整數,若是想要小數,須要加小數點.0
"%"爲取餘
++和--,放在變量先後效果不一樣,前面是先自增或自減再參與運算,後面是先參運算再自增或自減
注意:算數運算符的優先級
賦值運算符:= += -= *= /= %=
short f = 1; f = f+1; //會報錯cannot convert from int to short,由於會先默認轉成int類型 short f = 1; f +=1; //不會報錯,由於擴展運算符包含強制類型轉換,至關於f = (f的數據類型)(f+1)
關係運算符:== != > >= < <=
邏輯運算符:&(與) |(或) ^(異或) !(非) &&(短路與) ||(短路或)
& :不管左邊結果是什麼,右邊都參與運算。 &&:短路與,若是左邊爲false,那麼右邊不參數與運算。
|:兩邊都運算。 ||:短路或,若是左邊爲true,那麼右邊不參與運算。
位運算符: &(與運算) |(或運算) ^(異或運算) ~(按位取反) <<(左移) >>(右移) >>>(無符號右移)
int a =1,b =2; //java實現兩個整數變量的交換: // 方式一:採用一箇中間變量 優勢:最簡單最好理解的方式 // 方式二:能夠用兩個數求和而後相減的方式 缺點:若是 x 和 y 的數值過大的話,超出 int 的值會損失精度。 a = a + b; b = a - b; a = a - b; // 方式三:利用位運算的方式進行數據的交換,思想原理是:一個數異或同一個數兩次,結果仍是那個數,並且不會超出int範圍(最佳實現) a = a^b; b = a^b; a = a^b; // 方式四:利用反射 最爲麻煩,切效率低。徹底炫技使用
//最有效的方法算出2乘以8等於幾? // 2<<3; 表示 2向左移 3位:2 * 2^3(2的3次方) = 2 * 8; // 由於一個數左移 n位,就至關於 2的 n次方,那麼一個數乘以 8只要將其左移 3位便可,而爲運算符的效率最高,因此 2乘以 8等於幾的最有效方法是 2<<3。
三目運算符: 比較表達式?表達式1:表達式2;
if語句:if(判斷語句){執行語句}else if(判斷語句){執行語句}else{執行語句}
switch語句: switch表達式支持的數據類型:基本數據類型:byte, short, char, int;包裝數據類型:Byte, Short, Character, Integer;枚舉類型:Enum;字符串類型:String(Jdk 7+ 開始支持)
注意:case 裏面必須跟 break,否則程序會一個個 case 執行下去,直到最後一個 break 的 case 或者 default 出現。
case後面的值只能是常量,不能是變量,並且,多個case後面的值不能重複
for循環語句:for(初始化語句;判斷語句;控制語句){執行語句;}
while循環語句:初始化語句 while(判斷語句){執行語句;控制語句;}
能用for儘可能用for,由於for中初始化語句中的變量能夠儘早在內存中消失,使用while循環能夠繼續使用控制語句中的變量
do...while循環語句:初始化語句 do{執行 語句;控制語句;}while(判斷語句); do...while循環至少執行一次循環體
控制跳轉語句:break 跳出單層循環;跳出指定循環,使用標籤名(不經常使用)
continue 跳出一次循環,進入下一次
方法:格式: 修飾符 返回值類型 方法名 (參數類型 參數名,......){執行語句; return 返回值;}
實際參數:實際參與運算的參數;形式參數:方法定義的,用於接收實際參數
方法重載:方法名相同,參數個數以及參數類型不一樣;與返回值類型無關,只看方法名和參數列表;調用時虛擬機經過參數列表的不一樣來區分同方法名
數組:存儲基本數據類型,也能夠存儲引用數據類型。
格式:數據類型[] 數組名;
數組類型[][] 數組名 = new 數據類型[m][n]; 數據類型[][] 變量名 = new 數據類型[m][]; 數據類型[][] 變量名 = {{1,2,3},{1},{1,2}};
初始化:動態初始化:指定數組長度,由系統分配初始值:數據類型[] 數組名 = new 數據類型][數組長度]
靜態初始化:指定每一個元素的初始值,由系統判斷數組長度:數組類型[] 數組名 = {1,2,3}、
遍歷數組:
獲取最值:
數組逆序:
查找元素:
Java中的參數傳遞問題:
基本類型:形式參數的改變對實際參數沒有影響。
引用類型:形式參數的改變直接影響實際參數。由於引用類型作形參,調用的是地址值,對同一塊內存進行修改。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Java中的內存分配:
棧:存儲局部變量;用完就釋放;棧內存的兩個引用指向同一個堆內存空間,不管哪一個棧內存中的變量的操做都是針對堆內的同一個地方
堆:new出來的東西;每一個new出來的東西都有地址值;每一個變量都有默認值byte,short, int,long 0;float,double 0.0; char '\u0000'; boolean false; 引用類型 null; 使用完畢就成了垃圾,沒有當即回收,等GC空閒時回收
方法區:
本地方法區:
寄存器: