1、java之父php
詹姆斯·高斯林
2、java體系css
一、javaSE,標準版,各應用平臺的基礎,桌面開發和低端商務應用的解決方案。 二、javaEE,企業版,以企業爲環境而開發應用程序的解決方案。 三、javaME,微型版,致力於消費產品和嵌入式設備的最佳方案。
3、java能夠作什麼html
一、開發桌面應用程序。 二、開發面向Internet的web應用程序。 三、提供各行業的解決方案。 四、開發android手機應用程序。
4、java的特性java
一、一種面向對象的編程語言。 二、一種與平臺無關的語言(根據JVM實現的)。 三、一種健壯性語言。 四、具備較高的安全性。
5、java應用程序的運行機制android
先編譯(.class),在解釋運行。
6、java程序開發的三個步驟程序員
一、編寫源程序,java源代碼文件。 二、編譯源程序,編譯器編譯編譯成java字節碼文件。 三、運行,java虛擬機(JVM)。
7、垃圾回收器(GC)web
在java運行過程當中自動啓動,程序員沒法干預。
8、JDK和JRE正則表達式
JDK:java開發工具包 先編譯(編譯器javec),後運行(解釋器java) JRE:java運行環境 加載代碼(加載器),校驗代碼(校驗器),執行代碼(解釋器)
9、java虛擬機算法
java虛擬機實際上只是一層接口,一層Java程序和操做系統通信的接口。java文件編譯生成class文件, 而java虛擬機就是這些class文件可以在上面運行的一個平臺,你把class文件當作一個軟件,java虛擬機就是這個軟件能夠運行的操做系統。
10、開發java應用的要點sql
一、一個源文件中只能有一個public修飾的類,其餘類個數不限。 二、一個源文件有n個類時,編譯結果的class文件就有n個。 三、源文件的名字必須和public修飾的類名相同 四、java語言中單詞拼寫大小寫嚴格區分。 五、main方法入口 六、每一句以分號(;)結束
11、註釋
一、單行註釋// 二、多行註釋/* */ 三、java文檔註釋/** */
1、標識符
一、命名規則:由字母、下劃線、數字和美圓符號組成,不能以數字開頭,區分大小寫,不能是關鍵字和保留字(goto、const),長度通常不超過15個字符。 二、駝峯式命名: 類名:單個單詞,首字母大寫,多個單詞,首字母都大寫。 方法名、參數名、變量名:單個單詞,首字母小寫,多個單詞,第一單詞首字母小寫,其餘單詞首字母大寫。 包名:所有小寫。
2、java數據類型劃分
一、基本數據類型: 數值型:byte 1字節 8位 -128~127 short 2字節 16位 -32768~32767 int 4字節 32位 -2^31~2^31-1 long 8字節 64位 2^63~2^63-1 浮點類型: float 4字節 32位 double 8字節 64位 字符型:char 2字節 16位 0~65535 布爾型:boolean true false 二、引用類型: 字符串 String、 類 class 、枚舉 enum、接口interface
3、普及二進制
一、計算機中的數據都以二進制數據保存。 二、計算機信息的存儲單位: 位(bit):是計算機存儲處理信息的最基本的單位 字節(byte):一個字節有8個位組成。
4、轉義字符
\n 換行 \r 回車 \t 水平製表 ' 單引號 " 雙引號 \斜槓
5、基本數據類型之間的轉換
一、自動類型轉換:範圍小→範圍大 byte→short→int→long→float→double; char→int→long→float→double 二、強制類型轉換:範圍大→範圍小 須要增強制轉換符
6、變量
一、數據類型劃分: 基本類型變量:數據的值 引用類型變量:數據的地址 二、聲明的位置劃分: 局部變量 全局變量 區別: 一、默認值 局部沒有默認值,使用前必須初始化。 全局有默認值,默認爲0,沒必要須初始化。 二、聲明位置 局部在方法內。 全局在方法外類內。 三、做用位置 局部只能在本身聲明的方法裏。 全局在整個類中
7、java中的運算符
算術運算符:+ 、 - 、 * 、 / 、 % 、 ++ 、 -- 賦值運算符:= 、 += 、 -= 、 *= 、 /= 、 %= 關係運算符:> 、 < 、 >= 、 <= 、 == 、 != 邏輯運算符:! 、 & (只要有一個false 最終結果就是false) 、 | (但凡是有一個true 最終結果就是true) 、 ^ (若是兩邊同樣 最終結果爲false 若是兩邊不一樣 最終結果爲true)、 &&(若是第一個是false 那第二個不執行 最終結果是false)、 ||(若是第一個表達式的結果是true 那第二個表達式 就不去計算了 ,最終結果是true) 位運算符: ~ 、 >> 、 << 、 >>> 字符串鏈接運算符:+ 三目運算符:X ? Y : Z X爲boolean類型表達式,先計算x的值,若爲true,整個三目運算的結果爲表達式Y的值,不然整個運算結果爲表達式Z的值。
8、程序流程控制
結構化程序的三種結構: 順序、選擇(分支)、循環
9、if語句
一、if(){} 二、if(){}else{} 三、if(){}else if(){} 四、if(){if(){}else()} 五、if()執行語句 esle 執行語句 注意:執行語句只有一條語句的時候.能夠將if esle 的大括號省略 注意:()內是boolean類型表達式,{}是語句塊 比較字符串用equals,比較內容。比較數值用==,比較地址。 基本數據類型:變量名、變量值在棧中。 引用數據類型:變量名在棧中,變量值在常量池中。
10、switch語句
switch(表達式expr){ case const1: statement1; break; … … case constN: statementN; break; [default: statement_dafault; break;] } 注意:一、表達式必須是int、byte、char、short、enmu、String類型 二、constN必須是常量或者finall變量,不能是範圍 三、全部的case語句的值不能相同,不然編譯會報錯 四、default可要可不要 五、break用來執行完一個分支後使程序跳出switch語句塊,不然會一直會執行下去。
11、if和switch的區別
一、if能夠判斷範圍,也能夠判斷一個值 switch只能判斷指定的值 二、若只判斷指定的值,則使用switch語句,效率快 if判斷範圍,對數據判斷靈活,自身的格式也比較靈活
12、for循環
for ([循環變量初始值設定]; [循環條件判斷]; [改變循環變量的值]){ 循環體 } 注意:一、表達式2通常不能夠省略,不然死循環 二、表達式3能夠省略,可是在循環體中必須有語句修改變量,以使表達式2在某一時刻爲false結束循環。 三、若同時省略表達式1,表表達式3,則至關於while(表達式2)語句 四、三個表達式均省略 即for(;;)語句,此時至關於while(true)語句 五、表達式一、表達式3能夠是逗號表達式,以使循環變量值在修改時能夠對其它變量賦值
十3、while
while( 條件表達式語句){ 循環體語句; } [初始條件] do{ 循環體; [迭代] }while( 循環條件判斷); 注意:一、當第一次執行時,若表達式=false時,則while語句不執行,而do/while語句執行一次後面的語句 二、必定要切記在switch循環中,若是沒有break跳出語句,每個case都要執行一遍,在計算最終結果。
十4、break和continue
break跳出某個循環 continue跳過某個循環 注意:if外有循環能夠用break、continue,單純if不能夠用。
十5、方法
一、爲何使用方法? 減小重複代碼,提供代碼複用性 使用方法將功能提煉出來 寫在類內 二、聲明格式 [修飾符] 返回值類型 方法名([形式參數列表]){ 程序代碼; [return 返回值;] } 注意:一、方法是給外界提供內容的位置,形式參數是外界提供的 二、方法調用的時候寫的是實際參數 三、實際參數的類型、順序和形參要對應上 四、支持自動轉換類型,不支持強制類型轉換
十6、return
一、將數據返回給調用者,除了void外,return後必須跟着返回值,只能返回一個。 二、終止方法的執行,返回數據類型必須是void,return後不能添加數據。 注意:一、當return結束方法的時候,要讓其後面的代碼有可能被執行到。 二、一個方法裏能夠有多個return,在void裏不能有返回值,其餘的必須有返回值。
十7、重載overload
一、在一個類中,方法名字相同,參數類型不一樣。 參數類型不一樣:個數、數據類型、順序。 注意: 一、重載和返回值類型,修飾符沒有任何關係。 二、參數變量名修改也不可以重載
十9、遞歸
一、有返回值 二、有參數 三、可以有跳出循環的控制語句 四、本身調用本身
1、面向對象和麪向過程
一、面向對象:是以具體的事物爲單位,考慮的是它的特徵(屬性)和行爲(方法)。 二、面向過程:是以具體的流程爲單位,考慮功能的實現。
2、類和對象
一、對象:看得見摸得着的具體事物。 類:抽象化的概念 二、類和對象的關係: 類是對象的模板/抽象化的概念,對象是類的實例。 三、建立類和對象 類: 特徵:全局變量/屬性/成員變量 動做:方法 對象: 類名 對象名=new 類名() 注意:一個類能夠建立多個對象,,每一個對象之間沒有關係。
3、內存圖
一、棧:先進後出,存放基本數據類型變量名和變量值,引用數據類型的變量名,方法執行的時候進入棧中。 二、堆:先進先出,new出來的對象的實例,包括類的屬性個方法。
4、構造方法
一、構造方法是new關鍵字調用的,用來幫助構建對象 二、顯示構造對象 三、隱示構造對象(沒有顯示的狀況下存在) 四、構造對象能夠重載,參數類型不一致。
5、關鍵字
一、static調用格式: 一、同一個類中: 靜態的: 方法名 屬性名 類名.方法名 類名.屬性名 對象名.方法名 對象名.屬性名 非靜態的: 對象名.屬性名 對象名.方法名 二、不一樣類中: 靜態的: 對象名.方法名 對象名.屬性名 類名.方法名 類名.屬性名 非靜態的: 對象名.屬性名 類名.方法名 注意:一、static能夠修飾屬性、方法、代碼塊,不能夠修飾類和構造方法。 二、靜態方法隨着類的加載而加載。 三、在靜態方法區內的東西只有一份,全部的對象共享這一份空間,只要有一個對象對屬性進行修改,全部的對象調用都是修改後的數據。 四、代碼塊的執行順序:靜態代碼塊(只被調用一次)>構造代碼塊{}>構造方法>普通方法(需調用) 二、this關鍵字 一、能夠調用屬性和方法。 this.屬性名(全局變量) this.方法名(); 二、在構造方法中: 一、this();括號內的參數個數、順序、類型根據調用的方法來決定。 二、必須放在第一行,只能調用一次。 三、調用構造方法時只能在構造方法中調用,調用屬性和方法時能夠在構造方法中能夠在普通方法中。 四、當全局變量和局部變量有重名字的時候,用this來區分。 三、super關鍵字 一、super指代父類對象。 二、super能夠調用屬性、方法、構造方法。 三、super調用父類的構造方法。 四、super調用構造方法時候必須放在第一行。 四、final最終的 一、能夠修飾全局變量,聲明的時候必須賦值,只能賦值一次。 二、能夠修飾局部變量,聲明時候能夠不賦值,但也只能賦值一次。 三、能夠修飾方法,能夠正常使用,不能被重寫。 四、能夠修飾類,能夠正常使用,不能被繼承。 五、用final修飾的屬性一般叫常量。 六、static final 全局變量。每一個字母都要大寫。 五、this和super的區別 一、this指的是本類建立的對象。 super指代的是父類的對象 二、this能夠調用屬性、方法、構造方法。 super也能夠調用屬性、方法、構造方法。 三、this調用屬性和方法的時候,調用本身本類的屬性和方法。 若是本類沒有,那就用super去父類中找 四、this調用構造方法調用,調用本類的其餘構造方法。 super調用父類的構造方法。 五、this和super在調用構造方法的時候必須放在第一行。 六、this和super不能同時存在 六、最小做用域最強原則: 局域變量在此方法中,比全局變量在此方法中的做用強。
6、面向對象的三大特徵
一、封裝
做用:提升代碼的安全性
一、將屬性私有化,並提供對外界的接口(get/set方法)。 二、用private修飾的屬性和方法,只能在本類中使用。
二、繼承
做用:提升代碼的複用性,減小重複代碼
一、子類能夠繼承父類非私有的屬性和方法,不能繼承構造方法和私有的屬性和方法。 二、能夠綜合子類的共同特徵來去提煉父親的類。 三、子類在繼承父類的各類屬性和方法時,也能夠有本身的屬性和方法。 四、一個子類只能有一個父類,java只能單繼承,不能多繼承,由於多個類中的方法名相同,方法體不一樣,不知使用哪一個。 五、一個類繼承最頂端叫作基類或者超類,全部的超類叫作object 。 六、在繼承關係中,若是父類沒有無參數的構造方法,如何解決? 1>子類中添加一個和父類構造方法參數列表相同的構造方法,經過super參數傳遞給父類的構造方法 2>若是父類容許修改的時候,能夠在父類中建立一個無參的構造方法 七、在繼承關係中,代碼塊的執行順序:父靜>子靜>父構造代碼塊>父構造方法>子構造代碼塊>子構造方法
三、多態
一、分類 編譯時多態:在編譯過程當中察覺的多態,重載,向上轉型。 運行時多態:在運行過程當中察覺的多態,向下轉型。 二、向上轉型、向下轉型是在繼承關係中,向下轉型必須在向上轉型的基之上。 三、在繼承關係中,父類的對象能夠指向子類的實例,父類引用實體方法的時候,是調用子類重寫之後的方法。 四、向上轉型 父類的引用指向子類的實體 父類類名 對象名=new 子類類(); 優勢:減小重複代碼,提升代碼的複用性 缺點:父類的引用沒法調用子類特有的屬性和方法 解決方案:向下轉型 五、向下轉型: 子類對象的父類引用賦給子類 子類類名 對象名=(子類類名)父類對象; 六、 instanceof 判斷左邊的對象是否屬於右邊的類 對象名 instanceof 類名(子類類名) 七、匿名對象 new 類名() 只有堆空間,沒有棧空間,只能屬於一次,爲了節省代碼。
7、抽象abstract
做用:節省代碼,提升代碼的複用性
一、抽象類格式:訪問權限修飾符 abstract class 類名{} 二、抽象方法格式:訪問權限修飾符 abstract 返回值類型 方法名(形式參數列表); 注意: 一、若是一個類裏有抽象方法,那麼這個類必須聲明成抽象類。 二、一個類裏面能夠沒有抽象方法,能夠有非抽象方法, 三、類繼承抽象類: 把子類也用abstract修飾,變成抽象類。 子類重寫父類的抽象的方法 四、抽象類不能建立對象。 五、抽象類能夠有構造方法,在建立子類的時候,super隱式調用父類的構造方法,將父類的屬性和方法放到子類的對象空間裏。 六、在繼承你關係中,子類可以繼承抽象類的各類屬性和方法,除了私有的和構造方法。 七、只有公開的才能夠和abstract連用,static final private 都不能夠。 static屬於類方法,不容許覆蓋,abstract必須被覆蓋。final不能被重寫。
8、接口interface
做用:規範了代碼,提升代碼的拓展性
一、格式:訪問權限修飾符 interface 接口名稱{} 二、實現類的格式:訪問權限修飾符 class 實現類名 implements 接口名{必須重寫接口中的全部的抽象方法} 三、接口中只有全局常量和抽象方法。 四、書寫的時候能夠省略部分修飾符,系統會默認給添上。 五、接口在實現的同時去繼承,extends在implement前面。 六、接口能夠多實現,實現的也必須是接口,方法名能夠重複,實現類實現一個就好了,由於沒有方法體,不會發生衝突。
9、抽象和接口的區別
一、關鍵字:抽象類 abstract 接口interface 二、抽象類繼承 extends 接口實現 implements 三、子類繼承抽象類和 實現類實現接口的格式不一樣 四、接口中只有全局變量和抽象方法 抽象類中有各類屬性和方法 五、抽象類只能單繼承 接口能夠多實現 六、抽象類的子類只能繼承一個父類 實現類能夠實現多個接口,而且還能夠繼承父類 七、抽象類的做用:提升代碼的複用性 接口的做用:一、規範代碼二、提升代碼的拓展新
10、方法重寫override 覆蓋(多態)
1.在子類中。 二、返回值相同、方法名相同、參數列表相同。 三、訪問權限修飾符不能比父類更嚴格。 四、父類的方法不可以知足子類需求的時候,子類須要重寫父類的方法。
11、重寫和重載的區別:
一、重寫是在繼承關係中 重載是在同一個類中 二、重寫是方法名、參數列表和父類相同 重載,方法名相同,參數列表不相同(個數、類型、順序) 三、重寫返回值類型和父類相同 重載和返回值無關 四、重寫訪問權限修飾符不能比父類更加嚴格 重載沒有要求
12、訪問權限修飾符
本類中 本包中 其餘包子類 其餘包非子類
public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × ×
十3、equals
object中的equals比較的是地址,底層封裝的是== ==比較的是基本數據類型,比較的是內容 引用數據類型比較的是地址 String中也有equals,String中的equals被重寫過了,比較的是內容。
十4、空指針異常
一、聲明瞭對象名,但沒有給對象初始化,而後使用這個對象 二、遇到了類類型做爲屬性的時候,就必須初始化,不然就會報錯
十5、內部類
分類:成員內部類、靜態內部類、局部內部類、匿名內部類
一、成員內部類: 一、能夠用四種訪問權限修飾符修飾 二、能夠有本身的屬性和方法,除了靜態的。 三、可使用外部類的全部屬性和方法,包括私有的。 四、建立對象 一、經過建立外部類對象的方式建立對象 外部類 外部類對象=new 外部類(); 內部類 對象名=外部類對象.new 內部類(); 二、內部類 對象名=new 外部類.new 內部類(); 二、靜態內部類 一、格式:static class 類名{} 二、能夠聲明靜態的屬性和方法 三、可使用外部的靜態的屬性和方法 四、建立對象 內類名 對象名=new 內類名();(能夠直接建立) 外部類名.內部類 對象名=new 外部類.內部類(); 包名.外部類名.內部類 對象名=new 包名.外部類.內部類(); 五、外部類與內部類同名時,默認是使用內部類對象調用外部類屬性 this表明內部類對象 六、要想使用外部類屬性,須要使用外部類對象調用 三、局部內部類 一、在方法中聲明 二、只能用default修飾 三、能夠聲明屬性和方法,但不能是靜態的 四、建立對象,必須在聲明內部類的方法內建立 五、調用方法的時候,局部內部類纔會被執行 四、匿名內部類 一、匿名內部類只是用一次 二、格式: 父類或接口名 對象名=new 父類或接口名(參數列表){ 重寫抽象方法 } 調用抽象方法:對象名.方法名
十6、模式
一、單例模式 分類:懶漢式、餓漢式 一、構造方法私有化 二、在本類中建立本類對象 三、保證對象的惟一性final 四、給外界提供獲得對象的方法 static 五、在多線程中,餓漢式安全,懶漢式不安全 二、簡單工廠模式 批量建立對象 1 建立工廠類 : 建立對象的方法 2 果汁類 是全部種類果汁的父類 3 在工廠類的方法中返回果汁類 4 根據測試類中傳遞的字符串判斷到底返回哪一種果汁 5 測試類經過工廠類返回果汁對象 三、建造者模式 內部類使用場景 目的:靜態內部類建立外部類對象 一、 建立外部類,在其中建立一個靜態內部類 二、靜態內部類中寫屬性,構造方法和set get方法 三、靜態內部類中寫一個方法,必須返回外部類對象 四、 給外部類建立對象,傳遞參數。 四、裝飾者模式 一、在處理流中使用 二、子類重寫父類的方法,提升父類方法的功能及效率 三、爲了儘量減小重複代碼,在重寫的方法中用父類的對象調用父類原來的方法 四、獲得父類對象能夠經過將父類對象做爲子類屬性,經過子類構造方法傳遞父類對象
1、一維數組
一、聲明: int a[]; int []b; 二、初始化: 動態初始化:一、a=new int[2]; int[0]=1;... 動態初始化:二、b=new b[]{3,4}; 靜態初始化:int [] c={5,6}; 三、數組經常使用的方法: 排序:Array.sort(); 查找:Array.binarySearch(); 打印:Array.toString(); 複製:Array.copyof(); 四、經常使用操做 一、冒泡排序 for(int i=0;i<a.length-1;i++){//控制外循環的次數 for(int j=0;j<a.length-1-i;j++){//控制內循環次數,比外循環少一次,與下一個比較 if(a[j]>a[j+1]){ int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } 二、選擇排序 for (int i = 0; i < a.length-1; i++) { int k=i; for (int j = i; j < a.length-1; j++) { if (a[k]>a[j+1]) { k=j+1; } } if(i!=k){ int temp=a[i]; a[i]=a[k]; a[k]=temp; } } 三、順序查找 public static int find(int []b,int a){ for (int i = 0; i < b.length; i++) { if (a==b[i]) { return i; } } return -1;