欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      Java基礎(chǔ)知識點總結(jié)-Ch1

      時間:2019-05-14 03:18:27下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《Java基礎(chǔ)知識點總結(jié)-Ch1》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《Java基礎(chǔ)知識點總結(jié)-Ch1》。

      第一篇:Java基礎(chǔ)知識點總結(jié)-Ch1

      Java基礎(chǔ)知識點總結(jié)

      第一章 Java語言概述

      1.面性對象語言的基本特征。

      Java語言的特點。最大優(yōu)勢。

      Java語言是區(qū)分大小寫的。

      2.Java虛擬機(jī)的核心。

      環(huán)境變量classpath設(shè)置中的“.;”是指可以加載應(yīng)用程序當(dāng)前目錄及其子目錄中的類。環(huán)境變量的變量值的最后是以“rt.jar;.;”結(jié)束。

      3.編寫源文件時不可以使用Word編輯器,因為他含有不可見字符。

      要用記事本或Edit。源文件的擴(kuò)展名是java。

      4.一個Java應(yīng)用程序的源文件必須有一個類含有public static void main(String args[ ])的方法,這樣類的應(yīng)用程序叫做主類。

      5.源文件的名稱必須與有public修飾的類的名稱相同。

      若源文件有多個類,那么只能有一個是public類;

      若只有一個類是 public類,那么源文件的名字必須與這個類的名字完全相同,擴(kuò)展名是.java;

      若源文件沒有public類,那么源文件的名字只要和某個類的名字相同即可,并且擴(kuò)展名為.java。

      6.編譯時,Java編譯器是什么。

      進(jìn)入某個文件夾的命令是“cd 目錄名”;退出某個文件夾的命令是“cd..”。

      7.編譯源文件后將生成多個擴(kuò)展名為.class的文件,每個擴(kuò)展名是.class的文件夾存放一個類的字節(jié)碼文件,文件名與該類的類名相同。這些字節(jié)碼文件被存放在與源文件相同的目錄中。

      8.運(yùn)行時,Java解釋器是什么。

      Java應(yīng)用程序總是從主類的main方法開始執(zhí)行。

      9.在運(yùn)行字節(jié)碼文件是不可以帶有擴(kuò)展名。

      當(dāng)Java應(yīng)用程序有多個類時,Java命令執(zhí)行的類名必須是主類的名字(不帶擴(kuò)展名)。

      10.例子:有一個源文件名字叫Apple.java,其中包括3個類,名字分別是Apple, Banana, Orange,有1個是主類,則主類名是什么,生成多少個字節(jié)碼文件,字節(jié)碼文件名稱是什么,在編譯,運(yùn)行時語句分別是怎樣的。

      11.Application程序又稱什么,Applet程序又稱什么,哪一個是源文件編譯時運(yùn)行的程序。

      12.J開發(fā)一個Java程序要經(jīng)過的三個步驟。

      13.單行注釋,多行注釋的標(biāo)記分別是什么

      14.javac *.java的意思。

      15.Allmans風(fēng)格又稱什么,Kernighan風(fēng)格又稱什么,兩者各自的意思是什么。

      第二篇:JAVA基礎(chǔ)知識點總結(jié)

      1)開發(fā)Java語言的公司? Sun(Sun Microsystems)太陽微電子公司開發(fā) 2)

      Java的3個版本?

      J2SE(Java2 Standard Edition)標(biāo)準(zhǔn)版

      J2EE(Java 2 Platform,Enterprise Edition)企業(yè)版 J2ME(Java 2 Micro Edition)微小版

      在5.0以后新版本中稱作:JavaSE JavaEE JavaME 3)

      Java語言的幾個主要特點?平臺無關(guān)性:能運(yùn)行于不同的平臺上

      安全性:去掉了指針操作,內(nèi)存由操作系統(tǒng)分配 面向?qū)ο螅豪妙愂钩绦蚋永诰S護(hù)

      分布式:可以使用網(wǎng)絡(luò)文件和使用本機(jī)文件一樣容易 健壯性:檢查程序編譯和運(yùn)行的錯誤 4)

      Java的三大核心機(jī)制

      虛擬機(jī)機(jī)制:利用虛擬機(jī)解釋字節(jié)碼執(zhí)行java程序?qū)崿F(xiàn)跨平臺 垃圾收集機(jī)制:自動內(nèi)存回收

      代碼安全性機(jī)制:加載代碼后校驗代碼后再執(zhí)行代碼 第2章Java語言的開發(fā)環(huán)境 1)

      JDK是什么?

      JDK(Java Development Kit)Java開發(fā)工具包。包括了JRE,是開發(fā)Java的人員必備的開發(fā)運(yùn)行Java程序的工具。2)

      JRE是什么?

      JRE(Java Runtime Environment)Java運(yùn)行環(huán)境,運(yùn)行JAVA程序所必須的環(huán)境的集合,包含JVM標(biāo)準(zhǔn)實現(xiàn)及Java核心類庫。3)

      JVM是什么?

      JVM(Java Virtual Machine)Java虛擬機(jī),它是一個虛構(gòu)出來的計算機(jī),是通過在實際的計算機(jī)上仿真模擬各種計算機(jī)功能來實現(xiàn)的。4)

      安裝JDK的操作系統(tǒng)問題?

      必須針對于不同的操作系統(tǒng)下載安裝不同的JDK,例如windows下安裝針對于windows的JDK,linux下安裝針對于linux的JDK。

      5)需要配置的相關(guān)環(huán)境變量? path:用于搜索外部命令,例如編譯程序的javac命令,執(zhí)行程序的java命令

      classpath:用于搜索類,即class文件,例如可以在不同的位置執(zhí)行類文件 6)

      配置環(huán)境變量的方式? 有兩種:臨時配置和持久配置

      臨時配置:在命令行下用set 變量名=變量值,僅在當(dāng)前命令行窗口有效

      持久配置:在我的電腦——屬性中配置,持久有效 7)可以編寫Java程序的常見開發(fā)工具? 記事本,EditPlus,ULTRAEDIT,Eclipse,Jbuilder,NetBeans 8)

      Java文件的類型?

      有兩種:

      擴(kuò)展名為java的文件:是Java源文件,屬于編譯之前的純文本文件,存儲java源代碼。

      擴(kuò)展名為class的文件:是Java類文件,屬于編譯之后的二進(jìn)制文件,存儲字節(jié)碼。9)

      Java的編譯運(yùn)行原理?

      首先編寫java源文件,然后編譯成class類文件,然后通過虛擬機(jī)解釋成機(jī)器碼到硬件執(zhí)行。

      10)Java是編譯型語言還是解釋型的語言?

      既不是完全編譯型,也不是完全解釋型,是半編譯半解釋的。第3章Java程序的基本結(jié)構(gòu) 1)

      Java語言區(qū)分大小寫嗎?

      區(qū)分,不管是數(shù)據(jù)還是標(biāo)識符或者關(guān)鍵字都區(qū)分大小寫,例如public不能寫成Public,“abc”不能寫成“ABC”,int i不能寫成INT I等等。2)main方法是作什么用處的? 這是程序的入口方法,是由虛擬機(jī)自動調(diào)用的。

      3)語句必須用分號結(jié)束嗎? 必須的,但是代碼塊{}可以用分號結(jié)束,也可以不用分號結(jié)束

      4)

      Java中有幾種注釋,各自的功能

      有三種:

      單行注釋//:加在行首只能注釋一行 多行注釋/* */:注釋多行,但不能嵌套使用

      文檔注釋/***/:用于生成HTML形式的文檔,需要配合javadoc命令實現(xiàn) 5)Java語言的數(shù)據(jù)類型是強(qiáng)類型還是弱類型? 是強(qiáng)類型,意味著每一個變量都必須明確聲明數(shù)據(jù)類型。6)

      Java語言中數(shù)據(jù)類型的劃分?有什么區(qū)別? 分成基本類型和引用類型兩大類。

      基本類型:有8種,只能存儲單一的值,不以對象的形式存在引用類型:除了基本類型之外其他的都是引用類型,能夠存儲復(fù)雜數(shù)據(jù)類型,以對象的形式存在 7)

      基本類型都有哪8種類型? 布爾類型:boolean 占1字節(jié) 字符類型:char 占2字節(jié)

      整型:byte 占1字節(jié) short 占2字節(jié) int 占4字節(jié) long 占8字節(jié)

      浮點型:float 占4字節(jié)double 占8字節(jié) 8)

      布爾值可不可以用0或者非0數(shù)代替?

      不可以,布爾值只能是true和false,不能使用數(shù)字,這和C語言是不一樣的。9)

      直接寫個整數(shù)10默認(rèn)是什么類型的?

      整型的直接量例如10,100等默認(rèn)的數(shù)據(jù)類型都是int型 10)如何讓一個整型的直接量變成long型的? 在直接量后面加大寫L后者小寫l,例如10L 11)整型數(shù)據(jù)在程序中直接使用可以使用什么進(jìn)制? 10進(jìn)制,8進(jìn)制,16進(jìn)制,但不能使用二進(jìn)制 12)浮點運(yùn)算在Java中有沒有誤差? 有誤差,所以精密運(yùn)算請使用BigDecimal類 13)直接寫一個3.14的直接量是什么數(shù)據(jù)類型的?

      是double型,如果想表示是float的3.14必須寫成3.14F或者3.14f,double型的3.14也可以寫成3.14D 14)char型采取的是什么類型的字符集?

      是Unicode全球統(tǒng)一編碼,支持任何世界上官方的語言中的字符

      15)常見的轉(zhuǎn)義字符有哪些? 轉(zhuǎn)義序列 名稱 b 退格 t 制表 n 換行 r

      回車

      ” 雙引號 ’ 單引號 反斜杠

      16)常見的Unicode字符對應(yīng)的編碼?

      大寫的A到Z是對應(yīng)65到90,小寫的a到z是對應(yīng)97到122,字符0到9是對應(yīng)48到57

      17)空字符是不是用’’(兩個并列的單引號)來表示? 不是,空字符用’u0000’來表示,兩個并列的單引號什么也不是。

      18)點,分號,花括號的各自的作用?

      點的作用有兩個:一個是使用類或?qū)ο笾械某蓡T,用對象.成員,再一個就是包名和子包名之間的分隔符,例如頂層包名.子包名 分號的作用是表示語句結(jié)束 花括號的作用是代表一個語句塊

      19)語句和關(guān)鍵字之間可以有任意的空白嗎? 可以的,例如System.out.println(100);就是正確的語句,但是關(guān)鍵字本身不能加空白或換行

      20)標(biāo)識符是什么?

      標(biāo)識符就是指在程序中給包,類,接口,方法,變量起的名字 21)標(biāo)識符有什么起名規(guī)則? 1. 應(yīng)以字母、下劃線、美元符開頭 2. 后跟字母、下劃線、美元符或數(shù)字 3. 不能用關(guān)鍵字和保留字

      4. 嚴(yán)格區(qū)分大小寫 5. 名稱長度沒有限制 22)中文的變量名可以嗎?

      是可以的,例如 int 數(shù)字 = 10;這個語句是正確的。因為java中采取Unicode字符集,所以任何的Unicode中的字符都可以作為標(biāo)識符的名稱,但考慮字符集的支持問題推薦還是使用英文字母命名。

      23)關(guān)鍵字和保留字有區(qū)別嗎?

      在1.5后沒有區(qū)別,都被稱作關(guān)鍵字,但是1.5之前認(rèn)為關(guān)鍵字是在Java中有特殊用途的不允許編程人員擅自改作其他用途,而保留字是在Java中沒有特殊用途但不允許編程人員擅自改作其他用途,按此說法goto和const應(yīng)該是此意義上的保留字。

      24)true,false,null可以用作標(biāo)識符命名嗎?

      不可以,這3個雖然不是關(guān)鍵字,但都是有特殊用途的值,也不能作為標(biāo)識符命名

      25)一條聲明語句可以聲明多個變量嗎? 可以的,例如以下聲明都是正確的int i;int i,j;int i = 10,j;int i,j = 10;

      int i = 10,j = 20;

      26)變量在沒有賦值的情況下可以使用嗎?

      不可以,變量沒有賦值使用會報出變量未初始化的編譯錯誤。27)常量有什么特點?

      在聲明變量的時候加上final修飾符即為常量,表示這個變量只能被賦一次值。

      28)算數(shù)運(yùn)算符有哪些? 基本算數(shù)運(yùn)算符有+-* / % ++--

      29)單目運(yùn)算符,雙目運(yùn)算符,三目運(yùn)算符都是什么意思? 其實也有叫一元運(yùn)算符,雙元操作符,三元操作符的,指的是

      有幾個操作數(shù)形成一個完整表達(dá)式,例如++就是一個單目運(yùn)算符,只需要一個操作數(shù)就可以形成表達(dá)式,像i++,而+運(yùn)算符就是雙目運(yùn)算符,需要兩個操作數(shù)形成表達(dá)式,例如5 + 3,還有三目運(yùn)算符,例如5 > 3 ? 0 :-1

      30)++和--放在前面和放在后面有什么區(qū)別?

      如果是在一個表達(dá)式中,那++放后面表示先運(yùn)算表達(dá)式,然后再進(jìn)行自增運(yùn)算,如果在一個表達(dá)式中,++放前面,則表示先進(jìn)行自增運(yùn)算然后在運(yùn)算表達(dá)式。--同樣道理。例如: int i = 10;int j = i ++;//先進(jìn)行賦值運(yùn)算然后再進(jìn)行自增運(yùn)算j的結(jié)果是10

      int i = 10;

      int j = ++ i;//先進(jìn)行自增運(yùn)算然后再進(jìn)行賦值運(yùn)算

      j的結(jié)果是11

      31)-5 % 2等于幾,5 %-2等于幾?

      -5 % 2等于-1,5%-2等于1,運(yùn)算得到是正數(shù)還是負(fù)數(shù)取決于第一個操作數(shù)的符號 32)5 / 2 結(jié)果是不是2.5?

      不是,是2,因為5和2都是int類型,所以不可能得到double型的結(jié)果。

      33)比較運(yùn)算符有哪些?

      有><>=<===!= 六項基本比較運(yùn)算 34)任何數(shù)據(jù)類型都可以使用> < >= <=運(yùn)算符嗎?

      不是所有數(shù)據(jù)類型,例如true>false這個表達(dá)式就是編譯錯誤,布爾類型和引用類型的表達(dá)式只能用==和!=兩個比較運(yùn)算,例如”abc” <= ”xyz” 這個表達(dá)式也是編譯錯誤的 35)’a’ > ’b’這個表達(dá)式編譯正確嗎?

      編譯正確,’a’和’b’是字符類型,內(nèi)部用Unicode編碼表示的話a是97,b是98,所以實際上比較的是97>98,結(jié)果為false 36)邏輯運(yùn)算符有哪些?

      有 &邏輯與,|邏輯或,!邏輯非,^ 異或,&& 短路與,||短路或

      37)邏輯與,邏輯或和短路與,短路或有什么區(qū)別? 邏輯與和短路與的區(qū)別是: ?

      如果是邏輯與&,不管第一個表達(dá)式是true還是false,都會執(zhí)行第二個表達(dá)式,例如a > b & x < y,即使a > b為false,也會執(zhí)行x > y ?

      如果是短路與&&,如果第一個表達(dá)式為false,將不會執(zhí)行第二個表達(dá)式

      例如a > b && x < y,如果a > b為false,就不會執(zhí)行x > y

      以此類推,邏輯或和短路或的區(qū)別是:

      ? 如果是邏輯或|,不管第一個表達(dá)式是true還是false,都會執(zhí)行第二個表達(dá)式 ?

      如果是短路或||,如果第一個表達(dá)式為true,將不會執(zhí)行

      第二個表達(dá)式

      38)與或非三個邏輯運(yùn)算符的優(yōu)先級是怎么排列的? “非”優(yōu)先級最高,“與”其次,“或”優(yōu)先級最低 39)原碼,反碼,補(bǔ)碼分別是什么意思? ?

      原碼:將數(shù)字轉(zhuǎn)換為二進(jìn)制,第一位為符號位,正數(shù)為0,負(fù)數(shù)為1

      例如:12的原碼是00001100-12的原碼是10001100 ?

      反碼:正數(shù)的反碼和原碼相同,負(fù)數(shù)的反碼將原碼符號位之外的位逐位取反

      例如:12的反碼是00001100-12的反碼是11110011 ?

      補(bǔ)碼:正數(shù)的補(bǔ)碼和原碼相同,負(fù)數(shù)的補(bǔ)碼將反碼加1 例如:12的補(bǔ)碼是00001100-12的補(bǔ)碼是11110100 最后強(qiáng)調(diào)一點,計算機(jī)存儲數(shù)據(jù)用補(bǔ)碼形式來存儲。40)位運(yùn)算符都有哪些?

      &與 |或 ^異或 ~非 >>右移 <<左移 >>>無符號右移 41)1<<35怎么理解?

      1是int類型是32位,所以需要把35%32=3,所以事實上是和執(zhí)行1<<3等價的42)數(shù)據(jù)類型轉(zhuǎn)換需要遵循什么原則?

      小類型向大類型轉(zhuǎn)換,是自動轉(zhuǎn)換的,或者說隱式轉(zhuǎn)換的 大類型向小類型轉(zhuǎn)換,是需要強(qiáng)制轉(zhuǎn)換的,或者說顯式轉(zhuǎn)換例如:byte b = 1;

      short s = b;//自動轉(zhuǎn)換

      b =(byte)s;//強(qiáng)制轉(zhuǎn)換

      43)byte b = 10這個語句是正確的,為什么10是int型比byte大還不需要強(qiáng)制轉(zhuǎn)換呢?

      因為在java中做了特殊處理,其中規(guī)定byte,short,char類型可以直接賦予int類型的直接量,例如: byte b = 10;short s = 10;char c = 10;

      以上賦值語句都是正確的。

      但是不能超出超出類型的范圍,例如以下賦值就是錯誤的: byte b = 128;

      如果超出范圍,必須得作強(qiáng)制轉(zhuǎn)換,例如以下語句是正確的: byte b =(byte)128;

      需要強(qiáng)調(diào)的是,必須是int類型的直接量,以下語句就是錯誤的: byte b = 10L;

      10L不是int類型的直接量。

      44)byte b =(byte)300;強(qiáng)制轉(zhuǎn)換后的結(jié)果是44,是按照什么規(guī)律得出來的?

      是先把300轉(zhuǎn)換成二進(jìn)制,然后根據(jù)byte類型的大小截取了后8個位

      300的補(bǔ)碼是00000000 00000000 00000001 00101100

      b的結(jié)果是:00000000 00000000 00000001 00101100 結(jié)果為44 45)byte b =(byte)true;這個轉(zhuǎn)換成立嗎?

      不成立,布爾值和數(shù)字是不兼容的,不能作任何轉(zhuǎn)換。

      46)int i =(int)“100”;這個轉(zhuǎn)換成立嗎?

      不成立,引用類型和基本類型是不能直接強(qiáng)制轉(zhuǎn)換的,需要用包裝類的方法來轉(zhuǎn)換。

      47)char型和short型哪個比較大?

      不能說哪個大,哪個小,這兩個類型char的取值是從0~65535,而short類型的取值是-32768~32767,這個兩個類型之間的轉(zhuǎn)換都需要強(qiáng)制轉(zhuǎn)換。

      48)字符串是不是基本類型?

      不是,String是java.lang包中的一個類,是引用類型的,8種基本類型中沒有一個是String類型。49)空字符串用什么來表示?

      用””(兩個并列的雙引號)表示,代表0個長度的字符串對象。50)String s = “”;和String s = null;有什么區(qū)別?

      第一個表示s被賦值,指向了一個字符串對象,第二個表示s沒有指向任何對象實例,是真空

      51)兩個字符串用什么運(yùn)算符可以連成一個字符串? 用+運(yùn)算符,例如”abc” + “xyz”最后的結(jié)果就是“abcxyz” 52)數(shù)學(xué)運(yùn)算符加法和字符串連接符都是+,怎么區(qū)分? 是通過運(yùn)算符兩邊的操作數(shù)來判斷的,如果兩邊的操作數(shù)都是數(shù)字型的基本類型,則進(jìn)行數(shù)學(xué)運(yùn)算,如果兩邊的操作數(shù)有一個是字符串,則把另一個操作數(shù)也轉(zhuǎn)換為則進(jìn)行字符串連接運(yùn)算。例如:+ 4 的結(jié)果是9 “5” + 4的結(jié)果是54

      53)判斷字符串內(nèi)容相同用什么方法?

      用equals方法判斷內(nèi)容相同,==只能判斷引用是否相同 54)提供用戶輸入使用哪個類 使用javav.util.Scanner類

      55)if語句可以用if(-1)形式判斷嗎? 不可以,數(shù)字不能代替布爾值

      56)if語句和循環(huán)語句的花括號什么時候可以省略?

      當(dāng)執(zhí)行的語句只有一句的時候 57)switch語句有哪些規(guī)則?

      表達(dá)式expr的返回值必須是下述幾種類型之一:int, byte, char, short或枚舉常量;

      case子句中的值必須是常量,且所有case子句中的值應(yīng)是不同的,也必須是下述幾種類型之一:int, byte, char, short或枚舉常量

      default子句是任選的;

      break語句用來在執(zhí)行完一個case分支后使程序跳出switch語句塊;

      58)對于退出循環(huán)break和continue有什么區(qū)別? break是退出整個循環(huán)

      continue是退出當(dāng)前循環(huán)繼續(xù)下一次循環(huán) 59)聲明數(shù)組創(chuàng)建數(shù)組的方法? 以下聲明都是合法的: int [] a;int a[];String[] a;

      以下創(chuàng)建數(shù)組對象都是合法的: int[] a = new int[3];int[] a = {1,2,3};int[] a = new int[] {1,2,3};

      60)int[] x和String[] s這兩個數(shù)組對象,哪個是基本類型,哪個是引用類型?

      兩個都是數(shù)組對象,都是引用類型的61)數(shù)組元素下標(biāo)最小是多少,最大是多少,超出范圍會怎么樣?

      最小是0,最大是數(shù)組元素個數(shù)減一,超出范圍將會出現(xiàn)下標(biāo)越界異常

      62)得到數(shù)組長度用length屬性還是length()方法? 是length屬性,得到字符串長度才有l(wèi)ength方法

      63)聲明int[][] a = new int[3][],a是一個二維數(shù)組,a[0]本身

      是什么類型的?

      二維數(shù)組的元素都是一維數(shù)組,a[0]是int[]類型的 64)數(shù)組的大小一經(jīng)創(chuàng)建可不可以改變大小了? 不可以,數(shù)組是定長的,一經(jīng)創(chuàng)建就不能再改變大小了 65)可以把2個int型,3個double型,4個String型的值放到一個數(shù)組中嗎?

      不可以,數(shù)組的元素類型必須是相同類型的。66)java中的多維數(shù)組必須是要形成矩陣排列嗎? 不一定,也可以是不規(guī)則的。67)操作數(shù)組比較方便的實用類?

      java.util.Arrays類提供了很多關(guān)于數(shù)組的實用方法。第4章對象和類 1)OOP是什么意思? Object Oriented Programming(面向?qū)ο缶幊?

      2)

      類和對象的區(qū)別?

      類:對象的藍(lán)圖,生成對象的模板,是對一類事物的描述,是抽象的概念上的定義

      對象:對象是實際存在的該類事物的每個個體,因而也稱為實例 3)

      類之間的3種關(guān)系? 依賴關(guān)系(uses-a)聚集關(guān)系(has-a)繼承關(guān)系(is-a)4)

      一個java源文件可以寫多個類嗎?

      可以,但必須只能有一個公有類,并且文件名和公有類的類名相同。5)類中有哪些成員?

      有屬性(數(shù)據(jù)域),方法,構(gòu)造器(構(gòu)造方法)

      6)

      構(gòu)造方法和普通方法的區(qū)別?

      構(gòu)造方法沒有返回值,方法名必須和類名相同,需要用new語句調(diào)用構(gòu)造方法。7)

      普通方法可不可以也類名作為方法名?

      是可以的,因為調(diào)用普通方法的語法和調(diào)用構(gòu)造器的語法不一樣。8)

      一個構(gòu)造器調(diào)用另外一個構(gòu)造器需要用什么語法? 用this()語法調(diào)用另外一個重載構(gòu)造器,需要注意的是調(diào)用語句必須是構(gòu)造器中的第一句 9)

      什么時候虛擬機(jī)會自動添加一個默認(rèn)構(gòu)造器?

      當(dāng)類中沒有顯式定義任何構(gòu)造器的時候,虛擬機(jī)會自動添加一個無參的構(gòu)造器

      10)實例成員和靜態(tài)成員的區(qū)別?

      實例成員:是屬于對象實例的,用對象.成員名稱語法調(diào)用 靜態(tài)成員:和對象實例無關(guān),是屬于類本身的,用類名.成員名稱語法調(diào)用

      11)靜態(tài)初始化塊statci{}的執(zhí)行時機(jī)是什么時候? 在類被加載的時候,僅執(zhí)行一次。

      12)靜態(tài)方法可不可以直接調(diào)用同一個類中的非靜態(tài)方法? 不可以,靜態(tài)方法不能直接調(diào)用一個非靜態(tài)成員,需要用對象調(diào)用。

      13)包是什么?

      包實際上就是物理上的文件夾,可以把類放到不同的包中。14)把一個類放到包中,需要在類中加上什么語句? 需要加上包聲明package語句,必須寫在源文件的第一句。15)什么時候需要導(dǎo)入類?用什么語句?

      當(dāng)使用的類和當(dāng)前類并不在同一個包中的時候,用import語句導(dǎo)入。

      16)默認(rèn)包中的類可以導(dǎo)入嗎?

      不可以,不在默認(rèn)包中的類無法使用默認(rèn)包中的類。17)java中哪個包中的類是自動導(dǎo)入的? java.lang包

      18)什么叫做完整類名? 頂層包名.子包名.類名

      19)靜態(tài)導(dǎo)入語句有什么作用?

      在使用類中的靜態(tài)成員的時候前面不需要加類名前綴。

      20)局部變量和全局變量的區(qū)別? 區(qū)別 局部變量 全局變量

      聲明位置 方法或塊內(nèi)部 方法外類內(nèi)部 訪問權(quán)限修飾符 沒有訪問權(quán)限 有訪問權(quán)限

      默認(rèn)值 沒有默認(rèn)值

      有默認(rèn)值

      使用形式 直接使用 對象調(diào)用

      作用域

      在方法或語句塊內(nèi)部 整個類

      生命周期 進(jìn)入方法或語句塊創(chuàng)建退出方法或語句塊銷毀 隨著對象的創(chuàng)建而創(chuàng)建隨著對象的銷毀而銷毀

      21)賦值語句賦給目標(biāo)的是值還是引用?

      如果是基本類型則賦的是值本身,引用類型則賦的是引用地址 第5章繼承和多態(tài) 1)類的繼承是誰繼承誰?

      是子類繼承了父類,子類也稱為派生類,父類也稱為超類或基

      類 2)子類繼承了父類的什么東西?

      子類可以繼承父類的數(shù)據(jù)域(屬性),方法,但構(gòu)造器不能繼

      承 3)

      私有成員能被子類繼承嗎?

      能繼承,但是由于訪問權(quán)限的控制,在子類中不能直接使用父類的私有成員 4)

      Object是什么類?

      這個所有類的根類,任何類如果沒有寫顯式的繼承語句,默認(rèn)都是直接繼承Object類的 5)java中是單繼承還是多繼承?

      是單繼承,一個子類只能有一個父類 6)

      訪問權(quán)限修飾符有幾種,訪問的范圍又是多大? 有四種:

      private:私用 只能在被類中被訪問 default:默認(rèn) 只能被同一個包中的類訪問

      protected:受保護(hù)的 只能被同一個包中的類和不同包中的子類

      訪問

      public:公有 可以被任何類訪問 7)

      覆蓋方法的規(guī)則有哪些?

      子類覆蓋方法和父類被覆蓋方法的方法返回類型,方法名稱,參數(shù)列表必須相同

      子類覆蓋方法的訪問權(quán)限必須大于等于父類的方法的訪問權(quán)限

      方法覆蓋只能存在于子類和父類之間

      子類覆蓋方法不能比父類被覆蓋方法拋出更多異常 8)

      參數(shù)列表是否相同從哪幾方面看?

      從三方面看:參數(shù)個數(shù),類型和順序,需要注意的是參數(shù)的名字不相同是無所謂的 9)

      覆蓋方法的規(guī)則有哪些? 方法名相同

      方法的參數(shù)類型,個數(shù),順序至少有一項不同 方法的返回類型和修飾符均不受限制

      10)可變長參數(shù)的聲明格式是什么?實際上是什么類型的? 類型 ? 變量,實際上是一個一維數(shù)組 11)this和super是作什么用處的?

      this:本身代表當(dāng)前的對象引用,可以用this.成員名稱調(diào)用當(dāng)前對象的屬性和方法,如果屬性和局部變量重名,可以用this.屬性名和局部變量區(qū)分開。也可以用this()語法調(diào)用本類重載構(gòu)造器。

      super:本事是一個特殊關(guān)鍵字,可以用super.成員名稱調(diào)用從父類繼承的屬性和方法,也可以用super()語法調(diào)用父類構(gòu)造器。

      12)super代表子類中的父類對象引用嗎?

      不,這個錯誤的說法,super不代表任何對象引用,僅僅是一個關(guān)鍵字

      13)什么時候子類構(gòu)造器會自動調(diào)用父類無參構(gòu)造器? 當(dāng)子類構(gòu)造器中沒有任何顯式構(gòu)造器調(diào)用的時候,即既沒有this()調(diào)用也沒有super()調(diào)用的時候

      14)一個父類類型的引用變量可以引用一個子類的實例嗎? 可以,這個引用變量是一個多態(tài)對象 15)多態(tài)對象有什么特點?

      多態(tài)對象只能使用父類的成員,但如果多態(tài)對象使用了被子類覆蓋的方法,則會動態(tài)綁定使用子類的成員,稱為虛擬方法調(diào)用

      16)引用類型之間的類型轉(zhuǎn)換需要遵循哪些規(guī)則? 自動轉(zhuǎn)換:從子類到父類的類型可以自動轉(zhuǎn)換 強(qiáng)制轉(zhuǎn)換:從父類到子類的類型要強(qiáng)制轉(zhuǎn)換 無繼承關(guān)系的類型轉(zhuǎn)換是非法的 17)instanceof操作符是作什么用處的?

      可以判斷一個對象的類型是否是某一個類的類型或子類,也可以判斷這個對象的類型是否是一個接口的實現(xiàn)類 18)toString方法什么時候會自動被調(diào)用?

      在打印語句中傳入引用類型的對象或者對象和字符串作連接時

      19)默認(rèn)的equals方法實現(xiàn)的是比較內(nèi)容還是比較引用地址?

      在Object中是比較引用地址。

      20)覆蓋equals方法和hashCode方法有什么規(guī)則? 必須保證當(dāng)兩個對象equals比較為true的時候,返回的hashCode相同,當(dāng)比較為false的時候,返回的hashCode不同21)java中有幾個包裝類?

      有8個包裝類,正好對應(yīng)8種基本數(shù)據(jù)類型。

      分別是:Boolean Byte Short Integer Long Character Float Double 22)裝箱和拆箱分別是什么意思?

      裝箱指的是把基本類型包裝成包裝類的引用類型 拆箱指的是把包裝類形式的引用類型轉(zhuǎn)換為基本類型 例如:

      Integer objInt = new Integer(10);//裝箱

      int i = objInt.intValue();

      //拆箱

      23)JDK1.4和1.5的裝箱和拆箱有什么區(qū)別?

      自動拆裝箱,例如: Integer intObj = 10;//自動裝箱 int i = intObj + 5;//自動拆箱

      24)final修飾符如何使用,使用了final修飾符有什么特點? final修飾符可以修飾類,方法,變量 final類為最終類,不能被子類繼承 final方法為最終方法,不能被子類覆蓋 final變量為常量,只能賦一次值

      25)abstract修飾符如何使用,使用了abstract修飾符有什么特點?

      abstract修飾符可以修飾類和方法 abstract類為抽象類,是不能創(chuàng)建對象的abstract方法為抽象方法,只有方法的聲明,沒有具體的實現(xiàn) 需要注意的是:

      有抽象方法的類一定是抽象類 抽象類不一定有抽象方法

      抽象類也有構(gòu)造器,但不能創(chuàng)建對象實例 26)abstract不能和哪些修飾符配合使用? 不能和private,static,final一起使用 27)可以在非抽象方法中調(diào)用抽象方法嗎? 可以,模板方法設(shè)計模式就是典型的這種調(diào)用 第6章 泛型程序設(shè)計 1)泛型的特點是什么? 主要特點是類型參數(shù)化,后期綁定數(shù)據(jù)類型 2)泛型支持基本類型嗎?

      不支持,只支持引用類型 3)如果沒有傳入類型參數(shù),默認(rèn)是什么類型? 默認(rèn)是Object類型

      4)泛型方法有什么特點?

      將泛型參數(shù)聲明在方法中,調(diào)用方法的時候綁定泛型 5)

      泛型類聲明泛型參數(shù)的時候,表示什

      么意思?

      表示綁定的類型必須是A類型后者是A類型的子類或?qū)崿F(xiàn)類 第7章 接口和內(nèi)部類

      1)聲明一個接口的關(guān)鍵字是什么? interface關(guān)鍵字

      2)

      接口中的成員有什么特點?

      數(shù)據(jù)域必須是(public static final修飾)公有靜態(tài)常量 方法必須是(public abstract修飾)公有抽象 沒有構(gòu)造方法 3)接口能創(chuàng)建對象實例嗎? 不能,接口沒有構(gòu)造器,不能創(chuàng)建對象

      4)

      接口和類的關(guān)系?

      接口和類之間是實現(xiàn)關(guān)系,一個類用implements語句實現(xiàn)了某接口,這個類被稱為接口的實現(xiàn)類,一個類可以實現(xiàn)多個接口,一個類實現(xiàn)了某接口,必須覆蓋這個接口中的所以方法,否則這個類必須是個抽象類 5)

      接口和接口的關(guān)系?

      接口和接口之間是繼承關(guān)系,一個接口用extends繼承另外一個接口,稱為這個接口的子接口。一個接口可以繼承多個父接口 6)

      內(nèi)部類如何定義?

      一個類聲明在另一個類的里面,這個類就被稱為內(nèi)部類,而外面的類被稱為外部類 7)

      內(nèi)部類可以分成幾種?

      實例內(nèi)部類:聲明在方法外邊沒有static修飾符 靜態(tài)內(nèi)部類:聲明在方法外邊有static修飾符 局部內(nèi)部類:聲明在方法里邊 8)

      如何創(chuàng)建實例內(nèi)部類的對象實例? 需要用外部類的對象來創(chuàng)建 例如: class A {class B {

      }

      }

      如果像創(chuàng)建B類的實例,則必須用以下語句: A a = new A();A.B b = a.new B();9)

      如何在實例內(nèi)部類中訪問外部類的成員?

      在實例內(nèi)部類中可以直接使用外部類的成員,不需要創(chuàng)建外部類的對象實例,但是如果在內(nèi)部類中的成員名稱屏蔽隱藏了外部類的成員(即外部類和內(nèi)部類的成員名相同),則需要用“外部類名.this.成員名”訪問外部類成員 第8章異常處理

      1)異常的對象的根類是哪個類? 是Throwable類

      2)

      Throwable類有哪兩個分支?

      分成Error類和Excepion類兩個分支 Error類表示嚴(yán)重錯誤

      Exception類表示可以在程序中處理的錯誤 3)

      Exception類有哪兩個分支?

      分成運(yùn)行時異常和非運(yùn)行時異常(已檢查異常)運(yùn)行時異常編譯不檢查,在運(yùn)行時才會發(fā)生異常

      已檢查異常編譯時就會作檢查,不處理異常則通不過編譯 4)如果在try塊中發(fā)生異常,那么程序?qū)D(zhuǎn)到哪? 會跳轉(zhuǎn)到catch語句塊 5)catch語句可以用父類類型捕獲子類異常嗎? 因為有多態(tài)特點,是可以的6)處理異常代碼finally語句會在什么時候執(zhí)行? finally代碼在任何時候都會執(zhí)行,不管有沒有發(fā)生異常。7)

      如何聲明已檢查異常,由誰來處理這個異常? 用throws語句來聲明一個已檢查異常,由方法的調(diào)用者來處理這個異常 8)

      如何拋出一個異常? 用throw語句拋出

      9)如何創(chuàng)建一個自定義的異常類? 創(chuàng)建一個類,只要讓它繼承任何一個現(xiàn)有的異常類就可以了 10)覆蓋方法對于異常有什么要求? 覆蓋方法不能比父類方法拋出更多異常 第9章反射,代理,標(biāo)注

      1)

      獲得一個類型的Class對象有哪幾種途徑?

      方法1:對象.getClass()方法2:類型名.class 方法3:Class.forName()2)

      反射相關(guān)的類型都有哪些? Class 代表一個運(yùn)行時類 Field 代表一個類的屬性 Method 代表一個類的方法 Constructor 代筆一個類的構(gòu)造器 3)

      如何聲明一個自定義標(biāo)注? [<修飾符>] @interface <標(biāo)注名>{ 返回值方法名稱(); 返回值方法名稱(); ?? } 例如:

      public @interface MyComment { int id();String info();} 4)

      java有幾個內(nèi)置標(biāo)注? 有3個

      @Override——用于修飾此方法覆蓋了父類的方法,而非重載。@Deprecated——用于修飾已經(jīng)過時的方法。

      @SuppressWarnings——用于通知Java編譯器禁止特定的警告。第10章 java常用類 1)

      字符串String是可變類還是不可變類?

      是不可變類,一經(jīng)創(chuàng)建就不能修改其內(nèi)容了 2)

      字符串的常用方法有哪些? charAt方法:可以返回指定位置的字符 substring方法:可以截取子字符串 length方法:返回字符串長度 indexOf方法:查找子串的位置 lastIndexOf方法:反向搜索字串的位置 replaceAll方法:替換字符串 split方法:分解字符串

      toLowerCase, toUpperCase方法:字符串大小寫轉(zhuǎn)換 3)StringBuffer類和String類有什么區(qū)別? StringBuffer是可變類,String是不可變類

      4)StringBuffer類和StringBuilder類有什么區(qū)別? StringBuffer類是線程安全的,StringBuilder類是線程不安全的5)Math類主要提供了哪些方法?

      Math類提供了大量的和數(shù)學(xué)運(yùn)算相關(guān)的靜態(tài)方法 6)Set集合和List集合共同的父接口是什么? 是Collection集合7)

      Set集合和List集合有什么區(qū)別? Set: Collection的子接口,不記錄元素的保存順序,且不允許有重復(fù)元素

      List: Collection的子接口,記錄元素的保存順序,且允許有重復(fù)元素 8)

      ArrayList和LinkedList有什么不同?

      ArrayList 的內(nèi)部實現(xiàn)是基于內(nèi)部數(shù)組Object[],所以從概念上

      講它更像數(shù)組

      LinkedList的內(nèi)部實現(xiàn)是基于一組連接的記錄,所以它更象一個鏈表 結(jié)構(gòu),所以它們在性能上有很大的差別。ArrayList 隨機(jī)訪問比較塊,但插入和刪除元素比較慢 LinkedList但插入和刪除元素比較快,但隨機(jī)訪問比較慢 9)

      HashTable和HashMap有什么不同?

      HashTable是線程安全的,HashMap是線程不安全的10)Vector和ArrayList有什么不同? Vector是線程安全的ArrayList是線程不安全的 第11章 IO流 1)

      流分成哪兩類?

      按照單位劃分分成字節(jié)流和字符流。按輸入輸出分成輸入流和輸出流 2)

      和文件流相關(guān)的有那幾個類? FileInputStream文件輸入字節(jié)流 FileOutputStream文件輸出字節(jié)流 FileReader文件輸入字符流 FileWriter文件輸出字符流 3)

      文件流操作應(yīng)該用字節(jié)流還是字符流? 如果是純文本文件應(yīng)該用字符流 如果是二進(jìn)制文件應(yīng)該用字節(jié)流 4)

      文件操作用哪個類? 用java.io.File類 第12章 線程 1)

      創(chuàng)建一個線程類的兩種方式? 繼承Thread類 實現(xiàn)Runnable接口 2)線程體應(yīng)該放在哪個方法里面? run方法 3)啟動新的線程用什么方法?

      用start方法

      4)一個線程對象能夠用start多次啟動嗎? 不可以,一個線程方法只能start一次

      5)線程有哪幾種主要狀態(tài)? 有四種,分別是:新生狀態(tài),可運(yùn)行狀態(tài),阻塞狀態(tài),死亡狀

      態(tài) 6)

      線程的同步需要用什么方法? 舊的方法是用synchronized關(guān)鍵字

      新的方法是用ReentrantLock類的lock和unlock方法

      第三篇:Java基礎(chǔ)學(xué)習(xí)知識點總結(jié)

      黑馬程序員_畢向東_Java基礎(chǔ)視頻教程

      Java基礎(chǔ)學(xué)習(xí)知識點總結(jié) 2016年01月06日

      day01

      一、基礎(chǔ)知識:軟件開發(fā)

      1、什么是軟件?軟件:一系列按照特定順序組織的計算機(jī)數(shù)據(jù)和指令的集合。

      2、常見的軟件:系統(tǒng)軟件:如:DOS,Windows,Linux等。應(yīng)用軟件:如:掃雷,迅雷,QQ等。

      3、什么是開發(fā)?制作軟件。

      二、基礎(chǔ)知識:人機(jī)交互方式

      4、軟件的出現(xiàn)實現(xiàn)了人與計算機(jī)之間的更好的交互。

      5、交互方式:圖形化界面:這種方式簡單直觀,使用者易于接受,容易上手操作。命令行方式:需要有一個控制臺,輸入特定的指令,讓計算機(jī)完成一些特定的操作。較為麻煩,需要記錄住一些命令。

      三、基礎(chǔ)知識:常用的DOS命令

      6、點擊開始在運(yùn)行欄輸入“cmd”進(jìn)入dos操作界面。

      7、課程中常見的命令:

      dir:列出當(dāng)前目錄下的文件以及文件夾。md:創(chuàng)建目錄。rd:刪除目錄。

      cd:進(jìn)入指定目錄。d:進(jìn)入盤符。cd..:退回到上一級目錄。cd/:退回到根目錄。del:刪除文件。

      exit:退出dos命令行。

      8、在dos命令行操作文件夾時,如忘記文件夾全稱,可以輸文件夾前幾個名稱后面用*代替。

      四、基礎(chǔ)知識:計算機(jī)語言

      9、通過DOS命令行的演示,發(fā)現(xiàn)原來操作計算機(jī)就如同和計算機(jī)說話一樣。

      10、我們告訴它做什么,它就可以做什么。前提是,我們和它說的內(nèi)容它必須識別才可以。這就是計算機(jī)語言。

      11、什么是計算機(jī)語言?語言:是人與人之間用于溝通的一種方式。例如:中國人與中國人用中文溝通。而中國人要和韓國人交流,就要學(xué)習(xí)韓語。

      12、計算機(jī)語言:人與計算機(jī)交流的方式。如果人要與計算機(jī)交流,那么就要學(xué)習(xí)計算機(jī)語。計算機(jī)語言有很多種,如:C,C++,Java等。這里,我們選擇其中一種:Java語言。

      五、基礎(chǔ)知識:Java語言介紹

      13、Java語言概述。是SUN(Stanford University Network,斯坦福大學(xué)網(wǎng)絡(luò)公司)1995年推出的一門高級編程語言。是一種面向Internet的編程語言。隨著Java技術(shù)在Web方面的不斷成熟,已經(jīng)成為Web應(yīng)用程序的首選開發(fā)語言。是簡單易學(xué),完全面向?qū)ο?,安全可靠,與平臺無關(guān)的編程語言。

      14、Java語言的三種技術(shù)架構(gòu)。J2EE(Java 2 Platform Enterprise Edition)企業(yè)版(現(xiàn)更名:JAVAEE):是為開發(fā)企業(yè)環(huán)境下的應(yīng)用程序提供一套解決方案。該技術(shù)體系中包含的技術(shù)如Servlet Jsp等,主要針對于Web應(yīng)用程序開發(fā)。J2SE(Java 2 Platform Standard Edition)標(biāo)準(zhǔn)版(現(xiàn)更名:JAVASE):是為開發(fā)普通桌面和商務(wù)應(yīng)用程序提供的解決方案。該技術(shù)體系是其他兩者的基礎(chǔ),可以完成一些桌面應(yīng)用程序的開發(fā)。比如Java版的掃雷。J2ME(Java 2 Platform Micro Edition)小型版(現(xiàn)更名:JAVAME):是為開發(fā)電子消費產(chǎn)品和嵌入式設(shè)備提供的解決方案。該技術(shù)體系主要應(yīng)用于小型電子消費類產(chǎn)品,如手機(jī)中的應(yīng)用程序等。

      15、Java語言的特點:跨平臺性。什么是跨平臺性?通過Java語言編寫的應(yīng)用程序在不同的系統(tǒng)平臺上都可以運(yùn)行。原理是什么?只要在需要運(yùn)行Java應(yīng)用程序的操作系統(tǒng)上,先安裝一個Java虛擬機(jī)(JVM Java Virtual Machine)即可。由JVM來負(fù)責(zé)Java程序在該系統(tǒng)中的運(yùn)行。

      16、Java語言的特點:跨平臺性。Java程序:Windows系統(tǒng):Win版的JVM;Linux系統(tǒng):lin版的JVM;MAC系統(tǒng):mac版的JVM。因為有了JVM,所以同一個Java程序在三個不同的操作系統(tǒng)中都可以執(zhí)行。這樣就實現(xiàn)了Java程序的跨平臺性。也稱為Java具有良好的可移植性。

      六、基礎(chǔ)知識:Java語言的環(huán)境搭建

      17、明確什么是JRE,JDK;下載JDK;安裝JDK;配置環(huán)境變量;驗證是否成功。

      18、什么是JRE,JDK?JRE(Java Runtime Environment Java運(yùn)行環(huán)境):包括Java虛擬機(jī)(JVM Java Virtual Machine)和Java程序所需的核心類庫等,如果想要運(yùn)行一個開發(fā)好的Java程序,計算機(jī)中只需要安裝JRE即可。JDK(Java Development Kit Java開發(fā)工具包):JDK是提供給Java開發(fā)人員使用的,其中包含了Java的開發(fā)工具,也包括了JRE。所以安裝了JDK,就不用再單獨安裝JRE了。其中的開發(fā)工具:編譯工具(java.exe)打包工具(jar.exe)等。簡單而言:使用JDK開發(fā)完成的Java程序,交給JRE去運(yùn)行。

      19、Java6.0 Platform

      20、下載JCK(Java Development Kit Java開發(fā)工具包)。官方網(wǎng)址:004km.cn、java.sun.com。下載完成后,安裝在電腦上。然后打開DOS命令行,效驗文件是否安裝完畢,并利用DOS進(jìn)行Javac.exe運(yùn)行測試。為了更方便的使用Java開發(fā)工具,需要進(jìn)行環(huán)境變量配置。配置成功后就可以進(jìn)行Java程序的開發(fā)了。

      21、環(huán)境變量配置。方法一:圖形界面操作。我的電腦——屬性——高級——環(huán)境變量;編輯Path環(huán)境變量,在變量值開始處加上Java工具所在目錄,后面用分號和其他值分隔開即可;打開DOS命令行,任意目錄下敲入javac;如果出現(xiàn)javac的參數(shù)信息,配置成功。這種配置方式,一勞永逸。具體流程:右鍵點擊我的電腦打開屬性,點擊高級系統(tǒng)設(shè)置,點擊高級,點擊環(huán)境變量,找到系統(tǒng)變量,新建系統(tǒng)變量(變量名:JAVA_HOME,變量值:安裝JKD的地址。如:D:ProgramStudioJDK1.7)點擊確定,找到變量名為Path的變量,點擊編輯,在變量值欄的最前面(放到前面時,先尋找)加入%JAVA_HOME%bin用分號隔開。方法二:DOS界面操作(可用于臨時環(huán)境變量配置,借助別人的電腦開發(fā)Java程序)。具體流程:利用set命令:設(shè)置、查看環(huán)境變量的值。Set path:查看path的值。配置Java工具包:set path=D:ProgramStudioJDK1.7bin;%path%回車。測試javac。只對當(dāng)前窗口有效。定義class路徑:Set classpath=.;c:myclass。

      七、基礎(chǔ)知識:Java程序開發(fā)體驗

      22、Hello World。將Java代碼編寫到擴(kuò)展名為.java的文件中;通過javac命令對該java文件進(jìn)行編譯;通過java命令對生成的class文件進(jìn)行運(yùn)行。Java文件——javac.exe編譯——class文件——java運(yùn)行——結(jié)果。

      23、對于初學(xué)者,可以用記事本編寫。按部就班,一步一步寫代碼。打開記事本。Java代碼是以類的形式來體現(xiàn)的。代碼如下: class TestFirstOne //Java定義類+類名(首字母大寫){ public static void main(String[] args)//主函數(shù)(保證類的獨立運(yùn)行)

      {

      System.out.println(“hello world”);//輸出打印語句

      } }

      23、classpath配置。臨時配置方式:dos配置。Set Classpath=代碼路徑?;剀?。Classpath先在環(huán)境變量中找,然后在當(dāng)前路徑(結(jié)尾沒帶分號不找)。Path先在當(dāng)前路徑查找,然后去環(huán)境變量中查找。一勞永逸方法和上面JDK環(huán)境變量配置方法一樣。

      24、Hello World組成部門。class是java程序中的關(guān)鍵字(關(guān)鍵字只能是小寫)。{}類的區(qū)間用大括號定義(類中的內(nèi)容為了增加閱讀性,需要有階梯感,如使用tab鍵)。public static void main(String[] args)定義主函數(shù)(使用大括號確定函數(shù)的內(nèi)容)。

      25、注釋。三種方式://單行注釋,符號以后直到回車鍵的內(nèi)容;/*多行注釋,符號開始到符號結(jié)束以內(nèi)的內(nèi)容*/;/**java注釋符號,可被提取出來制作軟件開發(fā)手冊*/。注釋的作用:增加程序的閱讀性;調(diào)試程序。

      26、寫代碼要養(yǎng)成寫注釋的習(xí)慣。在寫代碼前注釋相關(guān)信息。例如: /* 需求:定義一個Hello World小程序。思路: 1,2,步驟:

      1,通過class關(guān)鍵字定義一個類。將代碼都編寫到該類中。

      2,為了保證該的獨立運(yùn)行。在類中定義個主函數(shù)。格式public static void main(String[] args)3,保存成一個擴(kuò)展名為java的文件。

      4,在dos控制臺中通過javac工具對java文件進(jìn)行編譯。5,在通過java命令對生成的class文件進(jìn)行執(zhí)行。作者:ZC 版本:v1.0 日期:2016.01.06 copyright:ZC */ 2016年01月07日

      day02

      一、基礎(chǔ)知識:Java語言基礎(chǔ)組成

      1、組成:關(guān)鍵字、標(biāo)識符、注釋、常量和變量、運(yùn)算符、語句、函數(shù)、數(shù)組

      二、基礎(chǔ)知識:關(guān)鍵字

      2、關(guān)鍵字的定義和特點:定義:被Java語言賦予了特殊含義的單詞。特點:關(guān)鍵字中所有字母都為小寫。

      3、用于定義數(shù)據(jù)類型的關(guān)鍵字:class、interface、byte、short、int、long、float、double、char、boolean、void。

      4、用于定義數(shù)據(jù)類型值的關(guān)鍵字:true、false、null。

      5、用于定義流程控制的關(guān)鍵字:if、else、switch、case、default、while、do、for、break、continue、return。

      6、用于定義訪問權(quán)限修飾的關(guān)鍵字:private、protected、public。

      7、用于定義類,函數(shù),變量修飾的關(guān)鍵字:abstract、final、static、synchronized。

      8、用于定義類與類之間關(guān)系的關(guān)鍵字:extends、implements。

      9、用于定義建立實例以及引用實例,判斷實例的關(guān)鍵字:new、this、super、instanceof。

      10、用于異常處理的關(guān)鍵字:try、catch、finally、throw、throws。

      11、用于包的關(guān)鍵字:package、import。

      12、其他修飾符關(guān)鍵字:native、strictfp、transient、volatile、assert。

      三、基礎(chǔ)知識:標(biāo)識符

      13、標(biāo)識符:在程序中自定義的一些名稱;由26個英文字母大小寫,數(shù)字:0-9,符號_$組成;定義合法標(biāo)識符規(guī)則:數(shù)字不可以開頭、不可以使用關(guān)鍵字;Java中嚴(yán)格區(qū)分大小寫;注意:在起名時,為了提高閱讀性,要盡量有意義。

      14、Java中的名稱規(guī)范:包名:多單詞組成時所有都小寫,如:xxxyyyzzz;類名接口名:多單詞組成時,所有單詞的首字母大寫,如:XxxYyyZzz;變量名和函數(shù)名:多單詞組成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫,如:xxxYyyZzz;常量名:所有字母都大寫,多單詞時每個單詞用下劃線連接,如:XXX_YYY_ZZZ。

      四、基礎(chǔ)知識:注釋

      15、注釋:對于單行和多行注釋,被注釋的文字,不會被JVM(Java虛擬機(jī))解釋執(zhí)行;對于文檔注釋,是Java特有的注釋,其中注釋內(nèi)容可以被JDK提供的工具javadoc所解析,生成一套以網(wǎng)頁文件形式體現(xiàn)的該程序的說明文檔;注釋是一個程序員必須要具有的良好編程習(xí)慣;初學(xué)者編寫程序可以養(yǎng)成習(xí)慣;先寫注釋再寫代碼;將自己的思想通過注釋先整理出來,再用代碼去體現(xiàn);因為代碼僅僅是思想的一種體現(xiàn)形式而已;用于注解說明解釋程序的文字就是注釋;提高了代碼的閱讀性。

      16、Java中的注釋格式:單行注釋:格式://注釋文字;多行注釋:格式:/*注釋文字*/;文檔注釋:格式:/**注釋文字*/。

      五、基礎(chǔ)知識:常量

      17、常量表示不能改變的數(shù)值。

      18、Java中常量的分類:整數(shù)常量:所有整數(shù);小數(shù)常量:所有小數(shù);布爾型常量:較為特有,只有兩個數(shù)值:true和false;字符常量:將一個數(shù)字字母或者符號用單引號(’’)標(biāo)識;字符串常量:將一個或者多個字符用雙引號(””)標(biāo)識;null常量:只有一個數(shù)值就是null。

      19、對于整數(shù):Java有三種表現(xiàn)形式:十進(jìn)制:0-9,滿10進(jìn)1;八進(jìn)制:0-7,滿8進(jìn)1,用0表示開頭;十六進(jìn)制:0-9,A-F,滿16進(jìn)1,用0x開頭表示。

      六、基礎(chǔ)知識:進(jìn)制轉(zhuǎn)換

      20、進(jìn)制的轉(zhuǎn)換特點:八位二進(jìn)制表示一個字節(jié)(基本的數(shù)據(jù)單元)。三個二進(jìn)制位表一個八進(jìn)制位。四個二進(jìn)制位表示一個十六進(jìn)制位。ASCII碼編碼表。

      21、二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換:十進(jìn)制轉(zhuǎn)二進(jìn)制:原理:對十進(jìn)制數(shù)進(jìn)行除2運(yùn)算(除二取余法);二進(jìn)制轉(zhuǎn)十進(jìn)制:原理:二進(jìn)制乘以2的N次的過程。

      22、快捷方法:8421法則。

      23、負(fù)數(shù)的二進(jìn)制表現(xiàn)形式:對應(yīng)的正數(shù)二進(jìn)制取反加1。負(fù)數(shù)的最高位都是1。

      七、基礎(chǔ)知識:變量

      24、變量的概念:內(nèi)存中的一個存儲區(qū)域;該區(qū)域有自己的名稱(變量名)和類型(數(shù)據(jù)類型);該區(qū)域的數(shù)據(jù)可以在同一類型范圍內(nèi)不斷變化;理解:變量就如同數(shù)學(xué)中的未知數(shù);變量:就是將不確定的數(shù)據(jù)進(jìn)行存儲,也就是需要在內(nèi)存中開辟一個空間。

      25、為什么要定義變量:用來不斷的存放同一類型的常量,并可以重復(fù)使用。

      26、使用變量注意:變量的作用范圍(一對{}之間有效);初始化值。

      27、定義變量的格式:數(shù)據(jù)類型變量名=初始化值;注:格式是固定的、記住格式,以不變應(yīng)萬變。

      28、Java語言是強(qiáng)類型語言,對于每一種數(shù)據(jù)都定義了明確的具體數(shù)據(jù)類型,在內(nèi)存總分配了不同打小的內(nèi)存空間。數(shù)據(jù)類型:基本數(shù)據(jù)類型(數(shù)值型(整數(shù)類型(byte,short,int,long);浮點類型(float,double));字符型(char);布爾型(boolean));引用數(shù)據(jù)類型(類(class);接口(interface);數(shù)據(jù)([]))。注意:整數(shù)默認(rèn):int,小數(shù)默認(rèn):double。

      29、數(shù)據(jù)類型空間:byte 8位二進(jìn)制(一個8位二進(jìn)制或1個字節(jié));short 16位二進(jìn)制(二個8位二進(jìn)制或2個字節(jié));int 32位二進(jìn)制(四個8位二進(jìn)制或4個字節(jié));long 64位二進(jìn)制(八個8位二進(jìn)制或8個字節(jié));float(單精度)32位二進(jìn)制(四個8位二進(jìn)制或4個字節(jié));double(雙精度)64位二進(jìn)制(八個8位二進(jìn)制或8個字節(jié));char 取值:0-65535;boolean取值:true,false。

      30、類型轉(zhuǎn)換。不同類型的數(shù)據(jù)不能進(jìn)行運(yùn)算。需要進(jìn)行數(shù)據(jù)類型提升,從小往大提升,自動數(shù)據(jù)類型提升。強(qiáng)制類型轉(zhuǎn)換:格式:變量=(類型名)(需轉(zhuǎn)換的數(shù)據(jù));什么時候使用強(qiáng)制轉(zhuǎn)換:如:小數(shù)保留整數(shù)部分。

      31、表達(dá)式的數(shù)據(jù)類型自動提升:所有的byte型、short型和char的值將被提升到int型;如果一個操作數(shù)是long型,計算結(jié)果就是long型;如果一個操作數(shù)是float型,計算結(jié)果就是float型;如果一個操作數(shù)是double型,計算結(jié)果就是double型。分析:system.out.println(‘a(chǎn)’)與system.out.println(‘a(chǎn)’+1)的區(qū)別。

      八、基礎(chǔ)知識:運(yùn)算符

      32、算數(shù)運(yùn)算符:+正號,-負(fù)號,+加,-減,*乘,/除,%取模,++自增(前),++自增(后),--自減(前),--自減(后),+字符串相加(字符串?dāng)?shù)據(jù)和任何數(shù)據(jù)使用+都是相連接,最終都會變成字符串)。

      33、轉(zhuǎn)義字符:通過 來轉(zhuǎn)變后面字母或者符號的含義。在Linux系統(tǒng)中換行是一個字符來表示n,windows系統(tǒng)中,換行由nr實現(xiàn)。n:換行。b:退格。相當(dāng)于backspace鍵。r:按下回車鍵。t:制表符。相當(dāng)于tab鍵。

      34、賦值運(yùn)算符:符號:=:賦值,+=:a+=5等價于a=a+5,-=,*=,/=,%=。

      35、比較運(yùn)算符:==:相等于;!=:不等于;<:小于;>:大于;<=:小于等于;>=:大于等于;instanceof:檢查是否是類的對象。注意:比較運(yùn)算符的結(jié)果都是boolean型,也就是要么是true,要么是false;比較運(yùn)算符“==”不能誤寫成“=”。

      36、邏輯運(yùn)算符:&:AND(與)兩邊的boolean表達(dá)式結(jié)果,有一個為false,那么結(jié)果就是false,只要兩邊都為true,結(jié)果為true;|:OR(或)兩邊的boolean表達(dá)式結(jié)果,只要有一個為true,結(jié)果為true,只有兩邊都有false,結(jié)果為false;^:XOR(異或)兩邊的boolean表達(dá)式結(jié)果相同結(jié)果為false,兩邊不同結(jié)果為true;?。篘OT(非);&&:AND(短路);||OR:(短路)。邏輯運(yùn)算符用于連接boolean類型的表達(dá)式。&和&&的特點:&:無論左邊是真是假,右邊都運(yùn)算;&&:當(dāng)左邊為假時,右邊不運(yùn)算。|和||的特點:|:兩邊都做運(yùn)算;||:但左邊為真時,右邊不運(yùn)算。

      37、位運(yùn)算符:<<:左移,如:3<<2=12等價于3*2^2=12;>>:右移,如:6>>2=1等價于6/2^2=1;>>>:無符號右移,如:3>>>1=1;&:與運(yùn)算,如:6&3=2;|:或運(yùn)算,如:6|3=7;^:異或運(yùn)算,如:6^3=5;~:反碼,如:~6=-7;位運(yùn)算是直接對二進(jìn)制進(jìn)行運(yùn)算。<<:其實就是乘以2的移動的位數(shù)次冪;>>:就是除以2的移動的位數(shù)次冪。>>:最高位補(bǔ)什么由原有數(shù)據(jù)的最高位值而定;如果最高位0,右移后,用0補(bǔ)空位;如果最高位1,右移后,用1補(bǔ)空位。>>>:無論最高位是什么,右移后,都用0補(bǔ)。一個數(shù)異或同一個數(shù)兩次,結(jié)果還是拿個數(shù)。

      38、三元運(yùn)算符:格式:(條件表達(dá)式)?表達(dá)式1:表達(dá)式2;如果條件為true,運(yùn)算后的結(jié)果是表達(dá)式1;如果條件為false,運(yùn)算后的結(jié)果是表達(dá)式2。如:獲取兩個數(shù)中大數(shù),int x=3,y=4,z;z=(x>y)?x:y//z變量存儲的就是兩個數(shù)的大數(shù)。

      九、基礎(chǔ)知識:if語句

      39、程序流程控制:順序結(jié)構(gòu),判斷結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)。

      40、判斷結(jié)構(gòu):if語句三種格式:一層判斷:if(條件表達(dá)式){執(zhí)行語句;};兩層判斷:if(條件表達(dá)式){執(zhí)行語句;}else{執(zhí)行語句;};多層判斷:if(條件表達(dá)式){執(zhí)行語句;}else if(條件表達(dá)式){執(zhí)行語句;}else{執(zhí)行語句;}。

      41、if else結(jié)構(gòu)間歇格式:變量=(條件表達(dá)式)?表達(dá)式1:表達(dá)式2;三元運(yùn)算符:好處:可以簡化if else代碼;弊端:因為是一個運(yùn)算符,所以運(yùn)算完畢需要有一個結(jié)果。

      42、解決DOS命令下,編譯無法識別GDK碼方法:方法一:使用-encoding參數(shù)指明編碼方式:javac-encoding UTF-8 XX.java。方法二:保存java文件時,選擇編碼格式為ANSI。

      十、基礎(chǔ)知識:switch語句

      43、選擇結(jié)構(gòu):switch語句:格式:switch(表達(dá)式){case 取值1:執(zhí)行語句;break;case 取值2:執(zhí)行語句;break;??default:執(zhí)行語句;//break;}

      44、switch(表達(dá)式):表達(dá)式只接收四種類型:byte,short,int,char。

      45、if語句與switch語句的區(qū)別:if除了能判斷數(shù)值,還能判斷具體區(qū)間,switch判斷區(qū)間很累;對于數(shù)字是布爾型時,只有if能判斷。

      46、if語句與switch語句的用法:如果要對具體數(shù)字進(jìn)行判斷,數(shù)值不多,而且符合byte、short、int、char這四種類型,雖然兩個語句都可以使用,建議用switch完成。因為效率稍高。其他情況一般用if。當(dāng)結(jié)果為布爾型或區(qū)間時,用if完成。If的使用范圍更廣。2016年01月08日day03

      一、基礎(chǔ)知識:while語句

      1、循環(huán)結(jié)構(gòu):代表語句:while、do while、for。

      2、while語句格式:while(條件表達(dá)式){執(zhí)行語句;}。

      3、do while語句格式:do{執(zhí)行語句;}while(條件表達(dá)式)。Do while特點是條件無論是否滿足,循環(huán)體至少被執(zhí)行一次。

      4、while和do while的區(qū)別:while:先判斷條件,只有條件滿足才執(zhí)行循環(huán)體。do while:先執(zhí)行循環(huán)體,再判斷條件,條件滿足,再繼續(xù)執(zhí)行循環(huán)體。簡單一句話:do while:無論條件是否滿足,循環(huán)體至少執(zhí)行一次。

      二、基礎(chǔ)知識:for語句

      5、for語句格式:for(初始化表達(dá)式;循環(huán)條件表達(dá)式;循環(huán)后的操作表達(dá)式){執(zhí)行語句;}。注意:a:for里面的連個表達(dá)式運(yùn)行的順序,初始化表達(dá)式只讀一次,判斷循環(huán)條件,為真就執(zhí)行循環(huán)體,然后再執(zhí)行循環(huán)后的操作表達(dá)式,接著繼續(xù)判斷循環(huán)條件,重復(fù)找個過程,直到條件不滿足為止。b:while與for可以互換,區(qū)別在于for為了循環(huán)而定義的變量在for循環(huán)結(jié)束就是在內(nèi)存中釋放。而while循環(huán)使用的變量在循環(huán)結(jié)束后還可以繼續(xù)使用。c:最簡單無限循環(huán)格式:while(true),for(;;),無限循環(huán)存在的原因是并不知道循環(huán)多少次,而是根據(jù)某些條件,來控制循環(huán)。

      6、for和while的區(qū)別:a:變量有自己的作用域。對于一個變量來將,如果這個變量僅僅用于控制循環(huán)的次數(shù),用作循環(huán)增量時用for語句。循環(huán)結(jié)束時,該變量在內(nèi)存被釋放。用于優(yōu)化內(nèi)存。b:for和while可以進(jìn)行互換,如果定義循環(huán)增量,用for更為合適。

      7、什么時候使用循環(huán)結(jié)構(gòu)?當(dāng)要多某些語句執(zhí)行很多次時,就是用循環(huán)結(jié)構(gòu)。

      8、循環(huán)注意:一定要明確哪些語句需要參與循環(huán),哪些不需要。

      9、兩種思想:累加思想:原理:通過變量記錄住每次變化的結(jié)果。通過循環(huán)的形式,進(jìn)行累加動作。計數(shù)器思想:原理:通過一個變量記錄住數(shù)據(jù)的狀態(tài)變化。也通過循環(huán)完成。

      10、循環(huán)嵌套:語句嵌套形式,其實就是語句中含有語句。

      11、其他流程控制語句:break(跳出),continue(繼續(xù))。Break語句:應(yīng)用范圍:選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。Continue語句:應(yīng)用于循環(huán)結(jié)構(gòu)。注意:a:這兩個語句離開應(yīng)用范圍,存在是沒有意義的。b:這兩個語句單獨存在下面都不可以有語句,因為執(zhí)行不到。c:continue語句是結(jié)束本次循環(huán)繼續(xù)下次循環(huán)。d:標(biāo)號的出現(xiàn),可以讓這兩個語句作用于指定的范圍。

      12、注意:標(biāo)號只能用于循環(huán)語句上,給循環(huán)起名字。

      13、continue:只能作用于循環(huán)結(jié)構(gòu)。繼續(xù)循環(huán)。特點:結(jié)束本次循環(huán),繼續(xù)下一次循環(huán)。

      14、總結(jié):a:break和continue語句作用的范圍。b:break和continue單獨存在時,下面可以有任何語句。因為都執(zhí)行不到。

      三、基礎(chǔ)知識:函數(shù)

      15、函數(shù)的定義:什么是函數(shù)?函數(shù)就是定義在類中的具有特定功能的一段獨立小程序;函數(shù)也稱為方法。

      16、函數(shù)的格式:修飾符返回值類型函數(shù)名(參數(shù)類型形式參數(shù)1,參數(shù)類型形式參數(shù)2,?){執(zhí)行語句;return返回值;}。返回值類型:函數(shù)運(yùn)行后的結(jié)果的數(shù)據(jù)類型。參數(shù)形式:是形式參數(shù)的數(shù)據(jù)類型。形式參數(shù):是一個變量,用于存儲調(diào)用函數(shù)時傳遞給函數(shù)的實際參數(shù)。實際參數(shù):傳遞給形式參數(shù)的具體數(shù)值。Return:用于結(jié)束函數(shù)。返回值:該值會返回給調(diào)用者。

      17、函數(shù)的特點:定義函數(shù)可以將功能代碼進(jìn)行封裝;便于對該功能進(jìn)行復(fù)用;函數(shù)只有被調(diào)用才會被執(zhí)行;函數(shù)的出現(xiàn)提高了代碼的復(fù)用性;對于函數(shù)沒有具體返回值的情況,返回值類型用關(guān)鍵字void表示,那么該函數(shù)中的return語句如果在最后一行可以省略不寫。注意:函數(shù)中只能調(diào)用函數(shù),不可以在函數(shù)內(nèi)部定義函數(shù);定義函數(shù)時,函數(shù)的結(jié)果應(yīng)該返回給調(diào)用者,交由調(diào)用者處理。

      18、重點:函數(shù)的應(yīng)用。如何定義一個函數(shù)呢?a:既然函數(shù)是一個獨立的功能,那么該功能的運(yùn)算結(jié)果是什么先明確。因為這是在明確函數(shù)的返回值類型。b:再明確在定義該功能的過程中是否需要未知的內(nèi)容參與運(yùn)算。因為是在明確函數(shù)的參數(shù)列表(參數(shù)的類型和參數(shù)的個數(shù))。

      19、函數(shù)的重載(overload):重載的概念:在同一個類中,允許存在一個以上的同名函數(shù),只要它們的參數(shù)個數(shù)或者參數(shù)類型不同即可。重載的特點:與返回值無關(guān),只看參數(shù)列表。重載的好處:方便與閱讀,優(yōu)化了程序設(shè)計。重載示例://返回兩個整數(shù)的和int add(int x,int y){return x+y;};//返回三個整數(shù)的和int add(int x,int y,int z){return x+y+z;};//返回兩個小數(shù)的和double add(double x,double y){return x+y;}。

      20、什么時候用重載?當(dāng)定義的功能相同,但參與運(yùn)算的未知內(nèi)容不同。那么,這時就定義一個函數(shù)名稱以表示其功能,方便閱讀,而通過參數(shù)列表的不同來區(qū)分多個同名函數(shù)。

      四、基礎(chǔ)知識:數(shù)組

      21、數(shù)組的定義:概念:同一種數(shù)據(jù)類型的集合。其實數(shù)組就是一個容器。數(shù)組的好處:可以自動給數(shù)組中的元素從0開始編號,方便操作這些元素。關(guān)鍵字:new:用來在內(nèi)存中產(chǎn)生一個容器實體。格式一:元素類型[]數(shù)組名=new元素類型[元素個數(shù)或數(shù)組長度];示例:int [] arr=new int[5];格式二:元素類型[]數(shù)組名=new元素類型[]{元素,元素,?};示例:int[] arr=new int[]{3,5,1,7};int[] arr={3,5,1,7}。

      22、內(nèi)存結(jié)構(gòu):Java程序在運(yùn)行時,需要在內(nèi)存中分配空間。為了提高運(yùn)行效率,又對空間進(jìn)行了不同區(qū)域的劃分,因為每一片區(qū)域都有特定的處理數(shù)據(jù)方式和內(nèi)存的管理方式。A:棧內(nèi)存(棧區(qū)):用于存儲局部變量,當(dāng)數(shù)據(jù)使用完,所占空間會自動釋放。B:堆內(nèi)存(堆區(qū)):數(shù)組和對象,通過new建立的實例都存放在堆內(nèi)存中。每一個實體都有內(nèi)存地址。實體中的變量都有默認(rèn)初始化值。實體不在被使用,會在不確定的時間內(nèi)被垃圾回收器回收。C:方法區(qū),本地方法區(qū),寄存器。2016年01月09日

      day04

      一、基礎(chǔ)知識:數(shù)組

      1、獲取數(shù)組中的元素。通常會用到遍歷。

      2、數(shù)組中有一個屬性可以直接獲得到數(shù)組元素個數(shù)。length。使用方式:數(shù)組名稱.length。

      3、數(shù)組排序:選擇排序:內(nèi)循環(huán)結(jié)束一次,最值出現(xiàn)頭角標(biāo)位置。冒泡排序:第一圈:最值出現(xiàn)在了最后位。

      4、java中排序工具:import.java.util.*;Array.sort(arr)。java中已經(jīng)定義好的一種排序方式。開發(fā)中,對數(shù)組排序,要使用該句代碼。

      5、二維數(shù)組:數(shù)組中的數(shù)組:格式一:int[][] arr=new int[3][2];定義了名稱為arr的二維數(shù)組;二維數(shù)組中有3個一維數(shù)組;每一個一維數(shù)組中有2個元素;一維數(shù)組的名稱分別為arr[0],arr[1],arr[2];給第一個一維數(shù)組1腳標(biāo)位賦值為78寫法是:arr[0][1]=78。格式二:int[][] arr=new int[3][];二維數(shù)組中有3個一維數(shù)組;每個一維數(shù)組都是默認(rèn)初始值null;可以對這個三個一維數(shù)組分別進(jìn)行初始化:arr[0]=new int[3];arr[1]=new int[1];arr[2]=new int[2]。

      2016年01月10日

      day05

      一、面向?qū)ο螅焊攀?/p>

      1、理解面向?qū)ο螅好嫦驅(qū)ο笫窍鄬γ嫦蜻^程而言;面向?qū)ο蠛兔嫦蜻^程都是一種思想;面向過程:強(qiáng)調(diào)的是功能行為;面向?qū)ο螅簩⒐δ芊庋b進(jìn)對象,強(qiáng)調(diào)了具備了功能的對象;面向?qū)ο笫腔诿嫦蜻^程的。讓我們的角色從執(zhí)行者變?yōu)橹笓]者。面向過程是面向?qū)ο蟮幕A(chǔ)。

      2、一切皆對象,境界:萬物皆對象。

      3、寫程序時:先考慮對象。有對象時,直接用。沒對象時,自己造一個對象。

      4、人開門:名稱提煉法。事物:人、門。示例:人{(lán)開門(門){門。開();}};門{開(){操作門軸等。}}。

      5、面向?qū)ο蟮娜齻€特征:封裝,繼承,多態(tài)。

      6、以后的開發(fā):其實就是找對象使用。沒有對象,就創(chuàng)建一個對象。

      7、找對象,建立對象,使用對象,維護(hù)對象的關(guān)系。

      8、類和對象的關(guān)系:類就是:對現(xiàn)實生活中事物的描述。對象:就是這類事物,實實在在的個體。映射到j(luò)ava中,描述就是class定義的類。具體對象就是對于java在堆內(nèi)存中用new建立實體。

      9、類與對象示例:圖紙:汽車,汽車,汽車。可以理解為:類就是圖紙;汽車就是堆內(nèi)存中的對象。

      10、描述事物其實就在是描述事物的屬性和行為。

      11、屬性對應(yīng)是類中的變量,行為對應(yīng)的類中的函數(shù)(方法)。其實定義類,就是在描述事物,就是在定義屬性和行為。屬性和行為共同成為類中的成員(成員變量和成員函數(shù)(方法))。

      12、引用變量:類類型變量。記?。侯愵愋妥兞恐赶?qū)ο蟆?/p>

      13、就需要該對象做使用,在java指揮方式是:對象.對象成員。

      14、成員變量和局部變量:作用范圍:成員變量作用于整個類中。局部變量作用于函數(shù)中,或者語句中。在內(nèi)存中的位置:成員變量:在堆內(nèi)存中,因為對象的存在,才在內(nèi)存中存在。局部變量:存在棧內(nèi)存中。

      15、匿名對象:匿名對象是對象的簡化形式;匿名對象兩種使用情況:當(dāng)對對象方法僅進(jìn)行一次調(diào)用的時;匿名對象可以作為實際參數(shù)進(jìn)行傳遞。

      二、面向?qū)ο螅悍庋b

      16、封裝的定義:是指隱藏對象的屬性和實現(xiàn)細(xì)節(jié),僅對外提供公共訪問方式。

      17、封裝的好處:將變化隔離;便于使用;提高重用性;提高安全性。

      18、封裝原則:將不需要對外提供的內(nèi)容隱藏起來;把屬性都隱藏,提供公共方法對其訪問。

      19、函數(shù)是最小的封裝體;類是較小的封裝體;包是中級封裝體;框架是較大的封裝體。20、關(guān)鍵字private:私有,權(quán)限修飾符:用于修飾類中的成員(成員變量,成員函數(shù))。在類中隱藏。私有只在本類中有效。

      21、注意:私有僅僅是封裝的一種表現(xiàn)形式。

      22、之所以對外提供訪問方式,就是因為可以在訪問方式中加入邏輯判斷語句。對訪問的數(shù)據(jù)進(jìn)行操作。提高代碼健壯性。

      23、關(guān)鍵字private:將成員變量私有化。對外提供對應(yīng)的set,get方法對其進(jìn)行訪問。提高對數(shù)據(jù)訪問的安全性。

      三、面向?qū)ο螅簶?gòu)造函數(shù)

      24、構(gòu)造函數(shù)的特點:函數(shù)名與類名相同;不用定義返回值類型;不可以寫return語句。

      25、構(gòu)造函數(shù)的作用:給對象進(jìn)行初始化。注意:默認(rèn)構(gòu)造函數(shù)的特點;多個構(gòu)造函數(shù)是以重載的形式存在的。

      26、構(gòu)造函數(shù):對象一建立就會調(diào)用與之對應(yīng)的構(gòu)造函數(shù)。構(gòu)造函數(shù)的作用:可以用于給對象進(jìn)行初始化。

      27、構(gòu)造函數(shù)的小細(xì)節(jié):當(dāng)一個類中沒有定義構(gòu)造函數(shù)時,那么系統(tǒng)會默認(rèn)給該類假如一個空參數(shù)的構(gòu)造函數(shù)。當(dāng)在類中自定義了構(gòu)造函數(shù)后,默認(rèn)的構(gòu)造函數(shù)就沒有了。

      28、構(gòu)造函數(shù)和一般方法(函數(shù))的區(qū)別:A:構(gòu)造函數(shù)和一般函數(shù)在寫法上有不同。B:在運(yùn)行上也有不同。構(gòu)造函數(shù)是在對象一建立就運(yùn)行。就對象初始化。而一般方法是對象調(diào)用才執(zhí)行,是給對象添加對象具備的功能。C:一個對象建立,構(gòu)造函數(shù)只運(yùn)行一次。而一般方法可以被該對象調(diào)用多次。

      29、什么時候定義構(gòu)造函數(shù)呢:當(dāng)分析事物時,該事物存在具備一些特征或者行為,那么將這些內(nèi)容定義在構(gòu)造函數(shù)中。30、構(gòu)造代碼塊:作用:給對象進(jìn)行初始化。對象一建立就運(yùn)行,而且優(yōu)先于構(gòu)造函數(shù)執(zhí)行。

      31、構(gòu)造代碼塊和構(gòu)造函數(shù)區(qū)別:構(gòu)造代碼塊是給所有對象進(jìn)行統(tǒng)一初始化,而構(gòu)造函數(shù)是給對應(yīng)的對象進(jìn)行初始化。

      32、構(gòu)造代碼塊中定義的是不同對象共性的初始化內(nèi)容。

      四、面向?qū)ο螅簍his關(guān)鍵字

      33、關(guān)鍵字this:看上去,是用于區(qū)分局部變量和成員變量同名情況。

      34、關(guān)鍵字this的特點:就代表本類的對象,到底代表哪一個呢?this代表它所在函數(shù)所屬對象的引用。簡單說:哪個對象在調(diào)用this所在的函數(shù),this就代表哪個對象。

      35、this的應(yīng)用:當(dāng)定義類中功能時,該函數(shù)內(nèi)部要用到該函數(shù)的對象時,這時用this來表示這個對象。但凡本類功能內(nèi)部使用到了本類對象,都用this代替。

      36、this語句:用于構(gòu)造函數(shù)之間函數(shù)互相調(diào)用。this語句:只能定義在構(gòu)造函數(shù)的第一行。因為初始化要先執(zhí)行。

      37、this語句只能用于構(gòu)造函數(shù)間,不能用于一般函數(shù)。

      2016年01月11日

      day06

      一、面向?qū)ο螅簊tatic關(guān)鍵字

      1、static(靜態(tài))關(guān)鍵字:用于修飾成員(成員變量和成員函數(shù))。被修飾后的成員具備以下特點:隨著類的加載而加載;優(yōu)先于對象存在;被所有對象所共享;可以直接被類名調(diào)用。使用注意:靜態(tài)方法只能訪問靜態(tài)成員;靜態(tài)方法中不可以寫this,super關(guān)鍵字;主函數(shù)是靜態(tài)的。

      2、用法:是一個修飾符,用于修飾成員(成員變量,成員函數(shù))。當(dāng)成員被靜態(tài)修飾后,就多了一個調(diào)用方式,除了可以被對象調(diào)用外,還可以直接被類名用。類名.成員變量。

      3、實例變量和類變量的區(qū)別:A,存放位置:類變量隨著類的加載而存在于方法區(qū)中。實例變量隨著對象的建立存在于堆內(nèi)存中。B,生命周期:類變量生命周期最長,隨著類的消失而消失。實例變量隨著對象的消失而消失。

      4、靜態(tài)使用注意事項:A,靜態(tài)方法只能訪問靜態(tài)成員。非靜態(tài)方法既可以訪問靜態(tài)也可以訪問非靜態(tài)。B,靜態(tài)方法中不可以定義thsi,super關(guān)鍵字。因為靜態(tài)優(yōu)先于對象存在,所有靜態(tài)方法中不可以出現(xiàn)this。C,主函數(shù)是靜態(tài)的。

      5、靜態(tài)優(yōu)缺點:優(yōu):對對象的共享數(shù)據(jù)進(jìn)行單獨空間的存儲,節(jié)省空間。沒有必要每個對象中都存儲一份??梢灾苯颖活惷{(diào)用。缺:生命周期過長。訪問出現(xiàn)局限性。(靜態(tài)雖好,只能訪問靜態(tài)。)

      6、public static void main(String[] args)主函數(shù):是一個特殊的函數(shù),作用程序的入口,可以被jvm調(diào)用。

      7、主函數(shù)的定義:public:代表著該函數(shù)訪問權(quán)限是最大的。static:代表主函數(shù)隨著類的加載就已經(jīng)存在了。void:代表主函數(shù)沒有具體的返回值。main:不是關(guān)鍵字,但是是一個特殊的單詞,可以被jvm識別。(String[] args):函數(shù)的參數(shù),參數(shù)類型是一個數(shù)組,該數(shù)組中的元素是字符串。字符串類型的數(shù)組。

      8、主函數(shù)是固定格式的:jvm識別。jvm在調(diào)用主函數(shù)時,傳人的是new String[0]。

      9、什么時候使用靜態(tài)?要從兩方面下手:因為靜態(tài)修飾的內(nèi)容有成員變量和函數(shù)。什么時候定義靜態(tài)變量(類變量)呢?當(dāng)對象中出現(xiàn)共享數(shù)據(jù)時,該數(shù)據(jù)靜態(tài)所修飾。對象中的特有數(shù)據(jù)要定義成非靜態(tài)存在于堆內(nèi)存中。

      10、什么時候定義靜態(tài)函數(shù)呢?當(dāng)功能內(nèi)部沒有訪問到非靜態(tài)數(shù)據(jù)(對象的特有數(shù)據(jù)),那么該功能可以定義成靜態(tài)的。

      11、靜態(tài)的應(yīng)用:A每一個應(yīng)用程序中都有共性的功能,可以將這些功能進(jìn)行抽取,獨立封裝。以便復(fù)用。B雖然可以通過建立ArrayTool的對象使用這些工具方法,對數(shù)組進(jìn)行操作。但是:1,對象是用于封裝數(shù)據(jù)的,可以ArrayTool對象并未封裝特特有數(shù)據(jù)。2,操作數(shù)組的每一個方法都沒有用到ArrayTool對象中的特有數(shù)據(jù)。C這時就考慮,讓程序更嚴(yán)謹(jǐn),是不需要對象的??梢詫rrayTool中的方法都定義成static的,直接通過類名調(diào)用即可。D將方法都靜態(tài)后,可以方便于使用,但是該類還是可以被其他程序建立對象的。為了更為嚴(yán)謹(jǐn),強(qiáng)制讓該類不能建立對象??梢酝ㄟ^將構(gòu)成函數(shù)私有化完成。

      12、接下來,將ArrayTool.class文件發(fā)送給其他人,其他人只要將該文件設(shè)置到classpath路徑下,就可以使用該工具類。但是,很遺憾,該類中到底定義了多少個方法,對方不清楚。因為該類并沒有使用說明書。開始制作程序的說明書。java的說明書通過文檔注釋來完成。

      13、注釋符號:/***/;@author作者;@version版本;@param參數(shù);@return返回值。

      14、靜態(tài)代碼塊。格式:static{靜態(tài)代碼塊中的執(zhí)行語句。}。

      15、靜態(tài)代碼塊的特點:隨著類的加載而執(zhí)行,只執(zhí)行一次,并優(yōu)先于主函數(shù)。用于給類進(jìn)行初始化的。

      16、重點:對象的初始化過程:Person p=new Person(“zhangsan”,20);該句話都做了什么事情?A因為new用到了Person。Class。所有會先找到Person。Class文件并加載到內(nèi)存中。B執(zhí)行該類中的static代碼塊,如果有的話,給Person.class類進(jìn)行初始化。C在堆內(nèi)存中開辟空間,分配內(nèi)存地址。D在堆內(nèi)存中建立對象的特有屬性,并進(jìn)行默認(rèn)初始化。E對屬性進(jìn)行顯示初始化。F對對象進(jìn)行構(gòu)造代碼塊初始化。G對對象進(jìn)行對應(yīng)的構(gòu)造函數(shù)初始化。H將內(nèi)存地址付給棧內(nèi)存中的p變量。

      二、面向?qū)ο螅簡卫O(shè)計模式

      17、設(shè)計模式:解決某一類問題最行之有效的方法。java中23中設(shè)計模式:單例設(shè)計模式:解決一個類在內(nèi)存只存在一個對象。

      18、想要保證對象唯一。1,為了避免其他程序過多建立該類對象。先禁止其他程序建立該類對象。2,還為了讓其他程序可以訪問到該類對象,只好在本類中,自定義一個對象。3,為了方便其他程序?qū)ψ远x對象的訪問,可以對外提供一些訪問方式。

      19、這三步怎么用代碼體現(xiàn)呢?1,將構(gòu)造函數(shù)私有化。2,在類中創(chuàng)建一個本類對象。3,提供一個方法可以獲取到該對象。

      20、對于事物該怎么描述,還怎么描述。當(dāng)需要將該事物的對象保證在內(nèi)存中唯一時,就將以上的三部加上即可。

      21、單例設(shè)計方法一:這個是先初始化對象。稱為:餓漢式。Single類一進(jìn)內(nèi)存,就已經(jīng)創(chuàng)建好了對象。開發(fā)一般用餓漢式:安全、簡單。

      22、單例設(shè)計方法二:對象被調(diào)用時,才初始化,也叫做對象的延時加載。稱為:懶漢式。Single類進(jìn)內(nèi)存,對象還沒有存在,只有調(diào)用了getInstance方法時,才建立對象。

      23、記住原則:定義單例,建議使用餓漢式。但面試時:考懶漢式的多。特別是如何解決懶漢式的缺點。2016年01月12日

      day07

      一、面向?qū)ο螅豪^承

      1、繼承:1,提高代碼的復(fù)用性。2,讓類與類之間產(chǎn)生了關(guān)系。有了這個關(guān)系,才有了多態(tài)的特性。關(guān)鍵字:extends。

      2、注意:千萬不要為了獲取其他類的功能,簡化代碼而繼承。必須是類與類之間有所屬關(guān)系才可以繼續(xù)。所屬關(guān)系is a。

      3、java語言中:java只支持單繼承,不支持多繼承。原因:因為多繼承容易帶來安全隱患:當(dāng)多個父類中定義了相同功能,當(dāng)功能內(nèi)容不同時,子類對象不確定要運(yùn)行哪一個。但是java保留這種機(jī)制,并用另一種體現(xiàn)形式來完成表示,多實現(xiàn)。

      4、java支持多層繼承。也就是一個繼承體系。如何使用一個繼承體系中的功能呢?想要使用體系,先查閱父類的描述,因為父類中定義的是該體系中共性功能。通過了解共性功能,就可以知道該體系的基本功能。那么這個體系已經(jīng)可以基本使用了。

      5、那么在具體調(diào)用時,要創(chuàng)建最子類的對象,為什么呢?一是因為有可能父類不能創(chuàng)建對象,二是創(chuàng)建子類對象可以使用更多的功能,包括基本的也包括特有的。

      6、簡單一句話:查閱父類功能,創(chuàng)建子類對象使用功能。

      7、this代表本類對象的引用,super代編父類對象的引用。

      8、子父類出現(xiàn)后,類成員的特點:類中成員:A,變量。B,函數(shù)。C,構(gòu)造函數(shù)。

      9、子父類中的變量:如果子類中出現(xiàn)非私有的同名變量時,之類要訪問本類中的同名變量,用this子類要訪問父類中的同名變量,用super。super的使用和this的使用幾乎一致。this代表的是本類對象的引用。super代表的是父類對象的引用。

      10、子父類中的函數(shù):當(dāng)子類出現(xiàn)和父類一模一樣的函數(shù)時,當(dāng)子類對象調(diào)用該函數(shù),會運(yùn)行子類函數(shù)的內(nèi)容。如同父類的函數(shù)被覆蓋一樣。這種情況是函數(shù)的另一個特性:重寫(覆蓋)。

      11、修改以往的源碼絕對是災(zāi)難。

      12、單子類繼承父類,沿襲了父類的功能,到子類中,但是子類雖具備該功能,但是功能的內(nèi)容卻和父類不一致,這時,沒有必要定義新功能,而是使用覆蓋特殊,保留父類的功能定義,并重寫功能內(nèi)容。

      13、注意:覆蓋:子類覆蓋父類,必須保證子類權(quán)限大于等于父類權(quán)限,才可以覆蓋,否則編譯失敗。靜態(tài)只能覆蓋靜態(tài)。

      14、記住大家:重載:只看同名函數(shù)的參數(shù)列表。重寫:子父類方法要一模一樣。

      15、子父類中的構(gòu)造函數(shù):發(fā)現(xiàn)在對子類對象進(jìn)行初始化時,父類的構(gòu)造函數(shù)也會運(yùn)行。那是因為子類的構(gòu)造函數(shù)默認(rèn)第一行有一條隱式的語句super();super();會訪問父類中空參數(shù)的構(gòu)造函數(shù)。而且子類中所有的構(gòu)造函數(shù)默認(rèn)第一行都是super()。

      16、為什么子類一定要訪問父類中的構(gòu)造函數(shù):因為父類中的數(shù)據(jù)子類可以直接獲取,所有之類對象在建立時,需要先查看父類是如何對這些數(shù)據(jù)進(jìn)行初始化的。所有之類在對象初始化時,要先訪問一下父類中的構(gòu)造函數(shù)。如果要訪問父類中指定的構(gòu)造函數(shù),可以通過手動定義super語句的方式來指定。注意:super語句一定一定在子類構(gòu)造函數(shù)第一行。

      17、子類的實例化過程。結(jié)論:子類的所有的構(gòu)造函數(shù)默認(rèn)都會訪問父類中空參數(shù)的構(gòu)造函數(shù)。因為子類每一個構(gòu)造函數(shù)內(nèi)的每一行都有一句隱式的super();當(dāng)父類中沒有空參數(shù)的構(gòu)造函數(shù)時,子類必須手動通過super語句或者this語句形式來指定要訪問父類中的構(gòu)造函數(shù)。當(dāng)然:子類的構(gòu)造函數(shù)第一行也可以收到指定this語句來訪問本類中的構(gòu)造函數(shù)。子類中至少會有一個構(gòu)造函數(shù)會訪問父類中的構(gòu)造函數(shù)。

      18、關(guān)鍵字:final:final可以修飾類,方法(函數(shù)),變量;final修飾的類不可以被繼承;final修飾的方法(函數(shù))不可以被覆蓋;final修飾的變量是一個常量,只能被賦值一次;內(nèi)部類只能訪問被final修飾的局部變量。

      二、面向?qū)ο螅撼橄箢?/p>

      19、當(dāng)多個類中出現(xiàn)相同功能,但是功能主體不同,這時也可以進(jìn)行向上抽取。這時,只抽取功能定義,而不抽取功能主體。20、抽象:看不懂。

      21、抽象類的特點:A,抽象方法一定定義在抽象類中。B,抽象方法和抽象類都必須被abstract關(guān)鍵字修飾。C,抽象類不可以被new創(chuàng)建對象。因為調(diào)用抽象方法沒意義。D,抽象類中的抽象方法要被使用,必須由子類復(fù)寫其所有的抽象方法后,建立子類對象調(diào)用。

      22、如果子類只覆蓋了部分抽象方法,那么該子類還是一個抽象類。

      23、抽象類和一般類沒有太大的不同。該如何描述事物,就如何描述事物,只不過,該事物中出現(xiàn)了一些看不懂的東西。這些不確定的部分,也是該事物的功能,需要明確出現(xiàn),但是無法定義主體。通過抽象方法來表示。

      24、抽象類比一般類多了抽象方法(函數(shù))。就是在類中可以定義抽象方法。抽象類不可以實例化(即不可以new)。特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立對象。

      25、什么是模板方法呢?在定義功能時,功能的一部分是確定的,但是有一部分是不確定,而確定的部分在使用不確定的部分。那么這時就將不確定的部分暴露出去。由該類的子類去實現(xiàn)。

      三、面向?qū)ο螅航涌?/p>

      26、接口:格式:interface{}。接口中的成員修飾符是固定的。成員常量:public static final;成員函數(shù):public abstract。接口的出現(xiàn)將“多繼承”通過另一種形式體現(xiàn)出來,即“多實現(xiàn)”。

      26、接口:初期理解:可以認(rèn)為是一個特殊的抽象類。當(dāng)抽象類中的方法都是抽象的,那么該類可以通過接口的形式來表示。class用于定義類。interface用于定義接口。

      27、接口:是不可以創(chuàng)建對象的,因為有抽象方法。需要被子類實現(xiàn),子類對接口中的抽象方法全部覆蓋后,子類才可以實例化。否則子類是一個抽象類。接口可以被類多實現(xiàn),也是對多繼承不支持的轉(zhuǎn)換形式。java支持多實現(xiàn)。用關(guān)鍵字:implements。

      28、接口與接口之間支持多繼承,類與類之間只支持單繼承。

      29、接口的特點:接口是對外暴露的規(guī)則;接口是程序的功能擴(kuò)展;接口可以用來多實現(xiàn);類與接口之間是實現(xiàn)關(guān)系,而且類可以繼承一個類的同時實現(xiàn)多個接口;接口與接口之間可以有繼承關(guān)系。2016年01月13日

      day08

      一、面向?qū)ο螅憾鄳B(tài)

      1、多態(tài)的定義:某一類事物的多種存在形態(tài),例:動物中貓,狗。貓這個對象對應(yīng)的類型是貓類型:貓x=new 貓();同時貓也是動物中的一種,也可以把貓稱為動物。動物y=new 貓();動物是貓和狗具體事物中抽取出來的父類型;父類型引用指向了子類對象。

      2、多態(tài)的體現(xiàn):父類的引用指向了自己的子類對象。父類的引用也可以接收自己的子類對象。

      3、多態(tài)的前提:必須是類與類之間有關(guān)系。要么繼承,要么實現(xiàn)。通常還有一個前提:存在覆蓋。

      4、多態(tài)的弊端:提高了擴(kuò)展性,但是只能使用父類的引用訪問父類中的成員。

      5、多態(tài)的好處:多態(tài)的出現(xiàn)大大的提高了程序的擴(kuò)展性。

      6、引用數(shù)據(jù)類型轉(zhuǎn)換:類型提升。向上轉(zhuǎn)型。如果想要調(diào)用貓的特有方法時,如何操作?強(qiáng)制將父類的引用,轉(zhuǎn)成子類類型。向下轉(zhuǎn)型。注意:千萬不要出現(xiàn)這樣的操作,就是將父類對象轉(zhuǎn)成子類類型。我們能轉(zhuǎn)換的是父類引用指向了自己的子類對象時,該引用可以被提升,也可以被強(qiáng)制轉(zhuǎn)換。多態(tài)自始至終都是子類對象在做著變量。

      7、關(guān)鍵字:instanceof。判斷引用數(shù)據(jù)類型是否一致。

      8、在多態(tài)中成員函數(shù)的特點:在編譯時期:參閱引用型變量所屬的類中是否有調(diào)用的方法。如果有,編譯通過,如果沒有編譯失敗。在運(yùn)行時期:參閱對象所屬的類中是否有調(diào)用的方法。簡單總結(jié)就是:成員函數(shù)在多態(tài)調(diào)用時,編譯看左邊,運(yùn)行看右邊。

      9、在多態(tài)中,成員變量的特點:無論編譯和運(yùn)行,都參考左邊(引用型變量所屬的類)。

      10、object類:是所有對象的直接或者間接父類,傳說中的上帝。該類中定義的肯定是所有對象都具備的功能。

      11、Object類中已經(jīng)提供了對對象是否相同的比較方法。如果自定義類中也有比較相同的功能,沒有必要重新定義。只要沿襲父類中的功能,建立自己特有的比較內(nèi)容即可。這就是覆蓋。

      2016年01月15日

      day09

      一、面向?qū)ο螅簝?nèi)部類

      1、內(nèi)部類的定義:將一個類定義在另一個類的里面,對里面那個類就稱為內(nèi)部類(內(nèi)置類,嵌套類)。

      2、內(nèi)部類訪問特點:內(nèi)部類可以直接訪問外部類中的成員,包括私有成員。之所以可以直接訪問外部類中的成員,是因為內(nèi)部類中持有了一個外部類的引用,格式:外部類名.this。而外部類要訪問內(nèi)部類中的成員必須要建立內(nèi)部類的對象。

      3、訪問格式:當(dāng)內(nèi)部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中??梢灾苯咏?nèi)部類對象。格式:外部類名.內(nèi)部類名變量名=外部類對象.內(nèi)部類對象;Outer.Inner in=new Outer().new Inner()。

      4、當(dāng)內(nèi)部類在成員位置上,就可以被成員修飾符所修飾。比如,private:將內(nèi)部類在外部類中進(jìn)行封裝。static:內(nèi)部類就具備了static的特性。當(dāng)內(nèi)部類被static修飾后,只能直接訪問外部類中的static成員。出現(xiàn)了訪問局限。

      5、在外部其他類中,如何直接訪問static內(nèi)部類的非靜態(tài)成員呢?new Outer.Inner().function()。在外部其他類中,如何直接訪問static內(nèi)部類的靜態(tài)成員呢?Outer.Inner().function()。

      6、注意:當(dāng)內(nèi)部類中定義了靜態(tài)成員,該內(nèi)部類必須是static的。當(dāng)外部類中的靜態(tài)方法訪問內(nèi)部類時,內(nèi)部類也必須是static的。

      7、當(dāng)描述事物時,事物的內(nèi)部還有事物,該事物用內(nèi)部類來描述。因為內(nèi)部事物在使用外部事物的內(nèi)容。

      8、內(nèi)部類定義在局部時,1,不可以被成員修飾符修飾;2,可以直接訪問外部類中的成員,因為還持有外部類中的引用;但是不可以訪問它所在的局部中的變量。只能訪問被final修飾的局部變量。

      9、匿名內(nèi)部類:1,匿名內(nèi)部類其實就是內(nèi)部類的簡寫格式。2,定義匿名內(nèi)部類的前提:內(nèi)部類必須繼承一個類或者實現(xiàn)接口。3,匿名內(nèi)部類的格式:new 父類或者接口(){定義子類的內(nèi)容}。4,其實匿名內(nèi)部類就是一個匿名子類對象。而且這個對象有點胖??梢岳斫鉃閹?nèi)容的對象。5,匿名內(nèi)部類中定義的方法最好不要超過3個。

      二、面向?qū)ο螅寒惓?/p>

      10、異常:異常的體系:Throwable:(Error:通常出現(xiàn)重大問題如:運(yùn)行的類不存在或者內(nèi)存溢出等;不編寫針對代碼對其處理。Exception:在運(yùn)行時運(yùn)行出現(xiàn)的一起情況,可以通過try catch finally)。Exception和Error的子類名稱都是以父類名作為后綴。

      11、異常:就是程序在運(yùn)行時出現(xiàn)不正常情況。

      12、異常由來:問題也是現(xiàn)實生活中一個具體的事物,也可以通過java的類的形式進(jìn)行描述,并進(jìn)行封裝。其實就是java對不正常情況進(jìn)行描述后的對象體現(xiàn)。

      13、對于問題的劃分:兩種:一種是嚴(yán)重的問題。一種是非嚴(yán)重的問題。對于Error一般不編寫針對性的代碼對其進(jìn)行處理。對于嚴(yán)重的,java通過Error類進(jìn)行描述。對于非嚴(yán)重的,java通過Exception類進(jìn)行描述。對于Exception可以使用針對性的處理方式進(jìn)行處理。

      14、無論Error或者Exception都具體有一些共性內(nèi)容。比如:不正常情況的信息,引發(fā)原因等。

      15、異常的處理:java提供了特有的語句進(jìn)行處理。Try{需要被檢測的代碼;}catch{異常類變量}{處理異常的代碼:(處理方式)}finally{一定會執(zhí)行的語句;}。

      15、throws Exception//在功能上通過throws的關(guān)鍵字聲明了該功能有可能會出現(xiàn)問題。在函數(shù)上聲明異常。便于提高安全性,讓調(diào)用者進(jìn)行處理。不處理編譯失敗。

      16、對多異常的處理。1,聲明異常時,建議聲明更為具體的異常。這樣處理得可以更具體。2,對聲明幾個異常,就對應(yīng)有幾個catch塊。不要定義多余的catch塊。如果多個catch塊中的異常出現(xiàn)繼承關(guān)系,父類異常catch塊放在最下面。

      17、建議在進(jìn)行catch處理時,catch中一定要定義具體處理方式。不要簡單定義一句 e.printStackTrace(),也不要簡單的就書寫一條輸出語句。

      18、自定義異常:因為項目中會出現(xiàn)特有的問題,而這些問題并未被java所描述并封裝對象。所有對于這些特有的問題可以按照java的對問題封裝的思想。將特有的問題,進(jìn)行自定義的異常封裝。

      19、當(dāng)在函數(shù)內(nèi)部出現(xiàn)了throw拋出了異常對象,那么就必須要給對應(yīng)的處理動作。要么在內(nèi)部try catch處理。要么在函數(shù)上聲明讓調(diào)用者處理。20、如何定義異常信息呢?因為父類中已經(jīng)把異常信息的操作都完成了。所有子類只要在構(gòu)造時,將異常信息傳遞給父類通過super語句。那么就可以直接通過getMessage方法獲取自定義的異常信息。

      21、自定義異常:必須是自定義類繼承Exception。繼承Exception原因:異常體系有一個特點:因為異常類和異常對象都被拋出。他們都具備可拋性。這個可拋性是Throwable這個體系中獨有特點。

      22、只有這個體系中的類和對象才可以被throws和throw操作。

      23、throws和throw的區(qū)別:throws使用在函數(shù)上。throw使用在函數(shù)內(nèi)。throws后面跟的異常類??梢愿鄠€。用逗號隔開。throw后跟的是異常對象。

      24、Exception中有一個特殊的子類異常RuntimeException運(yùn)行時異常。如果在函數(shù)內(nèi)容拋出該異常,函數(shù)上可以不用聲明,編譯一樣通過。如果在函數(shù)上聲明了該異常。調(diào)用者可以不用進(jìn)行處理,編譯一樣通過。

      25、之所以不用在函數(shù)聲明,是因為不需要讓調(diào)用者處理。當(dāng)該異常發(fā)生,希望程序停止。因為在運(yùn)行時,出現(xiàn)了無法繼續(xù)運(yùn)算的情況,希望停止程序。對代碼進(jìn)行修正。

      26、自定義異常時:如果該異常的發(fā)生,無法在繼續(xù)進(jìn)行運(yùn)算,就讓自定義異常繼承RuntimeException。

      27、對于異常分兩種:1,編譯時被檢測的異常。2,編譯時不被檢測的異常(運(yùn)行時異常,RuntimeException以及其子類)。

      2016年01月16日

      day10

      一、面向?qū)ο螅寒惓?/p>

      1、finally中存放的是一定會被執(zhí)行的代碼。

      2、finally代碼塊:定義一定執(zhí)行的代碼。通常用于關(guān)閉資料。

      3、記住一點:catch是用于處理異常。如果沒有catch就代表沒有被處理過,如果該異常時檢測時的異常,就必須聲明出去。

      4、異常在子父類覆蓋中的體現(xiàn):A,子類在覆蓋父類時,如果父類的方法拋出異常,那么子類的覆蓋方法,只能拋出父類的異常或者該異常的子類。B,如果父類方法拋出多個異常,那么子類在覆蓋該方法時,只能拋出父類異常的子集。C,如果父類或者接口的方法中沒有異常拋出,那么子類在覆蓋方法時,也不可以拋出異常。如果子類方法發(fā)生了異常。就必須要進(jìn)行try處理。絕對不能拋。

      5、異常:是什么?是對問題的描述,將問題進(jìn)行對象的封裝。

      6、異常體系:Throwable:|--Error;|--Exception(|--RuntimeException)。

      7、異常體系的特點:異常體系中的所有類以及建立的對象都具備可拋性。也就是說可以被throw和throws關(guān)鍵字所操作。只有異常體系具備這個特點。

      8、throw和throws的用法:throw定義在函數(shù)內(nèi),用于拋出異常對象。throws定義在函數(shù)上,用于拋出異常類,可以拋出多個用逗號隔開。

      9、當(dāng)函數(shù)內(nèi)容有throw拋出異常對象,并未進(jìn)行try處理。必須要在函數(shù)上聲明,都在編譯失敗。注意:RuntimeException除外。也就是說,函數(shù)內(nèi)如果拋出的RuntimeException異常,函數(shù)上可以不用聲明。

      10、如果函數(shù)聲明了異常,調(diào)用者需要進(jìn)行處理。處理方法可以throws和try。

      11、異常有兩種:編譯時被檢測異常:該異常在編譯時,如果沒有處理(沒有拋也沒有try),編譯失敗。該異常被標(biāo)識,代表著可以被處理。運(yùn)行時異常(編譯時不檢測):在編譯時,不需要處理,編譯器不檢查。該異常的發(fā)生,建立不處理,讓程序停止。需要對代碼進(jìn)行修正。

      12、異常處理語句:try(需要被檢測的代碼;)catch(處理異常的代碼;)finally(一定會執(zhí)行的代碼;)。有三種結(jié)合格式:try catch;try finally;try catch finally。注意:A,finally中定義的通常是關(guān)閉資源代碼。因為資源必須釋放。B,finally只有一種情況不會執(zhí)行。當(dāng)執(zhí)行到System.exit(0);finally不會執(zhí)行。

      13、自定義異常:定義類繼續(xù)Exception或者RuntimeException。A,為了讓該自定義類具備可拋性。B,讓該類具備操作異常的共性方法。當(dāng)要定義自定義異常的信息時,可以使用父類已經(jīng)定義好的功能。異常異常信息傳遞給父類的構(gòu)成函數(shù)。class MyException extends Exception{MyException(String message){super(message);}}。

      14、自定義異常:按照java的面向?qū)ο笏枷?,將程序中出現(xiàn)的特有問題進(jìn)行封裝。

      15、異常的好處:A,將問題進(jìn)行封裝。B,將正常流程代碼和問題處理代碼相分離,方便于閱讀。

      16、異常的處理原則:A,處理方式有兩種:try或者throws。B,調(diào)用到拋出異常的功能時,拋出幾個,就處理幾個。一個try對應(yīng)多個catch。C,多個catch,父類的catch放到最下面。D,catch內(nèi)需要定義針對性的處理方式。不要簡單的定義printStackTrace,輸出語句。也不要不寫。當(dāng)捕獲到的異常,本功能處理不了時,可以繼續(xù)在catch中拋出。

      17、異常的注意事項:在子父類覆蓋時:A,子類拋出的異常必須是父類異常的子類或者子集。B,如果父類或者接口沒有異常拋出時,子類覆蓋出現(xiàn)異常,只能try不能拋。

      二、面向?qū)ο螅喊?/p>

      18、包(package):對類文件進(jìn)行分類管理。給類提供多層命名空間。寫在程序文件的第一行。類名的全稱的格式是:包名.類名。包也是一種封裝形式。

      19、關(guān)鍵字protected:/*保護(hù)*/權(quán)限。權(quán)限修飾符??捎糜谛揎棸锏母割?。

      20、總結(jié):包與包之間進(jìn)行訪問,被訪問的包中的類以及類中的成員,需要public修飾。不同包中的子類還可以訪問直接父類中被protected權(quán)限修飾的成員。

      21、包與包之間可以使用的權(quán)限只有兩種,public protected。

      22、public

      protected

      default

      private 同一個類中可以可以可以可以 同一個包中可以

      可以可以 不可以 子類可以

      可以不可以不可以 不同包中 可以不可以不可以不可以。

      23、為了簡化類名的書寫,使用一個關(guān)鍵字import。import導(dǎo)入的是包中的類。建議,不要寫通配符*,需要用到包中的哪個類,就導(dǎo)入哪個類。

      24、建議定義包名不要重復(fù),可以使用url來完成定義,url是唯一的。

      25、jar包:java的壓縮包:方便項目的攜帶。方便于使用,只要在classpath設(shè)置jar路徑即可。數(shù)據(jù)庫驅(qū)動,SSH框架等都以jar包體現(xiàn)的。2016年01月17日

      day11

      一、多線程:概述

      1、進(jìn)程:是一個正在執(zhí)行中的程序。每一個進(jìn)程執(zhí)行都有一個執(zhí)行順序。該順序是一個執(zhí)行路徑,或者叫一個控制單元。

      2、線程:就是進(jìn)程中的一個獨立的控制單元。線程在控制著進(jìn)程的執(zhí)行。一個進(jìn)程中至少有一個線程。

      3、Java VM 啟動的時候會有一個進(jìn)程java.exe。該進(jìn)程中至少有一個線程負(fù)責(zé)java程序的執(zhí)行。而且這個線程運(yùn)行的代碼存在于main方法中。該線程稱之為主線程。擴(kuò)展:其實更細(xì)節(jié)說明jvm,jvm啟動不止一個線程,還有負(fù)責(zé)垃圾回收機(jī)制的線程。

      4、如何在自定義的代碼中,自定義一個線程呢?通過對API的查找,java已經(jīng)提供了對線程這類事物的描述。就是Thread類。

      5、創(chuàng)建線程的第一種方式:繼承Thread類。步驟:1,定義類繼承Thread。2,復(fù)寫Thread類中的run方法。目的:將自定義代碼存儲在run方法中,讓線程運(yùn)行。3,調(diào)用線程的start方法,該方法有兩個作用:啟動線程;調(diào)用run方法。

      6、發(fā)現(xiàn)運(yùn)行結(jié)果每一次都不同:因為多個線程都獲取cpu的執(zhí)行權(quán)。cpu執(zhí)行到誰,誰就運(yùn)行。明確一點,在某一時刻,只能有一個程序在運(yùn)行。(多核除外)cpu在做著快速的切換,以達(dá)到看上去是同時運(yùn)行的效果。我們可以形象把多線程的運(yùn)行形容為在互相搶奪cpu的執(zhí)行權(quán)。這就是多線程的一個特性:隨機(jī)性。誰搶到誰執(zhí)行,至于執(zhí)行多長,cpu說了算。

      7、為什么要覆蓋run方法呢?Thread類用于描述線程。該類就定義了一個功能,用于存儲線程要運(yùn)行的代碼,該存儲功能就是run方法。也就是說Thread類中的run方法,用于存儲線程要運(yùn)行的代碼。

      8、原來線程都有自己默認(rèn)的名稱。Thread-編號。該編號從0開始。static Thread currentThread():獲取當(dāng)前線程對象。getName():獲取線程名稱。設(shè)置線程名稱:setName或者構(gòu)造函數(shù)。

      9、創(chuàng)建線程的第二種方式:實現(xiàn)Runnable接口。

      步驟:1,定義類實現(xiàn)Runnable接口。2,覆蓋Runnable接口中的run方法。目的:將線程要運(yùn)行的代碼存放在run方法中。3,通過Thread類建立線程對象。4,將Runnable接口的子類對象作為實際參數(shù)傳遞給Thread類的構(gòu)造函數(shù)。為什么要將Runnable接口的子類對象傳遞給Thread的構(gòu)造函數(shù)?因為,自定義的run方法所屬的對象時Runnable接口的子類對象。所有要讓線程去指定指定對象的run方法。就必須明確該run方法所屬對象。5,調(diào)用Thread類的start方法開啟線程并調(diào)用Runnable接口子類的run方法。

      10、實現(xiàn)方式和基礎(chǔ)方法有什么區(qū)別呢?實現(xiàn)方式好處:避免了單繼承的局限性。在定義線程時,建議使用實現(xiàn)方式。兩種方式區(qū)別:繼承Thread:線程代碼存放在Thread子類run方法中。實現(xiàn)Runnable:線程代碼存放在接口的子類的run方法中。

      二、多線程:同步

      11、多線程的運(yùn)行出現(xiàn)了安全問題:問題的原因:當(dāng)多條語句在操作同一個線程共享數(shù)據(jù)時,一個線程對多條語句只執(zhí)行了一部分,汗沒有執(zhí)行完,另一個線程參與進(jìn)來執(zhí)行。導(dǎo)致共享數(shù)據(jù)的錯誤。解決辦法:對多條操作共享數(shù)據(jù)的語句,只能讓一個線程都執(zhí)行完。在執(zhí)行過程過,其他線程不可以參與執(zhí)行。java對于多線程的安全問題提供了專業(yè)的解決方式。就是同步代碼塊。synchronized(對象){需要被同步的代碼;}。

      12、對象如同鎖。持有鎖的線程可以在同步中執(zhí)行。沒有鎖的線程即使獲取了cpu的執(zhí)行權(quán),也進(jìn)不去,因為沒有獲取鎖。

      13、同步的前提:1,必須要有兩個或者兩個以上的線程。2,必須是多個線程使用同一個鎖。必須保證同步中只能有一個線程在運(yùn)行。

      14、好處:解決了多線程的安全問題。弊端:多個線程需要判斷鎖,較為消耗資源。

      15、多線程安全問題:如何找到問題:1,明確哪些代碼是多線程運(yùn)行代碼。2,明確共享數(shù)據(jù)。3,明確多線程運(yùn)行代碼中哪些語句是操作共享數(shù)據(jù)的。

      16、同步函數(shù):將關(guān)鍵字synchronized放到函數(shù)名稱前。即把synchronized當(dāng)作修飾符使用。

      17、同步函數(shù)用的是哪一個鎖呢?函數(shù)需要被對象調(diào)用。那么函數(shù)都有一個所屬對象引用。就是this。所有同步函數(shù)使用的鎖是this。

      18、如果同步函數(shù)被靜態(tài)修飾后,使用的鎖是什么呢?通過驗證,發(fā)現(xiàn)不再是this。因為靜態(tài)方法中也不可以定義this。靜態(tài)進(jìn)內(nèi)存時,內(nèi)存中沒有本類對象,但是一定有該類對應(yīng)的字節(jié)碼文件對象。類名.class 該對象的類型是Class。靜態(tài)的同步方法,使用的鎖是該方法所在類的字節(jié)碼文件對象。類名.class。

      19、死鎖:同步中嵌套同步。而鎖卻不同。

      2016年01月18日

      day12

      一、多線程:線程間通信

      1、wait(),notify(),notifyALL(),用來操作線程為什么定義在了Object類中?這些方法存在于同步中。使用這些方法時必須要標(biāo)識所屬的同步的鎖。鎖可以是任意對象,所以任意對象調(diào)用的方法一定定義Object類中。

      2、wait()和sleep()有什么區(qū)別?wait():釋放資源,釋放鎖。sleep():釋放資源,不釋放鎖。

      3、wait:notify:notifyALL:都被使用在同步中,因為要對持有監(jiān)視器(鎖)的線程操作。所有要使用在同步中,因為只有同步才具有鎖。

      4、為什么這些操作線程的方法要定義在Object類中呢?因為這些方法在操作同步中線程時,都必須要標(biāo)識他們所操作線程只有的鎖。只有同一個鎖上的被等待線程,可以被同一個鎖上notify喚醒。不可以對不同鎖中的線程進(jìn)行喚醒。也就是說,等待和喚醒必須是同一個鎖。而鎖可以是任意對象,所有可以被任意對象調(diào)用的方法定義在Object類中。

      5、JDK1.5 中提供個多線程升級解決方案。將同步synchronized替換成現(xiàn)實Lock操作。將Object中的wait,notify,notifyAll,替換了condition對象。該對象可以Lock鎖,進(jìn)行獲取。

      二、多線程:其他操作

      6、停止線程:A:定義循環(huán)結(jié)束標(biāo)記:因為線程運(yùn)行代碼一般都是循環(huán),只要控制了循環(huán)即可。B:使用interrupt(中斷)方法:該方法時結(jié)束線程的凍結(jié)狀態(tài),使線程回到運(yùn)行狀態(tài)中來。注意:stop方法已經(jīng)過時不再使用。

      7、如何停止線程?只有一種,run方法結(jié)束。開啟多線程運(yùn)行,運(yùn)行代碼通常是循環(huán)結(jié)構(gòu)。只要控制住循環(huán),就可以讓run方法結(jié)束,也就是線程結(jié)束。特殊情況:當(dāng)線程處于了凍結(jié)狀態(tài)。就不會讀取到標(biāo)記。那么線程就不會結(jié)束。

      8、當(dāng)沒有指定的方式讓凍結(jié)的線程恢復(fù)到運(yùn)行狀態(tài)時,這時需要對凍結(jié)進(jìn)行清除。強(qiáng)制讓線程恢復(fù)到運(yùn)行狀態(tài)中來。這樣就可以操作標(biāo)記讓線程結(jié)束。Thread類中提供該方法:interrupt方法。

      9、join方法:當(dāng)A線程執(zhí)行到了B線程的.join()方法時,A就會等待。等B線程都執(zhí)行完,A才會執(zhí)行。join可以用來臨時加入線程執(zhí)行。

      2016年01月19日

      day13

      一、String類:概述

      1、String類:字符串是一個特殊的對象。字符串一旦初始化就不可以被改變。String str=”abc”;String str1=new String(“abc”)。Str和str1的區(qū)別:str在內(nèi)存中有一個對象。Str1在內(nèi)存中有兩個對象。

      二、***重點:String類:常見操作

      常見的操作有哪些? “abcd” 1,獲取。

      1.1 字符串中包含的字符數(shù),也就是字符串的長度。

      int length():獲取長度。

      1.2 根據(jù)位置獲取位置上某個字符。

      char charAt(int index):獲取位置上某個字符。

      1.3 根據(jù)字符獲取該字符在字符串中位置。

      int indexOf(int ch):獲取該字符在字符串中位置。返回的是ch在字符串中第一次出現(xiàn)的位置。

      int indexOf(int ch,int fromIndex):從fromIndex指定位置開始,獲取ch在字符串中出現(xiàn)的位置。

      int indexOf(String str):返回的是str在字符串中第一次出現(xiàn)的位置。

      int indexOf(String str,int fromIndex):從fromIndex指定位置開始,獲取str在字符串中出現(xiàn)的位置。

      int lastIndexOf(int ch):反向索引。2,判斷。

      2.1 字符串中是否包含某一個子串。

      boolean contains(str);

      特殊之處:indexOf(str):可以索引str第一次出現(xiàn)位置,如果返回-1,表示該str不在字符串中存在。

      2.2 2.3 2.4 2.5 2.6 所以,也可以用于對指定判斷是否包含。

      if(str.indexOf(“aa”)!=-1)而且該方法既可以判斷又可以獲取出現(xiàn)的位置。字符串是否有內(nèi)容。

      boolean isEmpty(str):原理就是判斷長度是否為0。字符串是否是以指定內(nèi)容開頭。boolean startsWith(str);字符串是否是以指定內(nèi)容結(jié)尾。boolean endsWith(str);判斷字符串的內(nèi)容是否相同。復(fù)寫了Object類中的equals方法。boolean equals(str);判斷內(nèi)容是否相同,并忽略大小寫。boolean equalsIgnoreCass();3,轉(zhuǎn)換。

      3.1 將字符數(shù)組轉(zhuǎn)成字符串。

      構(gòu)造函數(shù):String(char[])

      String(char[],offset,count):將字符數(shù)組中的一部分轉(zhuǎn)成字符串。

      靜態(tài)方法:static String copyValueOf(char[]);

      static String copyValueOf(char[] data,int offset,int count);

      static String valueOf(char[]);

      3.2 將字符串轉(zhuǎn)成字符數(shù)組。//重點**。

      char[] toCharArray();3.3 將字節(jié)數(shù)組轉(zhuǎn)成字符串。

      String(byte[])String(byte[],offset,count):將字節(jié)數(shù)組中的一部分轉(zhuǎn)成字符串。3.4 將字符串轉(zhuǎn)成字節(jié)數(shù)組。

      byte[] getBytes();3.5 將基本數(shù)據(jù)類型轉(zhuǎn)成字符串。

      static String valueOf(int)

      static String valueOf(double)

      //3+“";//String.valueOf(3);

      特殊:字符串和字節(jié)數(shù)組在轉(zhuǎn)換過程中,是可以指定編碼表的。4,替換。

      String replace(oldchar,newchar);5,切割。

      String[] split(regex);6,子串。獲取字符串中的一部分。

      String substring(begin);String substring(begin,end);7,轉(zhuǎn)換,去除空格,比較。

      7.1 將字符串轉(zhuǎn)成大寫或者小寫。

      String toUpperCase();

      String toLowerCase();7.2 將字符串兩端的多個空格去除。

      String trim();7.3 對兩個字符串進(jìn)行自然順序的比較。

      int compareTo(string);

      三、String類:StringBuffer

      8、StringBuffer類:字符串的注組成原理就是通過該類實現(xiàn)的。StringBuffer可以對字符串內(nèi)容進(jìn)行增刪。StringBuffer是一個容器。很多方法與String相同。StringBuffer是可變長度的。

      9、StringBuffer是字符串緩沖區(qū)。是一個容器。

      10、緩沖區(qū)的特點:1,而且長度是可變化的。2,可以直接操作多個數(shù)據(jù)類型。3,最終會通過toString方法變成字符串。

      11、StringBuffer常見操作: C create U update R read D delete 1,存儲。

      StringBuffer append():將指定數(shù)據(jù)作為參數(shù)添加到已有數(shù)據(jù)的結(jié)尾處。

      StringBuffer insert(index,數(shù)據(jù)):可以將數(shù)據(jù)插入到指定index位置。2,刪除。

      StringBuffer delete(start,end):刪除緩沖區(qū)中的數(shù)據(jù),包含start,不包含end。

      StringBuffer deleteCharAt(index):刪除指定index位置的字符。3,獲取。

      char charAt(int index);int indexOf(String str);int lastIndexOf(String str);int length();String substring(int start,int end);4,修改。

      StringBuffer replace(start,end,string);void setCharAt(int index,char ch);5,反轉(zhuǎn)。

      StringBuffer reverse();6,將緩沖區(qū)中指定數(shù)據(jù)存儲到指定字符數(shù)組中。

      void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)。

      12、JDK1.5版本之后出現(xiàn)了StringBuilder。

      StringBuffer是線程同步。單線程使用StringBuffer效率較低。多線程使用StringBuffer保證了安全性。

      StringBuilder是線程不同步。單線程使用StringBuilder提高了效率。多線程使用StringBuilder可能存在安全問題,但可以通過自定義鎖來解決安全問題。以后開發(fā),建議使用StringBuilder。

      13、升級三個因素:1,提高效率。2,簡化書寫。3,提高安全性。

      四、基本數(shù)據(jù)類型對象包裝類

      14、基本數(shù)據(jù)類型對象包裝類的最常見作用:就是用于基本數(shù)據(jù)類型和字符串類型之間做轉(zhuǎn)換。

      15、數(shù)據(jù)類型轉(zhuǎn)換:

      A:基本數(shù)據(jù)類型轉(zhuǎn)成字符串。

      基本數(shù)據(jù)類型+”“ 基本數(shù)據(jù)類型.toString(基本數(shù)據(jù)類型值);如:Integer.toString(34);//將34整數(shù)變成”34“。B:字符串轉(zhuǎn)成基本數(shù)據(jù)類型。

      靜態(tài):基本數(shù)據(jù)類型包裝類.parseInt(字符串);如:xxx a=Xxx.parseXxx(String);

      int a=Integer.parseInt(”123“);

      double d=Double.parseDouble(”12.23“);

      boolean b=Boolean.parseBoolean(”true“);非靜態(tài):

      Integer i=new Integer(”123");

      int num=i.intValue();C:十進(jìn)制轉(zhuǎn)成其他進(jìn)制。

      toBinaryString();toHexString();toOctalString();D:其他進(jìn)制轉(zhuǎn)成十進(jìn)制。

      parseInt(string,radix)。

      2016年01月22日

      day14

      一、集合框架:概述

      1、集合類:為什么會出現(xiàn)集合類?面向?qū)ο笳Z言對事物的體現(xiàn)都是以對象的形式,所有為了方便對多個對象的操作,就對對象進(jìn)行存儲,集合就是存儲對象最常用的一種方式。

      2、數(shù)組和集合類同是容器,有何不同?數(shù)組雖然也可以存儲對象,但長度是固定的;集合長度是可變的,數(shù)組中可以存儲基本數(shù)據(jù)類型,集合只能存儲對象。

      3、集合類的特點:集合只用于存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。

      4、為什么會出現(xiàn)這么多的容器呢?因為每一個容器對數(shù)據(jù)的存儲方式有所不同。這個存儲方式稱之為:數(shù)據(jù)結(jié)構(gòu)。

      5、add方法的參數(shù)類型是Object。以便于接收任意類型對象。集合中存儲的都是對象的引用(地址)。

      6、什么是迭代器呢?其實就是集合的取出元素的方式。

      二、集合框架:List類

      7、List: 特有方法。凡是可以操作角標(biāo)的方法都是該體系特有的方法。增

      add(index,element);addAll(index,Collection);刪

      remove(index);改

      set(index,element);查

      get(index);subList(from,to);listIterator();

      8、List集合特有的迭代器。ListIterator是Iterator的子接口。在迭代時,不可以通過集合對象的方法操作集合中的元素。因為會發(fā)生ConcurrentModificationException異常。所有,在迭代器時,只能用迭代器的方法操作元素,可以Iterator方法時優(yōu)先的,只能對元素進(jìn)行判斷,取出,刪除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。該接口只能通過List集合的ListIterator方法獲取。

      9、Collection |--List:元素是有序的,元素可以重復(fù)。因為該集合體系有索引。

      |--ArrayList:底層的數(shù)據(jù)結(jié)構(gòu)使用的是數(shù)組結(jié)構(gòu)。特點:查詢速度很快。但是增刪稍慢。線程不同步。

      |--LinkedList:底層使用的是鏈表數(shù)據(jù)結(jié)構(gòu)。特點:增刪速度很快,查詢速度稍慢。

      |--Vector:底層是數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)。線程同步。被ArrayList替代了。

      |--Set:元素是無序的,元素不可以重復(fù)。

      10、枚舉就是Vector特有的取出方式。發(fā)現(xiàn)枚舉和迭代器很像。其實枚舉和迭代是一樣的。因為枚舉的名稱以及方法的名稱都過長。所有被迭代器取代了。枚舉郁郁而終了。

      11、LinkedList:特有方法: addFirst();addLast();

      getFirst();getLast();獲取元素,但是不刪除元素。如果集合中沒有元素,會出現(xiàn)NoSuchElementException。

      removeFirst();removeLast();獲取元素,但是元素被刪除。如果集合中沒有元素,會出現(xiàn)NoSuchElementException。

      在JDK1.6出現(xiàn)了替代方法。offerFirst();offerLast();

      peekFirst();peekLast();獲取元素,但是不刪除元素。如果集合中沒有元素,會返回null。

      pollFirst();pollLast();獲取元素,但是元素被刪除。如果集合中沒有元素,會返回null。

      三、集合框架:Set類

      12、HaseSet是如何保證元素唯一性的呢?是通過元素的兩個方法,hashCode和equals來完成。如果元素的hashCode值相同,才會判斷equals是否為true。如果元素的hashCode值不同,不會調(diào)用equals。

      13、注意:對于判斷元素是否存在,以及刪除操作,依賴的方法時元素的hashcode和equals方法。

      2016年1月23日

      day15

      一、集合框架:Set類

      1、Set:無序,不可以重復(fù)元素。

      |--HashSet:數(shù)據(jù)結(jié)構(gòu)是哈希表。線程是非同步的。

      保證元素唯一性的原理:判斷元素的hashCode值是否相同。

      如果相同,還會繼續(xù)判斷元素的equals方法,是否為true。

      |--TreeSet:可以對Set集合中的元素進(jìn)行排序。

      底層數(shù)據(jù)結(jié)構(gòu)是二叉樹。

      保證元素唯一性的依據(jù):

      compareTo方法和return 0。

      2、TreeSet排序的第一種方式:讓元素自身具備比較性。元素需要實現(xiàn)comparable接口,覆蓋comparaeTo方法。這種方式也稱為元素的自然順序,或者默認(rèn)順序。

      3、TreeSet排序的第二種方式:當(dāng)元素自身不具備比較性時,或者具備的比較性不是所需要的。這時就需要讓集合自身具備比較性。在集合初始化時,就有了比較方式。

      4、當(dāng)元素自身不具備比較性,或者具備的比較性不是所需要的。這時需要讓容器自身具備比較性。定義了比較器,將比較器對象作為參數(shù)傳遞給TreeSet集合的構(gòu)造函數(shù)。

      5、當(dāng)兩種排序都存在時,以比較器為主。定義一個類,實現(xiàn)Comparator接口,覆蓋compare方法。

      二、集合框架:泛型

      6、泛型:JDK1.5版本以后出現(xiàn)的新特性。用于解決安全問題,是一個類型安全機(jī)制。

      7、泛型的好處:好處:1,將運(yùn)行時期出現(xiàn)問題ClassCastException,轉(zhuǎn)移到了編譯時期。方便于程序員解決問題。讓運(yùn)行時期問題減少。更加安全。2,避免了強(qiáng)制轉(zhuǎn)換麻煩。

      8、泛型格式:通過<>來定義要操作的引用數(shù)據(jù)類型。在使用java提供的對象時,什么時候?qū)懛盒湍??通常在集合框架中很常見。只要見?>就要定義泛型。其實<>就是用來接收類型的。當(dāng)使用集合時,將集合中要存儲的數(shù)據(jù)類型作為參數(shù)傳遞到<>即可。

      9、什么時候定義泛型類?當(dāng)類中要操作的引用數(shù)據(jù)類型不確定的時候,早期定義Object來完成擴(kuò)展。現(xiàn)在定義泛型來完成擴(kuò)展。

      10、泛型類定義的泛型,在整個類中有效。如果被方法使用,那么泛型類的對象明確要操作的具體類型后,所有要操作的類型就已經(jīng)固定了。為了讓不同方法可以操作不同類型,而且類型還不確定,那么可以將泛型定義在方法上。

      11、特殊之處:靜態(tài)方法不可以訪問類上定義的泛型。如果靜態(tài)方法操作的引用數(shù)據(jù)類型不確定,可以將泛型定義在方法上。

      12、? 通配符。也理解為占位符。泛型的限定:

      ? extends E:可以接收E類型或者E的子類型。上限。? super E:可以接收E類型或者E的父類型。下限。

      2016年01月24日

      day16

      一、集合:Map概述

      1、Map集合:該集合存儲鍵值對。一對一對往里存,而且要保證鍵的唯一性。

      2、Map框架:

      1,添加。

      put(K key,V value)

      putAll(Map m)2,刪除。

      clear()

      remove(Object key)3,判斷。

      containsValue(Object value)

      containsKey(Object key)

      isEmpty()4,獲取。

      get(Object key)

      size()

      values()

      entrySet()

      keySet()

      3、Map |--HashTable:底層是哈希表數(shù)據(jù)結(jié)構(gòu),不可以存入null鍵null值,該集合是線程同步的。JDK1.0。效率低。

      |--HashMap:底層是哈希表數(shù)據(jù)結(jié)構(gòu),允許使用null鍵和null值,該集合是不同步的。JDK1.2。效率高。|--TreeMap:底層是二叉樹數(shù)據(jù)結(jié)構(gòu),線程不同步,可以用于給map集合中的鍵進(jìn)行排序。

      4、和Set很像。其實大家,Set底層就是使用了Map集合。

      5、map集合的兩種取出方式:1,keySet:將map中所有的鍵存入到Set集合。因為Set具備迭代器。所以可以迭代方式取出所有的鍵,在根據(jù)get方法,獲取每一個鍵對應(yīng)的值。Map集合的取出原理:將map集合轉(zhuǎn)成set集合。在通過迭代器取出。2,Set> entrySet:將map集合中的映射關(guān)系存入到了set集合中,而這個關(guān)系的數(shù)據(jù)類型就是:Map.Entry。

      6、Map.Entey 其實Entry也是一個接口,它是Map接口中的一個內(nèi)部接口。

      7、什么時候使用map集合呢?當(dāng)數(shù)據(jù)之間存在映射關(guān)系時,就要先想到map集合。

      8、map擴(kuò)展知識:map集合被使用是因為具備映射關(guān)系。

      2016年01月26日

      day17

      一、集合:Collections

      1、fill方法可以將list集合中所有元素替換成指定元素。

      二、集合:Arrays

      2、Arrays:用于操作數(shù)組的工具類。里面都是靜態(tài)方法。

      3、asList:將數(shù)組變成list集合。

      4、把數(shù)組變成list集合有什么好處?可以使用集合的思想和方法來操作數(shù)組中的元素。注意:將數(shù)組變成集合,不可以使用集合的增刪方法。因為數(shù)據(jù)的長度是固定的。如果你增刪,那么會發(fā)生UnsupportedOperationException。

      5、數(shù)組變集合:如果數(shù)組中的元素都是對象。那么變成集合時,數(shù)組中的元素就直接轉(zhuǎn)成集合中的元素。如果數(shù)組中的元素都是基本數(shù)據(jù)類型,那么會將該數(shù)組作為集合中的元素存在。

      6、集合變數(shù)組:指定類型的數(shù)組到底要定義多長呢?當(dāng)指定類型的數(shù)組長度小于了集合的size,那么該方法內(nèi)部會創(chuàng)建一個新的數(shù)組,長度為集合的size。當(dāng)指定類型的數(shù)組長度大于了集合的size,就不會新創(chuàng)建數(shù)組,而是使用傳遞進(jìn)來的數(shù)組。所以創(chuàng)建一個剛剛好的數(shù)組最優(yōu)。

      7、為什么要講集合變數(shù)組?為了限定對元素的操作。不需要進(jìn)行增刪了。

      8、高級for循環(huán):格式:for(數(shù)據(jù)類型變量名:被遍歷的集合(Collection)或者數(shù)組){}。

      9、高級for循環(huán)、迭代器、ListIterator的區(qū)別:

      高級for循環(huán)對集合進(jìn)行遍歷。只能獲取集合元素,但是不能對集合進(jìn)行操作。迭代器除了遍歷,還可以進(jìn)行remove集合中元素的動作。

      如果使用ListIterator,還可以在遍歷過程中對集合進(jìn)行增刪改查的操作。

      10、傳統(tǒng)for和高級for有什么區(qū)別呢?高級for有一個局限性:必須有被遍歷的目標(biāo)。建議在遍歷數(shù)組的時候,還是希望使用傳統(tǒng)for。因為傳統(tǒng)for可以定義角標(biāo)。

      11、JDK1.5版本出現(xiàn)的新特性:可變參數(shù):其實就是上一種數(shù)組參數(shù)的簡寫形式。不用每一次都手動的建立數(shù)組對象。只要將要操作的元素作為參數(shù)傳遞即可。隱式將這些參數(shù)封裝成了數(shù)組。

      12、方法的可變參數(shù)。在使用時注意:可變參數(shù)一定要定義在參數(shù)列表最后面。

      13、import static:靜態(tài)導(dǎo)入:例如:import static java.lang.System.*;//導(dǎo)入了System類中所有靜態(tài)成員。注意:當(dāng)類名重名時,需要制定具體的包名。當(dāng)方法重名時,指定具備所屬的對象或者類。

      2016年01月28日

      day18

      一、其他對象:System

      1、System:類中的方法和屬性都是靜態(tài)的。out:標(biāo)準(zhǔn)輸出,默認(rèn)是控制臺。int:標(biāo)準(zhǔn)輸入,默認(rèn)是鍵盤。描述系統(tǒng)一些信息。

      2、獲取系統(tǒng)屬性信息:Properties getProperties()。因為Properties是Hashtable的子類,也就是Map集合的一個子類對象。那么可以通過map的方法取出該集合中的元素。該集合中存儲都是字符串。沒有泛型定義。

      3、Runtime對象:該類并沒有提供構(gòu)造函數(shù)。說明不可以new對象。那么會直接想到該類中的方法都是靜態(tài)的。發(fā)現(xiàn)該類中還有非靜態(tài)方法。說明該類肯定會提供方法獲取本類對象。而且該方法是靜態(tài)的,并返回值類型是本類類型。由這個特點可以看出該類使用了單例設(shè)計模式完成。該方式的static Runtime getRuntime()。

      4、Math類:ceil方法:返回大于指定數(shù)據(jù)的最小整數(shù)。floor方法:返回小于指定數(shù)據(jù)的最大整數(shù)。round方法:四舍五入。pow方法:冪運(yùn)算。random:返回0-1之間的隨機(jī)數(shù)。

      二、IO流:概述

      5、IO(Input Outpu)流:IO流用來處理設(shè)備之間的數(shù)據(jù)傳輸。Java對數(shù)據(jù)的操作是通過流的方式。Java用于操作流的對象都在IO包中。流按操作數(shù)據(jù)分為兩種:字節(jié)流與字符流。流按流向分為:輸入流,輸出流。

      6、IO流常用基類:字節(jié)流的抽象基類:InputStream,OutputStream。字節(jié)流的抽象基類:Reader,Writer。注:由這四個類派生出來的子類名稱都是以其父類名作為子類名的后綴(如:InputStream的子類FilelnputStream,如:Reader的子類FileReader。)。

      7、字符流和字節(jié)流:字節(jié)流兩個基類:InputStream

      OutputStream。字符流兩個基類:Reader Writer。先學(xué)習(xí)字符流的特點:既然IO流是用于操作數(shù)據(jù)的,那么數(shù)據(jù)的最常見體現(xiàn)形式是:文件。2016年01月30日

      day19

      一、IO流:Buffered緩沖區(qū)

      1、字符流的緩沖區(qū):緩沖區(qū)的出現(xiàn)提高了對數(shù)據(jù)的讀寫效率。對應(yīng)類:BufferedWriter;BufferedReader。緩沖區(qū)要結(jié)合流才可以使用。在流的基礎(chǔ)上對流的功能進(jìn)行了增強(qiáng)。

      2、緩沖區(qū)的出現(xiàn)是為了提高流的操作效率而出現(xiàn)的。所以在創(chuàng)建緩沖區(qū)之前,必須要先有流對象。該緩沖區(qū)中提供了一個跨平臺的換行符。newLine()。

      3、字符讀取流緩沖區(qū):該緩沖區(qū)提供了一次讀一行的方法readLine(),方便于對文本數(shù)據(jù)的獲取。當(dāng)返回null時,表示讀到文件末尾。

      4、readLine方法返回的時候只返回回車符之前的數(shù)據(jù)內(nèi)容。并不返回回車符。

      5、裝飾設(shè)計模式:當(dāng)想要對已有的對象進(jìn)行功能增強(qiáng)時,可以定義類,將已有對象傳入,基于已有的功能,并提供加強(qiáng)功能。那么自定義的該類稱為裝飾類。

      6、裝飾類通常會通過構(gòu)造方法接收被裝飾的對象。并基于被裝飾的對象的功能,提供更強(qiáng)的功能。

      7、裝飾模式比繼承要靈活,避免了繼承體系臃腫。而且降低了類與類之間的關(guān)系。裝飾類因為是增強(qiáng)已有對象,具備的功能和已有的是相同的,只不過提供了更強(qiáng)功能。所以裝飾類和被裝飾類通常是都屬于一個體系中的。

      二、IO流:字節(jié)流

      8、字符流: FileReader FileWriter BufferedReader BufferedWriter 字節(jié)流:

      InputStream

      OutputStream BufferedInputStream

      BufferedOutputStream

      9、流操作的基本規(guī)律:

      最痛苦的就是流對象有很多,不知道該用哪一個。通過兩個明確來完成。1,明確源和目的。

      源:輸入流。InputStream Reader。

      目的:輸出流。OutputStream Writer。2,明確操作的數(shù)據(jù)是否是純文本。

      是:字符流。

      不是:字節(jié)流。

      3,當(dāng)體系明確后,再明確要使用哪個具體的對象。

      通過設(shè)備來進(jìn)行區(qū)分:

      源設(shè)備:內(nèi)存,硬盤,鍵盤。目的設(shè)備:內(nèi)存,硬盤,控制臺。

      2016年01月31日

      day20

      一、IO流:File類

      1、File類:用來將文件或者文件夾封裝成對象。方便對文件與文件夾進(jìn)行操作。File對象可以作為參數(shù)傳遞給流的構(gòu)造函數(shù)。了解File類中的常用方法。

      2、File類常見方法: 1,創(chuàng)建。

      boolean createNewFile();在指定位置創(chuàng)建文件,如果該文件已經(jīng)存在,則不創(chuàng)建,返回false。

      和輸出流不一樣,輸出流對象一建立創(chuàng)建對象。而且文件已經(jīng)存在,會覆蓋。

      boolean mkdir();創(chuàng)建一級文件夾。

      boolean mkdirs();創(chuàng)建多級文件夾。2,刪除。

      boolean delete();刪除失敗返回false。

      void deleteOnExit();在程序退出時刪除指定文件。3,判斷。

      boolean exists();文件是否存在。

      boolean isFile();判斷是否是文件。

      boolean isDirectory();判斷是否是文件夾。

      boolean isHidden();判斷是否是隱藏文件。

      boolean isAbsolute();判斷是否是絕對路徑。4,獲取信息。

      String getName();獲取文件名稱。

      String getPath();獲取文件相對路徑。

      String getParent();該方法返回的是絕對路徑中的父目錄。如果獲取的是相對路徑,返回null。

      如果相對路徑中有上一層目錄那么該目錄就是返回結(jié)果。

      getAbsolute();獲取文件絕對路徑。

      lastModified();返回文件最后一次被修改的時間。

      length()。

      3、因為目錄中還有目錄,只要使用同一個列出目錄功能的函數(shù)完成即可。在列出過程中出現(xiàn)的還是目錄的話,還可以再次調(diào)用本功能。也就是函數(shù)自身調(diào)用自身。這種表現(xiàn)形式,或者編程手法,稱為遞歸。

      遞歸要注意:1,限定條件。2,要注意遞歸的次數(shù)。盡量避免內(nèi)存溢出。

      4、練習(xí):將一個指定目錄下的java文件的絕對路徑,存儲到一個文本文件中。建立一個java文件列表文件。思路:1,對指定的目錄進(jìn)行遞歸。2,獲取遞歸過程所有的java文件的路徑。3,將這些路徑存儲到集合中。4,將集合中的數(shù)據(jù)寫入到一個文件中。

      二、IO流:Properties類

      5、Properties是hashtable的子類。也就是說它具備map集合的特點。而且它里面存儲的鍵值對都是字符串。是集合中和IO技術(shù)相結(jié)合的集合容器,該對象的特點:可以用于鍵值對形式的配置文件。

      6、那么在加載數(shù)據(jù)時,需要數(shù)據(jù)有固定格式:鍵=值。

      三、IO流:其他類

      7、打印流:PrintWriter與PrintStream:可以直接操作輸入流和文件。打印流:

      該流提供了打印方法,可以將各種數(shù)據(jù)類型的數(shù)據(jù)都原樣打印。字節(jié)打印流:PrintStream 構(gòu)造函數(shù)可以接收的參數(shù)類型: 1,file對象。File。

      2,字符串路徑。String。

      3,字節(jié)輸出流。OutputStream。字符打印流:PrintWriter 構(gòu)造函數(shù)可以接收的參數(shù)類型: 1,file對象。File。

      2,字符串路徑。String。

      3,字節(jié)輸出流。OutputStream。4,字符數(shù)出來:Writer。

      8、序列流:SequenceInputStream:對多個流進(jìn)行合并。

      9、操作對象:ObjectInputStream與ObjectOutputStream:被操作的對象需要實現(xiàn)Serializable(標(biāo)記接口)。

      2016年02月01日

      day21

      一、IO流:其他類

      1、RandomAccessFile:隨機(jī)訪問文件,自身具備讀寫的方法。通過skipBytes(int x),seek(int x)來達(dá)到隨機(jī)訪問。

      2、管道流:PipedInputStream和PipedOutputStream:輸入輸出可以直接進(jìn)行連接,通過結(jié)合線程使用。

      3、RandomAccessFile:該類不算是IO體系中子類。而是直接繼承自O(shè)bject。但是它是IO包中成員。因為它具備讀和寫功能。內(nèi)部封裝了一個數(shù)組,而且通過指針對數(shù)據(jù)的元素進(jìn)行操作??梢酝ㄟ^getFilePointer獲取指針位置。同時可以通過seek改變指針的位置。其實完成讀寫的原理就是內(nèi)部封裝了字節(jié)輸入流和輸出流。通過構(gòu)造函數(shù)可以看出,該類只能操作文件。而且操作文件還有模式:只讀r,讀寫rw等。

      4、如果模式為只讀r。不會創(chuàng)建文件。會去讀取一個已存在文件,如果該文件不存在,則會出現(xiàn)異常。如果模式為讀寫rw。操作的文件不存在,會自動創(chuàng)建。如果存在則不會覆蓋。

      5、IO包中的其他類:

      操作基本數(shù)據(jù)類型:DataInputStream與DataOutputStream。

      操作字節(jié)數(shù)組:ByteArrayInputStream與ByteArrayOutputStream。操作字符數(shù)組:CharArrayReader與CharArrayWrite。操作字符串:StringReader與StringWriter。

      6、用于操作字節(jié)數(shù)組的流對象。

      ByteArrayInputStream :在構(gòu)造的時候,需要接收數(shù)據(jù)源,而且數(shù)據(jù)源是一個字節(jié)數(shù)組。ByteArrayOutputStream :在構(gòu)造的時候,不用定義數(shù)據(jù)目的,因為該對象中已經(jīng)內(nèi)部封裝了可變長度的字節(jié)數(shù)組。這就是數(shù)據(jù)目的地。因為這兩個流對象都操作的數(shù)組,并沒有使用系統(tǒng)資源。所以,不用進(jìn)行close關(guān)閉。在流操作規(guī)律講解時: 源設(shè)備:

      鍵盤 System.in,硬盤 FileStream,內(nèi)存 ArrayStream。目的設(shè)備:

      控制臺 System.out,硬盤 FileStream,內(nèi)存 ArrayStream。用流的讀寫思想來操作數(shù)組。

      二、IO流:字符編碼

      7、字符編碼:字符流的出現(xiàn)為了方便操作字符。更重要是的加入了編碼轉(zhuǎn)換。通過子類轉(zhuǎn)換流來完成:InputStreamReader;OutputStreamWriter。在兩個對象進(jìn)行構(gòu)造的時候可以加入字符集。

      8、編碼表的由來:計算機(jī)只能識別二進(jìn)制數(shù)據(jù),早期由來是電信號。為了方便應(yīng)用計算機(jī),讓它可以識別各個國家的文字。就將各個國家的文字用數(shù)字來表示,并一一對應(yīng),形成一張表。這就是編碼表。

      9、常見的編碼表:

      ASCII:美國標(biāo)準(zhǔn)信息交換碼。用一個字節(jié)的7位可以表示。ISO8859-1:拉丁碼表。歐洲碼表。用一個字節(jié)的8位表示。GBK2312:中國的中文編碼表。用兩個字節(jié)的16位來表示。GBK:中國的中文編碼表升級,融合了更多的中文文字符號。

      Unicode:國際標(biāo)準(zhǔn)碼,融合了多種文字。所有文字都用兩個字節(jié)來表示,Java語言使用的就是Unicode。

      UTF-8:最多用三個字節(jié)來表示一個字符。??

      10、編碼:字符串變成字節(jié)數(shù)組。解碼:字節(jié)數(shù)組變成字符串。String-->byte[];str.getBytes(charsetName);byte[]-->String;new String(byte[],charsetName)。2016年02月02日

      day22

      一、GUI:概述

      1、GUI:圖形用戶界面。

      GUI:Graphical User Interface(圖形用戶接口)。用圖形的方式,來顯示計算機(jī)操作的界面,這樣更方便跟直觀。

      CLI:Command line User Inteface(命令行用戶接口)。就是常見的Dos命令行操作。需要記憶一些常用的命令,操作不直觀。

      舉例:比如:創(chuàng)建文件夾,或者刪除文件夾等。

      Java為GUI提供的對象都存在java.Awt和javax.Swing兩個包中。

      2、Awt與Swing:

      java.Awt:Abstract Window ToolKit(抽象窗口工具包),需調(diào)用本地系統(tǒng)方法實現(xiàn)功能。屬重量級控件。

      javax.Swing:在Awt的基礎(chǔ)上,建立的一套圖形界面系統(tǒng),其中提供了更多的組件,而且完全由Java實現(xiàn)。增強(qiáng)了移植性,屬輕量級控件。

      3、繼承關(guān)系圖:

      4、布局管理器:

      容器中的組件的排放方式,就是布局。常見的布局管理器:

      FlowLayout(流式布局管理器)

      從左到右的順序排列。

      Panel默認(rèn)的布局管理器。BorderLayout(邊界布局管理器)

      東,南,西,北,中。

      Frame默認(rèn)的布局管理器。GridLayout(網(wǎng)格布局管理器)

      規(guī)則的矩陣。

      CardLayout(卡片布局管理器)

      選項卡。

      GridBagLayout(網(wǎng)格包布局管理器)

      非規(guī)則的矩陣。

      5、創(chuàng)建圖形化界面: 1,創(chuàng)建frame窗體。

      2,對窗體進(jìn)行基本設(shè)置。

      比如:大小、位置、布局。3,定義組件。

      4,將組件通過窗體的add方法添加到窗體中。5,讓窗體顯示,通過setVisible(true)來完成。

      6、建立一個簡單的窗體:

      Container常用子類:Window Panel(面板,不能單獨存在。)Window常用子類:Frame Dialog。簡單的窗體創(chuàng)建過程:

      Frame f = new Frame(“my window”);f.setLayout(new FlowLayout());f.setSize(500,400);//設(shè)置窗體大小。

      f.setLocation(300,200);//設(shè)置窗體出現(xiàn)在屏幕的位置。f.setVisible(true)。

      二、GUI:事件監(jiān)聽機(jī)制

      7、事件監(jiān)聽機(jī)制組成:事件源(組件);事件(Event);監(jiān)聽器(Listener);事件處理(引發(fā)事件后處理方式)。

      8、事件監(jiān)聽機(jī)制流程圖:

      9、事件監(jiān)聽機(jī)制的特點: 1,事件源。2,事件。3,監(jiān)聽器。4,事件處理。

      事件源:就是awt或者swing包中的那些圖形界面組件。事件:每一個事件源都有自己特有的對應(yīng)事件和共性事件。

      監(jiān)聽器:將可以觸發(fā)某一個事件的動作(不止一個動作)都已經(jīng)封裝到了監(jiān)聽器中。以上三者,在java中都已經(jīng)定義好了。直接獲取其對象來用就可以了。我們要做的事情是,就是對產(chǎn)生的動作進(jìn)行處理。

      2016年02月03日

      day23

      一、網(wǎng)絡(luò)編程:概述

      1、網(wǎng)絡(luò)編程:

      網(wǎng)絡(luò)模型:OSI參考模型。TCP/IP參考模型。網(wǎng)絡(luò)通訊要素:IP地址。端口號。傳輸協(xié)議。

      2、網(wǎng)絡(luò)參考模型:

      3、網(wǎng)絡(luò)通訊要素: IP地址:網(wǎng)絡(luò)中設(shè)備的標(biāo)識。不易記憶,可用主機(jī)名。本地回環(huán)地址:127.0.0.1主機(jī)名:localhost。端口號:用于標(biāo)識進(jìn)程的邏輯地址,不同進(jìn)程的標(biāo)識。有效端口:0~65535,其中0~1024系統(tǒng)使用或保留端口。

      傳輸協(xié)議:通訊的規(guī)則。常見協(xié)議:TCP,UDP。

      4、UDP和TCP: UDP:

      將數(shù)據(jù)及源和目的封裝成數(shù)據(jù)包中,不需要建立連接。每個數(shù)據(jù)報的大小在限制在64k內(nèi)。因無連接,是不可靠協(xié)議。不需要建立連接,速度快。

      特點:面向無連接。數(shù)據(jù)會被封包。不可靠。速度快。比如:聊天,視頻會議,桌面共享。TCP:

      建立連接,形成傳輸數(shù)據(jù)的通道。

      在連接中進(jìn)行大數(shù)據(jù)量傳輸。

      通過三次握手完成連接,是可靠協(xié)議。

      必須建立連接,效率會稍低。

      特點:面向連接。可大數(shù)據(jù)量傳輸。比較可靠。稍微有點慢。比如:下載。

      5、Socket:

      Socket就是為網(wǎng)絡(luò)服務(wù)提供的一種機(jī)制。通信的兩端都有Socket。

      網(wǎng)絡(luò)通信其實就是Socket間的通信。數(shù)據(jù)在兩個Socket間通過IO傳輸。

      二、網(wǎng)絡(luò)編程:UDP

      6、UDP傳輸:

      DatagramSocket與DatagramPacket。建立發(fā)送端,接收端。建立數(shù)據(jù)包。

      調(diào)用Socket的發(fā)送接收方法。關(guān)閉Socket。

      發(fā)送端與接收端是兩個獨立的運(yùn)行程序。

      三、網(wǎng)絡(luò)編程:TCP

      7、TCP傳輸:

      Socket和ServerSocket。建立客戶端和服務(wù)器端。

      建立連接后,通過Socket中的IO流進(jìn)行數(shù)據(jù)的傳輸。關(guān)閉socket。

      同樣,客戶端與服務(wù)器端是兩個獨立的應(yīng)用程序。2016年02月04日

      day24

      一、網(wǎng)絡(luò)編程:瀏覽器客戶端

      1、視頻演示講解。

      2016年02月6日

      day25

      一、正則表達(dá)式

      1、正則表達(dá)式:符合一定規(guī)則的表達(dá)式。作用:用于專門操作字符串。

      2、正則表達(dá)式:符合一定規(guī)則的表達(dá)式。

      作用:用于專門操作字符串。

      特點:用一些特定的符號來表示一些代碼操作。這樣就簡化了書寫。

      所以學(xué)習(xí)正則表達(dá)式,就是在學(xué)習(xí)一些特殊符號的使用。

      好處:可以簡化對字符串的復(fù)雜操作。

      弊端:符號定義越多,正則越長,閱讀性越差。

      3、具體操作功能:

      1,匹配:String matchess();方法。用規(guī)則匹配整個字符串,只要有一處不符合規(guī)則,就匹配結(jié)束,返回false。2,切割:String split();3,替換:String replaceAll();4,獲?。簩⒆址蟹弦?guī)則的子串取出。

      4、獲?。翰僮鞑襟E:

      1,將正則表達(dá)式封裝成對象。

      2,讓正則對象和要操作的字符串相關(guān)聯(lián)。3,關(guān)聯(lián)后,獲取正則匹配引擎。

      4,通過引擎對符合規(guī)則的子串進(jìn)行操作,比如取出。

      第四篇:java知識點總結(jié)(定稿)

      目錄

      目錄................................................................................................................................................1 基礎(chǔ)篇............................................................................................................................................4

      一、JDK常用的包................................................................................................................4

      二、Get和Post的區(qū)別.......................................................................................................4

      三、Java多態(tài)的具體體現(xiàn)...................................................................................................4

      四、StringBuffer StringBuilder String 區(qū)別.......................................................................5

      五、Hashtable與HashMap的區(qū)別....................................................................................5六、九大隱式對象...............................................................................................................5

      七、Forword(請求轉(zhuǎn)發(fā))與Redirect(重定向).....................................................................6

      八、JQurey總結(jié)....................................................................................................................6

      九、XML和Json的特點....................................................................................................6

      十、request.getSession()、reqeust.getSession(false)和

      request.getSession(true)7

      十一、Page和PageContext的區(qū)別....................................................................................7

      十二、Ajax總結(jié)..................................................................................................................7

      十三、JSP9大隱視對象中四個作用域的大小與作用范圍................................................7

      十四、List,Set,Collection,Collections..................................................................................8

      十五、java的基本數(shù)據(jù)類型...............................................................................................8

      十六、冒泡排序...................................................................................................................8 十七、二分查找法.................................................................................................................9

      十八、時間類型轉(zhuǎn)換.............................................................................................................9

      十九、階乘.......................................................................................................................10

      二十、UE和UI的區(qū)別....................................................................................................10 二

      十一、osi七層模型.......................................................................................................10 二

      十二、線程和進(jìn)程的區(qū)別.............................................................................................11 二

      十三、jvm的內(nèi)存結(jié)構(gòu).................................................................................................11 二

      十四、內(nèi)存泄露和內(nèi)存溢出.........................................................................................11 二

      十五、單例.....................................................................................................................11 二

      十六、解析xml文件的幾種技術(shù).................................................................................13 二

      十七、項目的生命周期.................................................................................................14

      二十八、OSCache的判斷.................................................................................................14 二

      十九、經(jīng)常訪問的技術(shù)網(wǎng)站.........................................................................................15 三

      十、項目團(tuán)隊中交流的工具.........................................................................................15 三

      十一、平時瀏覽的書籍.................................................................................................15 三

      十二、java Exception體系結(jié)構(gòu)....................................................................................15 三

      十三、session和cookie的區(qū)別....................................................................................16 三

      十四、字節(jié)流與字符流的區(qū)別.....................................................................................16 三

      十五、final,finally,finalize 三者區(qū)別...........................................................................17 三

      十六、Io流的層次結(jié)構(gòu)................................................................................................17 三

      十七、JAVA:..................................................................................................................18 三

      十八、JavaSE JavaEE JavaME區(qū)別........................................................................18 三

      十九、JDK JRE JVM的區(qū)別:.............................................................................19 四

      十、報錯的狀態(tài)碼:.....................................................................................................20 四

      十一、協(xié)議以及默認(rèn)的端口號.....................................................................................20 四

      十二、抽象類與接口的區(qū)別.........................................................................................20 四

      十三、修飾符的作用.....................................................................................................20 框架篇........................................................................................................................................21

      一、Struts1的運(yùn)行原理..................................................................................................23

      二、Struts2的運(yùn)行原理..................................................................................................23

      三、struts2的體系結(jié)構(gòu)...................................................................................................23

      四、Spring MVC運(yùn)行原理.............................................................................................24

      五、Struts1.x與Struts2.x的區(qū)別...................................................................................25

      六、Spring MVC、struts1和struts2區(qū)別......................................................................25

      七、Struts2中result中的type類型...............................................................................25

      八、Struts2標(biāo)簽..............................................................................................................26

      九、SSI整合....................................................................................................................26

      十、SSH整合..................................................................................................................26

      十、Spring MVC整合.....................................................................................................27

      十一、Hibernate 中g(shù)et 和 load的區(qū)別.........................................................................28

      十二、Hibernate、Ibatis、Jdbc三者的區(qū)別..................................................................28

      十三、Hibernate的運(yùn)行原理..........................................................................................28

      十四、Hibernate五大核心(類/接口)簡述.................................................................28

      十五、Hibernate與JDBC的區(qū)別..................................................................................29

      十六、Hibernate中的兩大配置文件................................................................................29

      十七、Hibernate事務(wù)處理..............................................................................................29

      十八、Hibernate的三種狀態(tài)以及狀態(tài)的轉(zhuǎn)換..............................................................29

      十九、分頁步驟...............................................................................................................30

      二十、hibernate緩存概述.................................................................................................30 二

      十一、Ssh的概述:.....................................................................................................30 二

      十二、防止表單重復(fù)提交.............................................................................................31 二

      十三、JSP標(biāo)簽:........................................................................................................31 二

      十四、過濾器.................................................................................................................32 二

      十五、攔截器的理解.....................................................................................................32 二

      十六、Spring融入框架................................................................................................33

      數(shù)據(jù)庫篇.....................................................................................................................................33

      一、JDBC連接數(shù)據(jù)庫步驟(以MYSQL為例).............................................................33

      二、數(shù)據(jù)庫連接池...........................................................................................................34

      三、mysql的數(shù)據(jù)庫導(dǎo)入導(dǎo)出........................................................................................35

      四、jdbc分段批量提交的時候出現(xiàn)異常怎么處理?.....................................................35

      五、jdbc批量處理數(shù)據(jù)...................................................................................................35

      六、Oracle分頁...............................................................................................................36

      七、Oracle的基本數(shù)據(jù)類型...........................................................................................36

      八、id、rowid、rownum的區(qū)別....................................................................................37

      九、主鍵和唯一索引的區(qū)別?.......................................................................................37

      十、Preparedstatement和statement的區(qū)別...................................................................37

      十一、數(shù)據(jù)庫三范式.......................................................................................................38

      十二、視圖概述...............................................................................................................38

      十三、存儲過程概述.......................................................................................................38

      十四、索引概述...............................................................................................................39

      十五、必背的sql語句....................................................................................................41 業(yè)務(wù)場景篇.................................................................................................................................44

      一、Spring的概述...........................................................................................................44

      二、事務(wù)概述...................................................................................................................45

      三、權(quán)限概述...................................................................................................................46

      四、OSCache業(yè)務(wù)場景...................................................................................................46

      五、線程概述...................................................................................................................47

      六、Ajax請求Session超時問題....................................................................................47 七:java線程池概述.........................................................................................................48

      八、OSCache概述...........................................................................................................49

      九、OSCache+autocomplete+單例業(yè)務(wù)場景..................................................................49

      十、緩存概述...................................................................................................................50

      十一、實現(xiàn)頁面靜態(tài)化業(yè)務(wù)場景...................................................................................50

      十二、servlet線程安全描述...........................................................................................51

      十三、(jbpm4)工作流引擎描述:.....................................................................................51

      十四、JPBM業(yè)務(wù)場景....................................................................................................52

      十五、Ant描述................................................................................................................52

      十六、FreeMarker描述...................................................................................................53

      十七、webService描述...................................................................................................53

      十八、oracle索引概述....................................................................................................55

      十九、oracle存儲過程....................................................................................................56

      二十、Junit 業(yè)務(wù)場景.......................................................................................................56 二

      十一、Apache+Tomcat 實現(xiàn)負(fù)載均衡及seesion復(fù)制...............................................56 二

      十二、Ant業(yè)務(wù)場景......................................................................................................57 二

      十三、maven業(yè)務(wù)場景.................................................................................................57 二

      十四、Servlet的概述:................................................................................................58 優(yōu)化篇........................................................................................................................................64

      一、代碼優(yōu)化...................................................................................................................64

      二、業(yè)務(wù)優(yōu)化...................................................................................................................64

      三、sql優(yōu)化.....................................................................................................................65

      四、防sql注入................................................................................................................68

      基礎(chǔ)篇

      一、JDK常用的包

      java.lang: 這個是系統(tǒng)的基礎(chǔ)類,比如String、Math、Integer、System和Thread,提供常用功能。

      java.io: 這里面是所有輸入輸出有關(guān)的類,比如文件操作等

      java.net: 這里面是與網(wǎng)絡(luò)有關(guān)的類,比如URL,URLConnection等。java.util : 這個是系統(tǒng)輔助類,特別是集合類Collection,List,Map等。java.sql: 這個是數(shù)據(jù)庫操作的類,Connection, Statememt,ResultSet等

      二、Get和Post的區(qū)別

      1.get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù),2.get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。

      3.get安全性非常低,post安全性較高。但是執(zhí)行效率卻比Post方法好。

      4.在進(jìn)行文件上傳時只能使用post而不能是get。

      三、Java多態(tài)的具體體現(xiàn)

      面向?qū)ο缶幊逃兴膫€特征:抽象,封裝,繼承,多態(tài)。

      多態(tài)有四種體現(xiàn)形式:

      1.接口和接口的繼承。2.類和類的繼承。3.重載。4.重寫。

      其中重載和重寫為核心。

      重載:重載發(fā)生在同一個類中,在該類中如果存在多個同名方 法,但是方法的參數(shù)類型和個數(shù)不一樣,那么說明該方法被重 載了。

      重寫:重寫發(fā)生在子類繼承父類的關(guān)系中,父類中的方法被子 類繼承,方法名,返回值類型,參數(shù)完全一樣,但是方法體不 一樣,那么說明父類中的該方法被子類重寫了。

      四、StringBuffer StringBuilder String 區(qū)別

      String

      字符串常量

      不可變

      使用字符串拼接時是不同的2個空間

      StringBuffer 字符串變量

      可變

      線程安全

      字符串拼接直接在字符串后追加 StringBuilder 字符串變量

      可變

      非線程安全

      字符串拼接直接在字符串后追加

      1.StringBuilder執(zhí)行效率高于StringBuffer高于String.2.String是一個常量,是不可變的,所以對于每一次+=賦值都會創(chuàng)建一個新的對象,StringBuffer和StringBuilder都是可變的,當(dāng)進(jìn)行字符串拼接時采用append方

      法,在原來的基礎(chǔ)上進(jìn)行追加,所以性能比String要高,又因為StringBuffer 是

      線程安全的而StringBuilder是線程非安全的,所以StringBuilder的效率高于

      StringBuffer.3.對于大數(shù)據(jù)量的字符串的拼接,采用StringBuffer,StringBuilder.五、Hashtable與HashMap的區(qū)別

      HashMap不是線程安全的,HashTable是線程安全。

      HashMap允許空(null)的鍵和值(key),HashTable則不允許。

      HashMap性能優(yōu)于Hashtable。

      Map 1.Map是一個以鍵值對存儲的接口。Map下有兩個具體的實現(xiàn),分別是HashMap和HashTable.2.HashMap是線程非安全的,HashTable是線程安全的,所以HashMap的效率高于HashTable.3.HashMap允許鍵或值為空,而HashTable不允許鍵或值為空.六、九大隱式對象

      輸入/輸出對象:

      request

      response

      out 作用域通信對象: session application pageContext Servlet 對象:

      page

      config 錯誤對象:

      exception

      七、Forword(請求轉(zhuǎn)發(fā))與Redirect(重定向)

      1、從數(shù)據(jù)共享上

      Forword是一個請求的延續(xù),可以共享request的數(shù)據(jù)

      Redirect開啟一個新的請求,不可以共享request的數(shù)據(jù)

      2、從地址欄

      Forword轉(zhuǎn)發(fā)地址欄不發(fā)生變化

      Redirect轉(zhuǎn)發(fā)地址欄發(fā)生變化

      八、JQurey總結(jié)

      jquery是一個輕量級的js框架,具有跨瀏覽器的特性,兼容性好,并且封裝了很多工具,方便使用。

      常用的有: 選擇器,dom操作,ajax(ajax不能跨域),特效,工具類

      九、XML和Json的特點

      Xml特點:

      1、有且只有一個根節(jié)點;

      2、數(shù)據(jù)傳輸?shù)妮d體

      3、所有的標(biāo)簽都需要自定義

      4、是純文本文件

      Json(JavaScript Object Notation)特點:

      json分為兩種格式:

      json對象(就是在{}中存儲鍵值對,鍵和值之間用冒號分隔,鍵 值 對之間用逗號分隔);

      json數(shù)組(就是[]中存儲多個json對象,json對象之間用逗號分隔)(兩者間可以進(jìn)行相互嵌套)數(shù)據(jù)傳輸?shù)妮d體之一

      區(qū)別:

      傳輸同樣格式的數(shù)據(jù),xml需要使用更多的字符進(jìn)行描述,流行的是基于json的數(shù)據(jù)傳輸。

      xml的層次結(jié)構(gòu)比json更清晰。

      共同點:

      xml和json都是數(shù)據(jù)傳輸?shù)妮d體,并且具有跨平臺跨語言的特性。

      十、request.getSession()、reqeust.getSession(false)和

      request.getSession(true)

      getSession()/getSession(true):當(dāng)session存在時返回該session,否則新建一個

      session并返回該對象

      getSession(false):當(dāng)session存在時返回該session,否則返回null

      十一、Page和PageContext的區(qū)別

      Page是servlet對象;使用this關(guān)鍵字,它的作用范圍是在同一頁面。PageContext是作用域通信對象;通常使用setAttribute()和getAttribute()來設(shè)置和獲取存放對象的值。

      十二、Ajax總結(jié)

      AJAX 全稱: 異步JavaScript及 XML(Asynchronous JavaScript And XML)Ajax的核心是JavaScript對象XmlHttpRequest(XHR)。

      Ajax的優(yōu)點:

      提高用戶體驗度(UE)

      提高應(yīng)用程序的性能

      進(jìn)行局部刷新

      AJAX不是一種新的編程語言,而是一種用于創(chuàng)建更好更快以及交互性更強(qiáng)的 Web 應(yīng)用程序的技術(shù)。

      2.通過 AJAX,我們的 JavaScript 可使用JavaScript的XMLHttpRequest對象來直接與服務(wù)器進(jìn)行通信。通過這個對象,我們的 JavaScript 可在不重載頁面的情況與Web服務(wù)器交換數(shù)據(jù),即可局部刷新。

      3.AJAX 在瀏覽器與 Web 服務(wù)器之間使用異步數(shù)據(jù)傳輸(HTTP 請求),這樣就可使網(wǎng)頁從服務(wù)器請求少量的信息,而不是整個頁面,減輕服務(wù)器的負(fù)擔(dān),提升站點的性能。

      AJAX 可使因特網(wǎng)應(yīng)用程序更小、更快,更友好,用戶體驗(UE)好。5.Ajax是基于標(biāo)準(zhǔn)化并被廣泛支持的技術(shù),并且不需要插件和下載小程序

      十三、JSP9大隱視對象中四個作用域的大小與作用范圍

      四個作用域從大到?。篴ppliaction>session>request>page application:全局作用范圍,整個應(yīng)用程序共享.生命周期為:應(yīng)用程序啟動到停止。

      session:會話作用域,當(dāng)用戶首次訪問時,產(chǎn)生一個新的會話,以后服務(wù)器就可以記

      住這個會話狀態(tài)。

      request:請求作用域,就是客戶端的一次請求。

      page:一個JSP頁面。

      以上作用范圍使越來越小,request和page的生命周期都是短暫的,他們之間的區(qū)別就是:一個request可以包含多個page頁(include,forward)。

      十四、List,Set,Collection,Collections

      1.List和Set都是接口,他們都繼承于接口Collection,List是一個有序的可重復(fù)的集合,而Set的無序的不可重復(fù)的集合。Collection是集合的頂層接口,Collections是一個封裝了眾多關(guān)于集合操作的靜態(tài)方法的工具類,因為構(gòu)造方法是私有的,所以不能實例化。

      2.List接口實現(xiàn)類有ArrayList,LinkedList,Vector。ArrayList和Vector是基于數(shù)組實現(xiàn)的,所以查詢的時候速度快,而在進(jìn)行增加和刪除的時候速度較慢LinkedList是基于鏈?zhǔn)酱鎯Y(jié)構(gòu),所以在進(jìn)行查詢的時候速度較慢但在進(jìn)行增加和刪除的時候速度較快。又因為Vector是線程安全的,所以他和ArrayList相比而言,查詢效率要低。

      十五、java的基本數(shù)據(jù)類型

      數(shù)據(jù)類型 大小 byte(字節(jié))1(8位)shot(短整型)2(16位)int(整型)4(32位)long(長整型)8(32位)float(浮點型)4(32位)double(雙精度)8(64位)char(字符型)2(16位)boolean(布爾型)1位 附加:

      String是基本數(shù)據(jù)類型嗎?(String不是基本數(shù)據(jù)類型)String的長度是多少,有限制?(長度受內(nèi)存大小的影響)

      十六、冒泡排序

      public class Sort { public static void sort(){

      } Scanner input = new Scanner(System.in);int sort[] = new int[10];int temp;System.out.println(“請輸入10個排序的數(shù)據(jù):”);for(int i = 0;i < sort.length;i++){

      sort[i] = input.nextInt();} for(int i = 0;i < sort.lengthi1)* num;

      } } public static void main(String[] args){

      System.out.println(multiply(10));} }

      二十、UE和UI的區(qū)別

      UE 是用戶體驗度

      UI 界面原型(用戶界面)(相當(dāng)于買房時用的模型)

      設(shè)計UI的作用:

      1、幫助程序員工作(界面已由美工設(shè)計完成)

      2、提前讓用戶對項目有個宏觀的了解,知道效果是什么樣子。

      二十一、osi七層模型

      第一層:物理層

      第二層:數(shù)據(jù)鏈路層

      第三層:網(wǎng)絡(luò)層

      第四層:傳輸層

      第五層:會話層 第六層:表示層 第七層:應(yīng)用層

      10

      二十二、線程和進(jìn)程的區(qū)別

      1.線程(Thread)與進(jìn)程(Process)

      進(jìn)程定義的是應(yīng)用程序與應(yīng)用程序之間的邊界,通常來說一個進(jìn)程就代表一個與之對應(yīng)的應(yīng)用程序。不同的進(jìn)程之間不能共享代碼和數(shù)據(jù)空間,而同一進(jìn)程的不同線程可以共享代碼和數(shù)據(jù)空間。

      2.一個進(jìn)程可以包括若干個線程,同時創(chuàng)建多個線程來完成某項任務(wù),便是多線程。3.實現(xiàn)線程的兩種方式:繼承Thread類,實現(xiàn)Runable接口

      二十三、jvm的內(nèi)存結(jié)構(gòu)

      java虛擬機(jī)的內(nèi)存結(jié)構(gòu)分為堆(heap)和棧(stack),堆里面存放是對象實例也就是new出來的對象。棧里面存放的是基本數(shù)據(jù)類型以及引用數(shù)據(jù)類型的地址。

      對于所謂的常量是存儲在方法區(qū)的常量池里面。

      二十四、內(nèi)存泄露和內(nèi)存溢出

      內(nèi)存泄露(memory leak),是指應(yīng)用程序在申請內(nèi)存后,無法釋放已經(jīng)申請的內(nèi)存空間.一次內(nèi)存泄露危害可以忽略,但如果任其發(fā)展最終會導(dǎo)致內(nèi)存溢出(out of memory).如讀取文件后流要進(jìn)行及時的關(guān)閉以及對數(shù)據(jù)庫連接的釋放。

      內(nèi)存溢出(out of memory)是指應(yīng)用程序在申請內(nèi)存時,沒有足夠的內(nèi)存空間供其使用。

      如我們在項目中對于大批量數(shù)據(jù)的導(dǎo)入,采用分段批量提交的方式。

      二十五、單例

      單例就是該類只能返回一個實例。單例所具備的特點: 1.私有化的構(gòu)造函數(shù) 2.私有的靜態(tài)的全局變量 3.公有的靜態(tài)的方法

      單例分為懶漢式、餓漢式和雙層鎖式

      11

      餓漢式: public class Singleton1 {

      private Singleton1(){};

      private static Singleton1 single = new Singleton1();

      public static Singleton1 getInstance(){

      return single;

      } }

      懶漢式:

      public class Singleton2 {

      private Singleton2(){}

      private static Singleton2 single=null;

      public tatic Singleton2 getInstance(){

      if(single == null){

      single = new Singleton2();

      }

      return single;

      } } 線程安全:

      public class Singleton3 {

      private Singleton3(){}

      private static Singleton3 single;

      public static Singleton3 getInstance(){

      if(null == single){

      synchronized(single){

      if(null == single){

      single = new Singleton3();

      }

      }

      }

      return single;

      } }

      參考:

      通過雙重判斷來保證單列設(shè)計模式在多線程中的安全性,并且它在性能方面提高了很多。

      12

      synchronized在方法上加鎖(同步鎖)

      synchronized在代碼塊內(nèi)部加鎖(同步代碼塊)

      synchronized(同步鎖)

      使用synchronized如何解決線程安全的問題? 1.synchronized在方法上加鎖 2.synchronized在代碼塊內(nèi)部加鎖

      1.懶漢

      2.餓漢

      3.雙重判斷

      二十六、解析xml文件的幾種技術(shù)

      1、解析xml的幾種技術(shù)

      1.dom4j

      2.sax

      3.jaxb

      4.jdom

      5.dom 1.dom4j

      dom4j是一個Java的XML API,類似于jdom,用來讀寫XML文件的。dom4j是一個非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強(qiáng)大和極端易用使用的特點,同時它也是一個開放源代碼的軟件。

      2.sax

      SAX(simple API for XML)是一種XML解析的替代方法。相比于DOM,SAX是一種速度更快,更有效的方法。它逐行掃描文檔,一邊掃描一邊解析。而且相比于DOM,SAX可以在解析文檔的任意時刻停止解析,但任何事物都有其相反的一面,對于SAX來說就是操作復(fù)雜。

      13

      3.jaxb

      JAXB(Java Architecture for XML Binding)是一個業(yè)界的標(biāo)準(zhǔn),是一項可以根據(jù)XML Schema產(chǎn)生Java類的技術(shù)。該過程中,JAXB也提供了將XML實例文檔反向生成Java對象樹的方法,并能將Java對象樹的內(nèi)容重新寫到XML實例文檔。從另一方面來講,JAXB提供了快速而簡便的方法將XML模式綁定到Java表示,從而使得Java開發(fā)者在Java應(yīng)用程序中能方便地結(jié)合XML數(shù)據(jù)和處理函數(shù)。

      2、dom4j 與 sax 之間的對比:【注:必須掌握!】

      dom4j不適合大文件的解析,因為它是一下子將文件加載到內(nèi)存中,所以有可能出現(xiàn)內(nèi)存溢出,sax是基于事件來對xml進(jìn)行解析的,所以他可以解析大文件的xml

      也正是因為如此,所以dom4j可以對xml進(jìn)行靈活的增刪改查和導(dǎo)航,而sax沒有這么強(qiáng)的靈活性

      所以sax經(jīng)常是用來解析大型xml文件,而要對xml文件進(jìn)行一些靈活(crud)操作就用dom4j

      二十七、項目的生命周期

      1.需求分析

      2.概要設(shè)計

      3.詳細(xì)設(shè)計(用例圖,流程圖,類圖)4.數(shù)據(jù)庫設(shè)計(powerdesigner)5.代碼開發(fā)(編寫)

      6.單元測試(junit 白盒測試)(開發(fā)人員)svn版本管理工具(提交,更新代碼,文檔)7.集成測試(黑盒測試,loadrunner(編寫測試腳本)(高級測試))

      8.上線試運(yùn)行(用戶自己體驗)

      9.壓力測試(loadrunner)

      10.正式上線

      11.維護(hù)

      二十八、OSCache的判斷

      Object obj = CacheManager.getInstance().getObj(“oaBrandList”);//從緩存中取數(shù)據(jù) if(null == obj){

      obj = brandDao.getBrandList();

      //如果為空再從數(shù)據(jù)庫獲取數(shù)據(jù)

      //獲取之后放入緩存中

      14

      CacheManager.getInstance().putObj(“oaBrandList”, obj);}

      return(List)obj;

      二十九、經(jīng)常訪問的技術(shù)網(wǎng)站

      1.csdn(詳細(xì)步驟的描述)2.iteye(詳細(xì)步驟的描述)3.oschina(開源中國獲取java開源方面的信息技術(shù))

      4.java開源大全 下載完畢,并且已經(jīng)解析為DOM 樹了,但很有可能圖片還沒有加載完畢,所以例如圖片的高度和寬度這樣的屬性此時不一定有效。要解決這個問題,可以使用Jquery 中另一個關(guān)于頁面加載的方法---load()方法。Load()方法會在元素的onload 事件中綁定一個處理函數(shù)。如果處理函數(shù)綁定給window 對象,則會在所有內(nèi)容(包括窗口、框架、對象和圖像等)加載完畢后觸發(fā),如果處理函數(shù)綁定在元素上,則會在元素的內(nèi)容加載完畢后觸發(fā)。Jquery 代碼如下: $(window).load(function(){ // 編寫代碼 });等價于JavaScript 中的以下代碼 Window.onload = function(){ // 編寫代碼 } 四

      十五、switch默認(rèn)接受的幾種數(shù)據(jù)類型

      Short, int, byte, char

      21

      十六、request 跟session的區(qū)別

      1.他們的生命周期不同,request對應(yīng)的是一次請求,session對應(yīng)的是一次會話

      2.request占用資源比較少,相對來說缺乏持續(xù)性, 而session資源消耗比較大,所以通常使用request來保存信息

      十七、找到解決svn沖突方法

      對于svn沖突,可以采用手工處理將沖突的部分進(jìn)行整合,之后備份最新整合后的文件,采用覆蓋更新的方式處理完 沖突之后,再把最新整合后的文件進(jìn)行提交。

      十八、反射的描述

      通過字符串可以動態(tài)創(chuàng)建java對象,并且可以動態(tài)訪問方法,屬性等。

      我們在項目中的時候封裝過數(shù)據(jù)庫jdbc的持久層,其中就利用反射這項

      技術(shù)來達(dá)到通用

      和靈活的目的。

      22

      框架篇

      一、Struts1的運(yùn)行原理

      在啟動時通過前端總控制器ActionServlet加載struts-config.xml并進(jìn)行解析,當(dāng)用戶在jsp頁面發(fā)送請求被struts1的核心控制器ActionServlet接收,ActionServlet在用戶請求時將請求參數(shù)放到對應(yīng)的ActionForm對象中的成員變量中,然后ActionServlet則會根據(jù)struts-config.xml中的映射關(guān)系找到相應(yīng)的Action中的方法,將對應(yīng)的ActionForm一并傳給這個Action中的方法里,然后執(zhí)行相應(yīng)的業(yè)務(wù)邏輯操作,最后就根據(jù)ActionMapping的findforward方法返回一個ActionForward,之后在struts-config.xml中找到與之對應(yīng)的forward標(biāo)簽,根據(jù)它的配置路徑找到對應(yīng)的jsp頁面。

      二、Struts2的運(yùn)行原理

      1、tomcat 啟動的時候會加載 web.xml、核心控制器 FilterDispatcher 會加載并解析 struts.xml

      2、客戶端會發(fā)送一個請求到 action、FilterDispatcher 會根據(jù)后綴名進(jìn)行攔截

      3、FilterDispatcher根據(jù) struts.xml 的配置文件信息 找到 某個action 對應(yīng)的某個類里的指定方法

      4、執(zhí)行相關(guān)的業(yè)務(wù)邏輯最后返回 一個String

      5、 里配置 name的屬性值與返回的String 進(jìn)行匹配,跳轉(zhuǎn)到指定的jsp 頁面

      三、struts2的體系結(jié)構(gòu)

      1、客戶端向Servlet容器(例如Tomcat)發(fā)送一個請求;

      2、這個請求經(jīng)過一系列的過濾器(Filter);

      3、接著FilterDispatcher被調(diào)用,F(xiàn)ilterDispatcher詢問ActionMapper來決定這個請求是否需要調(diào)用某個Action;

      4、如果ActionMapper決定需要調(diào)用某個Action,F(xiàn)ilterDispatcher把請求的處理交給ActionProxy;

      5、ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調(diào)用的Action類;

      6、ActionProxy創(chuàng)建一個ActionInvocation的實例。

      7、ActionInvocation在調(diào)用Action的過程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。

      8、一旦Action執(zhí)行完畢,ActionInvocation負(fù)責(zé)根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果。返回結(jié)果通常是jsp或者FreeMarker的模版。(體系結(jié)構(gòu)圖見下一頁)

      23

      四、Spring MVC運(yùn)行原理

      整個處理過程從一個HTTP請求開始:

      1.Tomcat在啟動時加載解析web.xml,找到spring mvc的前端總控制器DispatcherServlet,并且通過DispatcherServlet來加載相關(guān)的配置文件信息。

      2.DispatcherServlet接收到客戶端請求,找到對應(yīng)HandlerMapping,根據(jù)映射規(guī)則,找到對應(yīng)的處理器(Handler)。

      3.調(diào)用相應(yīng)處理器中的處理方法,處理該請求后,會返回一個ModelAndView。

      4.DispatcherServlet根據(jù)得到的ModelAndView中的視圖對象,找到一個合適的ViewResolver(視圖解析器),根據(jù)視圖解析器的配置,DispatcherServlet將要顯示的數(shù)據(jù)傳給對應(yīng)的視圖,最后顯示給用戶。

      24

      五、Struts1.x與Struts2.x的區(qū)別

      Struts 2以WebWork為核心,采用攔截器的機(jī)制來處理用戶的請求,struts1嚴(yán)重依賴于servletAPI, 屬于侵入性框架,struts2不嚴(yán)重依賴于servletAPI,屬于非侵入型框架。線程模型方面:

      Struts1的Action是單實例的, 一個Action的實例處理所有的請求。

      Struts2的Action是一個請求對應(yīng)一個實例(每次請求時都新new出一個對象), 沒有線程安全方面的問題 封裝請求參數(shù):

      Struts1中強(qiáng)制使用ActionForm對象封裝請求的參數(shù)。

      Struts2可以選擇使用POJO類來封裝請求的參數(shù),或者直接使用Action的屬性。struts1的前端總控制器(核心總控制器)為ActionServlet, struts2的前端總控制器(核心總控制器)為FilterDispather

      六、Spring MVC、struts1和struts2區(qū)別

      1.spring mvc 單例 非線程安全

      struts1單例 非線程安全

      struts2線程安全對每個請求都產(chǎn)生一個實例 2.spring mvc的入口是servlet,而struts2是filter

      spring 的前端總控制器為 DispatcherServlet

      struts2 的前端總控制器為 FilterDispatcher

      struts1 的前端總控制器為 actionServlet 3.參數(shù)傳遞:struts是在接受參數(shù)的時候,可以用屬性來接受參數(shù),這就說明參數(shù)是讓多個方法共享的。springmvc 用方法來接受參數(shù)

      4.spring mvc是基于方法的設(shè)計,而sturts是基于類

      七、Struts2中result中的type類型

      1.dispatcher:它是默認(rèn)的,用來轉(zhuǎn)向頁面,通常處理JSP 2.redirect:將用戶重定向到一個已配置好的URL 3.redirectAction:將用戶重定向到一個已定義好的action 4.chain:將action和另外一個action鏈接起來 5.freemarker:呈現(xiàn)Freemarker模板

      6.httpheader:返回一個已配置好的HTTP頭信息響應(yīng)

      7.stream:向瀏覽器發(fā)送InputSream對象對下載的內(nèi)容和圖片非常有用 8.velocity:呈現(xiàn)Velocity模板

      25

      9.xslt :該XML可以通過XSL模板進(jìn)行轉(zhuǎn)換

      10.plaintext:顯示原始文件內(nèi)容,例如文件源代碼

      八、Struts2標(biāo)簽

      首先需要引用 <%@taglib prefix=“s” uri=“/struts-tags”%> 1. 判斷標(biāo)簽 后面可跟 2. 迭代標(biāo)簽

      3. 引入標(biāo)簽 可以把一個JSP頁面或者servlet引入一

      個頁面中

      4. 輸出標(biāo)簽

      5. 標(biāo)簽賦予變量一個特定范圍內(nèi)的值

      6. 表單標(biāo)簽

      7. 文本域標(biāo)簽

      8. 下拉標(biāo)簽

      9. 聲明一個url的路徑

      最常用的是:

      判斷

      循環(huán)

      輸出

      九、SSI整合

      1、Action繼承于Actionsupport

      2、引入struts-spring-plugin.jar包,從而完成struts和spring的整合

      3、在struts2的action中注入service,保證service的名字和配置文件中的一致,并生成get,set方法

      4、Dao層繼承于SqlMapClientDaoSupport

      5、在dao層的配置文件中注入sqlMapClient

      十、SSH整合

      1.首先在web.xml中通過ContextLoaderListener來融入spring,并加載spring的相關(guān)配置文件

      2.同樣配置sturts2的前端總控制器filterDispatcher來過濾相關(guān)的 請求并且加載struts.xml

      26

      3.action繼承ActionSupport,然后通過引入struts-spring-plugin.jar 包并且根據(jù)配置文件中service的id生成get,set方法來注入service層。

      4.dao層繼承于HibernateDaoSupport,并且在dao的配置文件中注入sessionFactory.5.通過spring中的配置文件加載hibernate.cfg.xml文件從而融入hibernate.在ssh框架中是怎么整合spring? 首先在web.xml中通過ContextLoaderListener來融入spring,并加載spring的相關(guān)配置文件

      在ssh框架中是怎么整合hibernate? 通過spring中的配置文件加載hibernate.cfg.xml文件從而融入hibernate dao層繼承于HibernateDaoSupport,并且在dao的配置文件中注入sessionFactory

      在ssh框架中是怎么整合struts2? 配置sturts2的前端總控制器filterDispatcher來過濾相關(guān)的 請求并且加載struts.xml

      十、Spring MVC整合

      1.首先,要在web.xml里面配置SpringMVC的核心控制器,DispatcherServlet,對指定的后綴請求進(jìn)行攔截。

      2.Controller層要加 @Controller注解,表明該類是MVC的控制層。

      3.創(chuàng)建Service接口,給接口加上注解 @Component或者 @Service 表明這是Service業(yè)務(wù)處理層

      4.在Controller層聲明Service變量(屬性),給變量(屬性)加上 @Autowired注解,通過自動綁定機(jī)制將Service注入到Controller。(注:@Autowired默認(rèn)是ByType,如果想根據(jù)屬性名注入,那么就再加上注解 @Resource(name=“屬性名”))5.在Controller層的方法上加上注解 @RequestMapping(“requestAddress”)表明該方法的請求地址

      6.Dao層要加上注解 @Repository 表明這是數(shù)據(jù)庫持久層 7.同樣將dao實例注入到service層中。

      8.配置視圖解析器 “InternalResourceViewResolver”,對處理后的跳轉(zhuǎn)進(jìn)行統(tǒng)一配置。

      27

      十一、Hibernate 中g(shù)et 和 load的區(qū)別

      加載方式:

      load為延遲加載(返回的是一個只有id屬性的代理,只有使用該對象屬性時,才

      發(fā)出sql語句);

      get為立即加載(執(zhí)行時,會立即向數(shù)據(jù)庫發(fā)出sql語句)返回結(jié)果:

      load檢索不到記錄時,會拋ObjectNotFoundException異常

      get檢索不到記錄時,會返回null

      十二、Hibernate、Ibatis、Jdbc三者的區(qū)別

      Hibernate屬于全自動,Ibatis屬于半自動,Jdbc屬于手動,從開發(fā)效率上講hibernate較高,ibatis居中,jdbc較低,從執(zhí)行效率上講hibernate較低,ibatis居中,jdbc較高,因為jdbc是手工寫sql語句,程序員對sql的控制能力更大,可以根據(jù)業(yè)務(wù)需要進(jìn)行優(yōu)化,而ibatis雖然也可以對sql進(jìn)行優(yōu)化,但是他里面將resultset封裝為實體的過程中采用了反射機(jī)制所以一定程度上影響了性能,而hibernate因為高度封裝所以開發(fā)效率相對較高,但正因為這個原因,所以程序員在對sql語句的控制和優(yōu)化方面相對比較弱,而且在將resultset封裝成實體的過程中也采用了反射機(jī)制,所以在性能方面較低

      十三、Hibernate的運(yùn)行原理

      首先通過configuration去加載hibernate.cfg.xml這個配置文件,根據(jù) 配置文件的信息去創(chuàng)建sessionFactory,sessionFactory是線程安全的,是一個session工廠,用來創(chuàng)建session,session是線程不安全的,相當(dāng)于

      jdbc的connection,最后通過session去進(jìn)行數(shù)據(jù)庫的各種操作,在進(jìn)行操作 的時候通過transaction進(jìn)行事務(wù)的控制。

      十四、Hibernate五大核心(類/接口)簡述

      1.Configuration接口的作用是對Hibernate進(jìn)行配置,以及對它進(jìn)行啟動。(加載 hibernate.cfg.xml)并創(chuàng)建一個SessionFactory對象。2.SessionFactory接口

      SessionFactory接口負(fù)責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲源的代理,并負(fù)責(zé)創(chuàng)建 Session對象。SessionFactory是線程安全的。3.Session接口

      Session(會話)接口是Hibernate應(yīng)用使用的主要接口。Session接口負(fù)責(zé)執(zhí)行被持久化對象的CRUD操作(增刪改查)。Session對象是非線程安全的。Session 相當(dāng)于jdbc的connection 4.Query與Criteria接口

      總之Query和Criteria接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫查詢。5.Transaction接口

      28

      Transaction(事務(wù))負(fù)責(zé)操作相關(guān)的事務(wù)。

      十五、Hibernate與JDBC的區(qū)別

      1、hibernate和jdbc主要區(qū)別就是,hibernate先檢索緩存中的映射對象(即hibernate操作的是對象),而jdbc則是直接操作數(shù)據(jù)庫.2、Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架。Hibernate可以用在任何JDBC可以使用的場合

      3、Hibernate是一個和JDBC密切關(guān)聯(lián)的框架,所以Hibernate的兼容性和JDBC驅(qū)動,和數(shù)據(jù)庫都有一定的關(guān)系,但是和使用它的Java程序,和App Server沒有任何關(guān)系,也不存在兼容性問題。

      4、如果正確的使用JDBC技術(shù),它的執(zhí)行效率一定比hibernate要好,因為hibernate是基于jdbc的技術(shù).5、JDBC使用的是SQL語句,Hibernate使用的是HQL語句,但是HQL語句最終還會隱式轉(zhuǎn)換成SQL語句執(zhí)行。

      十六、Hibernate中的兩大配置文件

      *.hbm.xml:主鍵生成策略,映射關(guān)系,一對多,一對一的關(guān)系。

      Hibernate.cfg.xml:方言(用哪個數(shù)據(jù)庫),數(shù)據(jù)庫連接信息,包含*.hbm.xml內(nèi)容,映射 文件,也可以配事務(wù)。

      十七、Hibernate事務(wù)處理

      開啟事務(wù) session.beginTransaction();執(zhí)行相關(guān)的操作,如果成功則session.getTransaction().commit();執(zhí)行操作失敗則 session.getTransaction.rollback();

      十八、Hibernate的三種狀態(tài)以及狀態(tài)的轉(zhuǎn)換

      Transient(臨時)

      new 一個初始化對象后,并沒有在數(shù)據(jù)庫里保存數(shù)據(jù),處于臨時狀態(tài); Persistent(持久化)

      當(dāng)執(zhí)行save()方法,調(diào)用session.close()方法之前,內(nèi)存中的對象與數(shù)據(jù)庫有

      對應(yīng)關(guān)系處于持久化狀態(tài);

      Detached(托管/游離)

      當(dāng)執(zhí)行session.close()之后,處于托管狀態(tài); 狀態(tài)的轉(zhuǎn)換

      處于托管狀態(tài)下,調(diào)用update()方法后,轉(zhuǎn)換為持久化狀態(tài);

      在持久化狀態(tài)下,執(zhí)行delete()方法后,轉(zhuǎn)換為臨時狀態(tài);

      在未初始化對象之前,調(diào)用get(),load(),find(),iterate()之后,直接進(jìn)入持久化

      狀態(tài)。

      29

      十九、分頁步驟

      ①前臺封裝一個顯示分頁的組件 ②查詢總條數(shù)

      ③后臺封裝分頁工具類,計算開始位置、結(jié)束位置、總頁數(shù) ④后臺寫支持分頁的sql語句

      ⑤前臺包含分頁組件,實現(xiàn)分頁效果

      注意: 查詢總條數(shù)的where和查詢列表信息的where條件要保證一致。

      二十、hibernate緩存概述

      hibernate分為一級緩存即session緩存也叫事務(wù)級別的緩存以及

      二級緩存sessionFactory即應(yīng)用級別的緩存,還有查詢緩存即三級緩存.一級緩存的生命周期和session的生命周期保持一致,hibernate默認(rèn)就啟用了一級緩存,不能將其關(guān)閉,可以通過session.clear()和session.evict(object)來管理一級緩存。其中g(shù)et,load,iterate都會使用一級緩存,一級緩存緩存的是對象。

      二級緩存的生命周期和sessionFactory的生命周期保持一致,可以跨session,被多個session共享,hibernate3默認(rèn)開啟二級緩存,也可以手動開啟并指定緩存插件如ehcache,oscache 等。二級緩存也只能緩存對象。

      三級緩存也叫查詢緩存,查詢緩存是針對普通屬性結(jié)果集的緩存, 對實體對象的結(jié)果集只緩存id。對query.list()起作用,query.iterate不起作用,也就是query.iterate不使用查詢緩存

      二十一、Ssh的概述:

      ssh是web開發(fā)中常見的一種框架 s-struts s-spring h-hibernate 其中struts在框架中充當(dāng)控制器,實現(xiàn)MVC,主要用來處理用戶的請求,和跳轉(zhuǎn)頁面。使項目結(jié)構(gòu)清晰,開發(fā)者只需要關(guān)注業(yè)務(wù)邏輯的實現(xiàn)即可。

      spring在ssh充當(dāng)粘合劑,粘合struts-sping-hibernate,主要用來進(jìn)行事物的控制,hibernate-充當(dāng)數(shù)據(jù)庫持久層,主要用它來與數(shù)據(jù)庫交互,提高開發(fā)效率,減輕程序員sql控制要求,而且hibernate通過反射機(jī)制,有靈活的映射性,還支持各種關(guān)系,一對一,一對多,多對多。

      在進(jìn)行ssh整合的時候,我們應(yīng)該注意: 1.Action繼承于ActionSupport 引入struts-spring-plugin.jar包,從而完成struts和spring的整合

      在struts2的action中注入service,保證service的名字和配置文件中的一致,并生成get,set方法

      30

      Dao層繼承于hibernateDaoSupport 在dao層的配置文件中注入sessionFactory

      二十二、防止表單重復(fù)提交

      針對于重復(fù)提交的整體解決方案: 1.用redirect來解決重復(fù)提交的問題 2.點擊一次之后,按鈕失效 3.通過loading 4.自定義重復(fù)提交過濾器 5.解決struts2重復(fù)提交

      可以結(jié)合s:token標(biāo)簽來解決重復(fù)提交問題

      利用token的原理:

      1.在前端的jsp頁面中加入s:token標(biāo)簽,在訪問該頁面時就會生成 隱藏域,該隱藏域中包含一個隨機(jī)生成的字符串,并把該字符串

      存入session中

      2.在struts2的配置文件中加入token攔截器后,當(dāng)正常訪問action 的時候,會從session中取出該字符串,然后和頁面隱藏域中提交 字符串做對比,如果一致則正常執(zhí)行并刪除session中存儲的字符串。

      二十三、JSP標(biāo)簽:

      1.JSP include動作

      jsp:include 動作

      以“ ” 結(jié)束 比如:

      2.JSP指令:<%@ include%><%@

      %>

      以“<%@ ” 開始,以“%> ” 結(jié)束。比如:

      <%@ include file = “ Filename” %> 3.JSP輸出表達(dá)式:<%= %><%=Java表達(dá)式 %>

      輸出變量的值,后邊不能加<%=;%> 4.JSP Scriptlet【腳本】:<%;%> <% Java 代碼 %>

      例子:

      <% Calendar now = Calendar.getInstance();%> 5.JSP聲明:<%!%> <%!函數(shù)或者方法 %>

      例子:

      <%!String getHello(String name){ return “Hi,” + name + “!”;}

      %> 6.迭代標(biāo)簽: 31

      Jstl中的核心標(biāo)簽(core)7.JSP注釋:

      <%--這也是注釋,但客戶端不能查看到--%> 8.el表達(dá)式:${} 9.jsp:include動作是在運(yùn)行時動態(tài)包含。

      @include指令是在編譯時包含。

      它們兩個都只能包含本項目的相關(guān)文件,不能包含其他項目的。

      如果要包含其他項目的文件可以使用c:import 二

      十四、過濾器

      filter的概述: filter是一個過濾器,用來在請求前和響應(yīng)后進(jìn)行數(shù)據(jù)的處理。

      filter的生命周期是: 實例化--->初始化(init)-->進(jìn)行過濾(doFilter)--->銷毀(destroy)-->釋放資源

      一個Filter必須實現(xiàn)javax.servlet.Filter接口

      在項目中我們通常通過filter進(jìn)行編碼轉(zhuǎn)換,進(jìn)行安全驗證,進(jìn)行重復(fù)提交的判斷。

      了解(不需要主動說)filter 相當(dāng)于 攔截器 相當(dāng)于Spring AOP servlet+jsp+javabean+jdbc+filter encodingFilter org.leopard.filter.EncodingFilter

      encode

      utf-8 encodingFilter *

      二十五、攔截器的理解

      什么是攔截器:

      攔截器是AOP中的概念,它本身是一段代碼,可以通過定義“織入點”,來指定攔截器的代碼在“織入點”的前后執(zhí)行,從而起到攔截的作用

      正如上面 Struts2的Reference中講述的,Struts2的Interceptor,其攔截的對象是Action代碼,可以定義在Action代碼之前或者之后執(zhí)行攔截器的代碼。在項目中,我們經(jīng)常用來攔截通過非正常程序而進(jìn)行的訪問

      32

      Struts2的攔截器和Servlet過濾器類似。在執(zhí)行Action的execute方法之前,Struts2會首先執(zhí)行在struts.xml中引用的攔截器,在執(zhí)行完所有引用的攔截器的intercept方法后,會執(zhí)行Action的execute方法。

      其中intercept方法是攔截器的核心方法,所有安裝的攔截器都會調(diào)用之個方法。在Struts2中已經(jīng)在struts-default.xml中預(yù)定義了一些自帶的攔截器,如timer、params等。如果在

      標(biāo)簽中繼承struts-default,則當(dāng)前package就會自動擁有struts-default.xml中的所有配置。代碼如下:

      ...

      攔截器是Struts2框架的核心,它主要完成解析請求參數(shù)、將請求參數(shù)賦值給Action屬性、執(zhí)行數(shù)據(jù)校驗、文件上傳等工作

      在struts-default.xml中有一個默認(rèn)的引用,在默認(rèn)情況下(也就是中未引用攔截器時)會自動引用一些攔截器。struts2中默認(rèn)的攔截器是defaultStack.自定義攔截器需要特別注意的是不要忘記引入struts2默認(rèn)的攔截器。為了實現(xiàn)某些操作,我們可以自定義攔截器,自定義攔截器有三種方式定義。分別為實現(xiàn)Interceptor接口,繼承抽象類AbstractInterceptor,繼承MethodFilterInteceptor類。攔截器在項目中的運(yùn)用:

      同時可以減輕代碼冗余,提高重用率。

      如果要求用戶密碼、權(quán)限等的驗證,就可以用自定義的攔截器進(jìn)行密碼驗證和權(quán)限限制。對符合的登入者才跳轉(zhuǎn)到正確頁面。

      二十六、Spring融入框架

      我們通過在web.xml中配置ContextLoaderListener這個監(jiān)聽器也加載 spring的配置文件,從而融入到項目框架中。

      二十七、項目的部署方式

      1、如果項目單獨部署到tomcat中的時候,應(yīng)該看tomcat中的server.xml;

      2、如果和eclipse結(jié)合使用進(jìn)行項目部署的時候,應(yīng)該看eclipse里面的server.xml.數(shù)據(jù)庫篇

      一、JDBC連接數(shù)據(jù)庫步驟(以MYSQL為例)

      1、加載JDBC驅(qū)動程序:

      通過Class類的forName方法實現(xiàn),并將驅(qū)動地址放進(jìn)去

      成功加載后,會將Driver類的實例注冊到DriverManager類中。

      33

      2、提供JDBC連接的URL、創(chuàng)建數(shù)據(jù)庫的連接

      ?要連接數(shù)據(jù)庫,需要向java.sql.DriverManager請求并獲得Connection對象,該對象就代表一個數(shù)據(jù)庫的連接。

      ?使用DriverManager的getConnectin()方法傳入指定的欲連接的數(shù)據(jù)庫的路徑、數(shù) 據(jù)庫的用戶名和密碼。

      Connection con=DriverManager.getConnection(url , username , password);&&&:“jdbc:mysql://localhost/test?user=root&password=123&useUnicode=true&characterEncoding=utf-8”;

      3、創(chuàng)建一個Statement

      ?要執(zhí)行SQL語句,必須獲得java.sql.Statement實例

      ?執(zhí)行靜態(tài)SQL語句。通常通過Statement實例實現(xiàn)。

      ?執(zhí)行動態(tài)SQL語句。通常通過PreparedStatement實例實現(xiàn)。

      String sql = “”;

      Statement st = con.createStatement();

      PreparedStatement pst = con.prepareStatement(sql);

      4、執(zhí)行SQL語句

      Statement接口提供了executeQuery、executeUpdate、execute三種方法

      executeQuery:執(zhí)行select語句,返回ResultSet結(jié)果集

      ResultSet rst = pst.executeQuery();

      ? executeUpdate:執(zhí)行insert、update、delete語句

      pst.executeUpdate();

      5、關(guān)閉JDBC對象

      操作完成以后要把所有使用的JDBC對象全都關(guān)閉,以釋放JDBC資源。

      二、數(shù)據(jù)庫連接池

      數(shù)據(jù)庫連接池的優(yōu)點運(yùn)行原理: 在我們不使用數(shù)據(jù)庫連接池的時候,每次訪問數(shù)據(jù)庫都需要創(chuàng)建連接,使用完成之后需要釋放關(guān)閉連接,而這樣是很耗費資源的。當(dāng)我們使用 數(shù)據(jù)庫連接池的時候,在tomcat啟動的時候就創(chuàng)建了指定數(shù)量的連接,之后當(dāng)我們程序使用的時候就直接從連接池里面取,而不需要創(chuàng)建,同理,當(dāng)我們使用完的時候也不需要關(guān)閉連接,而是將連接返回到連接池中,供 其他請求繼續(xù)使用。

      DBCP:比較穩(wěn)定。C3P0: 性能比較高。

      34

      三、mysql的數(shù)據(jù)庫導(dǎo)入導(dǎo)出

      配置:

      首先找到mysql的安裝目錄,進(jìn)入bin目錄下復(fù)制路徑 將mysql的bin目錄粘貼在計算機(jī)環(huán)境變量的path中 授權(quán):

      登錄mysql 將某張表的某個權(quán)限賦給某個用戶

      grant [select,insert,update,delete,create,drop] on [databaseName].[tableName]

      to [userName]@[userIP] identified by [?連接口令?]

      grant select,insert,update,delete,create,drop on oa_ssh.user to root@[IP] identified by 'root';將所有庫的所有權(quán)限賦給某個用戶

      grant all privileges on *.* to [userName]@[userIp] identified by [?連接口令?] grant all privileges on *.* to root@[IP] identified by ?root';將所有庫的所有權(quán)限賦給所有用戶

      grant all privileges on *.* to root@'%' identified by ?root?;

      導(dǎo)出本地數(shù)據(jù)庫:

      mysqldump-u 用戶名-p 數(shù)據(jù)庫名 > 磁盤:導(dǎo)出的文件名(加后綴)

      遠(yuǎn)程導(dǎo)出數(shù)據(jù)庫:

      mysqldump-h IP-u 用戶名-p 數(shù)據(jù)庫名稱 >導(dǎo)出的文件名(加后綴)

      遠(yuǎn)程導(dǎo)出數(shù)據(jù)表:

      mysqldump-u root-p-d--add-drop-table 數(shù)據(jù)庫名稱 > 導(dǎo)出文件

      名(加后綴)

      導(dǎo)入數(shù)據(jù):

      mysql-u root-p登錄成功后 ==》 source 磁盤:導(dǎo)入的文件名(加后綴)

      四、jdbc分段批量提交的時候出現(xiàn)異常怎么處理?

      通過Map來解決性能問題。首先在分段批量提交的時候,我們不采用事務(wù),這樣就保證了合法的數(shù)據(jù)就自動提交,不合法的數(shù)據(jù)就自己自動進(jìn)行回滾,為了避免不合法數(shù)據(jù)影響后續(xù)合法數(shù)據(jù)的提交,采用定義業(yè)務(wù)規(guī)則字典表,實現(xiàn)對數(shù)據(jù)的驗證,將不合法的數(shù)據(jù)記錄下來,供用戶進(jìn)行后續(xù)處理,而合法的數(shù)據(jù)就全部提交。

      五、jdbc批量處理數(shù)據(jù)

      批量處理數(shù)據(jù):(代碼優(yōu)化:提高程序執(zhí)行性能)

      35

      降低了java程序代碼(客戶端)和數(shù)據(jù)庫之間的 網(wǎng)絡(luò)通信的次數(shù)。

      在jdbc中進(jìn)行批量插入的核心API為 addBatch,executeBatch

      大數(shù)據(jù)量的插入問題:(jdbc,hibernate,ibatis)

      1.每次只插入一條和數(shù)據(jù)庫交互多次(很耗時間)

      2.批量插入和數(shù)據(jù)庫只交互一次(內(nèi)存溢出)

      3.分段批量插入(推薦)

      jdbc批量處理數(shù)據(jù)是通過PreparedStatement對象的 addbatch(), executebatch()clearbatch()進(jìn)行和數(shù)據(jù)庫的交互。通常我們使用分段批量處理的方式 這樣可以提高程序的性能,防止內(nèi)存溢出。

      1.每個sql語句都和數(shù)據(jù)庫交互一次(非批量操作)2.只和數(shù)據(jù)庫交互一次(批量操作)(內(nèi)存溢出)當(dāng)數(shù)據(jù)達(dá)到一定額度的時候就和數(shù)據(jù)庫進(jìn)行交互,分多次進(jìn)行(分段批量操作)

      (500或者1000)pst.addBatch();if(i > 0 && i%1000 == 0){

      pst.executeBatch();

      pst.clearBatch();}

      六、Oracle分頁

      select * from(select * from(select s.*,rownum rn from student s)where rn<=5)where rn>0

      七、Oracle的基本數(shù)據(jù)類型

      Oracle的基本數(shù)據(jù)類型(常用):

      1、字符型

      Char 固定長度字符串

      占2000個字節(jié) Varchar2 可變長度字符串 占4000個字節(jié)

      Nvarchar2 占2000個字符(最多能存2000個字母/中文)

      2、大對象型(lob)

      Blob :二進(jìn)制數(shù)據(jù) 最大長度4G Blob 用于存一些圖片,視頻,文件。

      36

      比如:當(dāng)我們在進(jìn)行文件上傳時,我們一般把上傳的文件存在硬盤上,可以不占用 數(shù)據(jù)庫,下載時,如果項目遷移時,文件也要跟著遷移。因此我們可以把用blob把它存在數(shù)據(jù)庫中。但這樣也增加了數(shù)據(jù)庫的負(fù)擔(dān)。

      Clob :字符數(shù)據(jù) 最大長度4G,可以存大字符串

      varchar2和nvarchar2都具有一定的局限性,它們長度有限,但數(shù)據(jù)庫中無論用varchar2或nvarchar2類型,還是用clob,在java端都使用String接收。

      3、數(shù)值型

      Integer 整數(shù)類型,小的整數(shù)。Float 浮點數(shù)類型。Real 實數(shù)類型。

      Number(p,s)包含小數(shù)位的數(shù)值類型。P表示精度,s表示小數(shù)后的位數(shù)。

      Eg: number(10,2)表示小數(shù)點之前可有8位數(shù)字,小數(shù)點后有2位。

      4、日期類型

      Date 日期(日-月-年)DD-MM-YY(HH-MI-SS)Timestamp 跟date比 它可以精確到微秒。精確范圍0~9 默認(rèn)為6.八、id、rowid、rownum的區(qū)別

      rowid物理位置的唯一標(biāo)識。

      而id是邏輯上的唯一標(biāo)識,所以rowid查找速度要快于id,是目前最快的定位一條記錄的方式

      rowid和rownum都是”偽數(shù)列“ 所謂“偽數(shù)列”也就是默認(rèn)隱藏的一個數(shù)列。rownum用于標(biāo)記結(jié)果集中結(jié)果順序的一個字段,它的特點是按順序標(biāo)記,而且是連續(xù)的,換句話說就是只有有rownum=1的記錄,才可能有rownum=2的記錄。rownum關(guān)鍵字只能和<或者<=直接關(guān)聯(lián) 如果是>或者=則需要給他起個別名

      九、主鍵和唯一索引的區(qū)別?

      在創(chuàng)建主鍵的同時會生成對應(yīng)的唯一索引,主鍵在保證數(shù)據(jù)唯一性的同時不允許為

      空,而唯一可以有一個為空數(shù)據(jù)項,一個表中只能有一個主鍵,但是一個主鍵可以

      有多個字段,一個表中可以有多個唯一索引。

      十、Preparedstatement和statement的區(qū)別

      用Prepared statement進(jìn)行開發(fā)。Prepared statement是預(yù)編譯的,而statement不是,在每次執(zhí)行sql語句的增刪改時,如果是一條數(shù)據(jù)兩者沒差距,但如果數(shù)據(jù)量大于1,那么每次執(zhí)行sql語句statement都要重新編譯一次,而Prepared statement不用,Prepared statement的運(yùn)行效率大于statement;從代碼的可維護(hù)性和可讀性來說,雖然

      37

      用Prepared statement來代替statement會使代碼多出幾行,但這樣的代碼無論從可讀性還是可維護(hù)性來說,都比直接使用statement的代碼高很多檔次;最重要的一點,從安全角度來說,使用Prepared statement可以大大提高程序的安全性,因為Prepared statement是用???傳參,可以防止sql注入,具有安全性,而statement用的是?+?字符串拼接,安全性較低。

      十一、數(shù)據(jù)庫三范式

      第一范式:數(shù)據(jù)庫表中的所有字段值都是不可分解的原子值。

      第二范式:需要確保數(shù)據(jù)庫表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部

      分相關(guān)(主要針對聯(lián)合主鍵而言)

      第三范式:需要確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)

      十二、視圖概述

      視圖可以視為“虛擬表”或“存儲的查詢”

      創(chuàng)建視圖所依據(jù)的表稱為“基表”

      視圖的優(yōu)點:

      提供了另外一種級別的表安全性:隱藏了一些關(guān)鍵的字段

      簡化的用戶的SQL命令

      隔離基表結(jié)構(gòu)的改變

      十三、存儲過程概述

      存儲過程(Stored Procedure)

      可以包含邏輯判斷的sql語句集合。

      是經(jīng)過預(yù)編譯,存在于數(shù)據(jù)庫中。

      通過調(diào)用指定存儲過程的名字(可有參,可無參)來執(zhí)行。優(yōu)點:

      簡化了復(fù)雜的業(yè)務(wù)邏輯,根據(jù)需要可重復(fù)使用

      屏蔽了底層細(xì)節(jié),不暴露表信息即可完成操作

      降低網(wǎng)絡(luò)的通信量,多條語句可以封裝成一個存儲過程來執(zhí)行

      設(shè)置訪問權(quán)限來提高安全性

      提高執(zhí)行效率,因為它是預(yù)編譯以及存儲在數(shù)據(jù)庫中 缺點:

      可移植性差,相同的存儲過程并不能跨多個數(shù)據(jù)庫進(jìn)行操作

      大量使用存儲過程后,首先會使服務(wù)器壓力增大,而且維護(hù)難度逐漸增加

      存儲過程的語法:

      --下面是在oracle數(shù)據(jù)庫下最基本的語法

      38

      --僅創(chuàng)建一個名為testProcedure 的無參的存儲過程--IS也可以是AS--如果已經(jīng)存在名為 testProcedure 的存儲過程,下面的語法會出現(xiàn) 名稱已被使用的錯誤

      --解決辦法:

      --第一句可以寫成 create or replace procedure testProcedure--這樣會替換原有的存儲過程

      --NULL表示任何可以正確執(zhí)行的sql 語句,但至少一句

      create procedure testProcedure IS BEGIN

      NULL

      END;

      存儲過程的參數(shù)的分類: IN OUT INOUT

      注意:

      存儲過程之間可相互調(diào)用

      存儲過程一般修改后,立即生效。

      十四、索引概述

      1、索引的概念

      索引就是為了提高數(shù)據(jù)的檢索速度。

      數(shù)據(jù)庫的索引類似于書籍的索引。

      在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息。

      在數(shù)據(jù)庫中,索引也允許數(shù)據(jù)庫程序迅速地找到表中的數(shù)據(jù),2、索引的優(yōu)點

      39 而不必掃描整個數(shù)據(jù)庫.1.創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性

      2.大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因

      3.減少磁盤IO(向字典一樣可以直接定位)

      3、索引的缺點

      1.創(chuàng)建索引和維護(hù)索引要耗費時間,這種時間隨著數(shù)據(jù)量的增加而增加

      2.索引需要占用額外的物理空間

      3.當(dāng)對表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時候,索引也要動態(tài)的維護(hù),降低了數(shù)據(jù)的維護(hù)速度

      4、索引的分類

      1.普通索引和唯一性索引

      普通索引:CREATE INDEX mycolumn_index ON mytable(myclumn)

      唯一性索引:保證在索引列中的全部數(shù)據(jù)是唯一的

      CREATE unique INDEX mycolumn_index ON mytable(myclumn)

      2.單個索引和復(fù)合索引

      單個索引:對單個字段建立索引

      復(fù)合索引:又叫組合索引,在索引建立語句中同時包含多個字段名,最多16個字段

      CREATE INDEX name_index ON userInfo(firstname,lastname)

      3.順序索引,散列索引,位圖索引

      40

      十五、必背的sql語句

      1:oracle 分頁

      select * from(select t.*, rownum rn from(select * from menu order by id desc)t where

      rownum < 10)where rn >=5

      2: mysql 分頁

      select * from music where id limit 5,5

      3:oracle中如何快速將一張表的數(shù)據(jù)復(fù)制到另外一張表中(另外一張表不存在,另外一張

      表存在,但數(shù)據(jù)為空)

      1、.不存在另一張表時:

      create table 新表

      as select * from 將要復(fù)制的表

      2、存在另一張表時:

      insert into 新表名

      select 字段

      from 將要復(fù)制的表名

      4:音樂專輯

      查詢出special 表中的id 專輯名 并下面有多少首歌曲

      Select s.id , min(s.sname),count(m.mid)from special s inner

      join ms m on s.id=m.id group by s.id

      5:快速刪除一張表(不可事物回滾,也就是沒有日志記錄)

      TRUNCATE from 表名

      6:inner join

      select 查找信息 from 表名 1 inner join 表名2 on 表名1.列名 = 表名2.列名

      7:left join

      左外連接

      select 查找信息 from 表名1 left join 表名2 on 表名1.列名 = 表名2.列名

      8:right join

      右外連接

      select 查找信息 from 表名1 right join 表名2 on 表名1.列名 = 表名2.列名

      41

      9:oracle中查詢遍歷樹形結(jié)構(gòu)(start with)

      select * from extmenu

      start with pid=1 connect by prior id = pid

      快速刪除父節(jié)點以及父節(jié)點下的所有節(jié)點: Delete from extmenu where id in(elect * from extmenu

      start with pid=1 connect by prior id = pid)

      10:查詢出來60-70,80-90,95-100學(xué)生的信息

      select * from stu where chengji between 60 and 70 or between 80 and 90 or between 95 and 100 select * from stu where chengji > 60 and chengji < 70 or chengji > 80 and chengji < 90 or chengji > 95 and chengji < 100

      11:用exists替換in------進(jìn)行聯(lián)表查詢

      select * from dept where exists(select * from emp where emp.deptno=dept.deptno);或

      select * from dept d inner join emp e on d.deptno = e.deptno(只查詢出兩表共同擁有的字段數(shù)據(jù))

      12:刪除表中的重復(fù)數(shù)據(jù):

      delete from xin a where a.rowid!=(select max(b.rowid)from xin b

      where a.name = b.name);13:row_number(),rank()over,dense_rank()over 按工資排序

      select sal,row_number()over(order by sal desc)rank1,rank()over(order by sal desc)rank,dense_rank()over(order by sal desc)drank

      from emp

      14:select * from(select emp.* from(dense_rank()over(partition by departNo order by sal desc)rk from emp)Where rk=4

      42

      十六、ibatis批量

      this.getSqlMapClientTemplate().execute(new SqlMapClientCallback(){ public Object doInSqlMapClient(SqlMapExecutor executor)

      throws SQLException {

      executor.startBatch();

      for(int i = 0, n = list.size();i < n;i++){

      executor.insert(”productAttach.insertProductAttach“,list.get(i));

      }

      executor.executeBatch();

      return null;} });

      ibatis,jdbc,hibernate的分段的實現(xiàn): 都應(yīng)該在組裝list的時候進(jìn)行拆分(如:action層加入)if(list.size()% 1000 == 0){ productAttachService.addBatch(list);list.clear();}

      if(list.size()> 0)productAttachService.addBatch(list);

      43

      業(yè)務(wù)場景篇

      一、Spring的概述

      Spring 是完全面向接口的設(shè)計,降低程序耦合性,主要是事務(wù)控制并創(chuàng)建bean實例對象。在ssh整合時,充當(dāng)黏合劑的作用。

      IOC(Inversion of Control)控制反轉(zhuǎn)/依賴注入,又稱DI(Dependency Injection)(依賴注入)

      IOC的作用:產(chǎn)生對象實例,所以它是基于工廠設(shè)計模式的

      Spring IOC的注入

      通過屬性進(jìn)行注入,通過構(gòu)造函數(shù)進(jìn)行注入,注入對象數(shù)組

      注入List集合 注入Map集合注入Properties類型

      Spring IOC 自動綁定模式:

      可以設(shè)置autowire按以下方式進(jìn)行綁定

      按byType只要類型一致會自動尋找,按byName自動按屬性名稱進(jìn)行自動查找匹配.AOP 面向方面(切面)編程

      AOP是OOP的延續(xù),是Aspect Oriented Programming的縮寫,意思是面向方面(切面)編程。

      注:OOP(Object-Oriented Programming)面向?qū)ο缶幊?/p>

      AOP 主要應(yīng)用于日志記錄,性能統(tǒng)計,安全控制,事務(wù)處理(項目中使用的)等方面。

      Spring中實現(xiàn)AOP技術(shù):

      在Spring中可以通過代理模式來實現(xiàn)AOP

      代理模式分為

      靜態(tài)代理:一個接口,分別有一個真實實現(xiàn)和一個代理實現(xiàn)。

      動態(tài)代理:通過代理類的代理,接口和實現(xiàn)類之間可以不直接發(fā)生聯(lián)系,而

      可以在運(yùn)行期(Runtime)實現(xiàn)動態(tài)關(guān)聯(lián)。

      動態(tài)代理有兩種實現(xiàn)方式,可以通過jdk的動態(tài)代理實現(xiàn)也可以通過cglib

      來實現(xiàn)而AOP默認(rèn)是通過jdk的動態(tài)代理來實現(xiàn)的。jdk的動態(tài)代理必須要有

      接口的支持,而cglib不需要,它是基于類的。

      Spring AOP事務(wù)的描述:

      在spring-common.xml里通過里面先設(shè)定一個表達(dá)式,設(shè)定對service里那些方法

      如:對add* ,delete*,update*等開頭的方法進(jìn)行事務(wù)攔截。我們需 44

      要配置事務(wù)的傳播(propagation=”REQUIRED“)特性,通常把增,刪,改以外的操作需要配置成只讀事務(wù)(read-only=”true“).只讀事務(wù)可以提高性能。之后引入tx:advice,在tx:advice引用 transactionManager(事務(wù)管理),在事務(wù)管理里再引入sessionFactory,sessionFactory注入 dataSource,最后通過 引入txAdvice。

      Spring實現(xiàn)ioc控制反轉(zhuǎn)描述:

      原來需要我們自己進(jìn)行bean的創(chuàng)建以及注入,而現(xiàn)在交給 spring容器去完成bean的創(chuàng)建以及注入。

      所謂的“控制反轉(zhuǎn)”就是 對象控制權(quán)的轉(zhuǎn)移,從程序代碼本身轉(zhuǎn)移到了外部容器。

      官方解釋: 控制反轉(zhuǎn)即IoC(Inversion of Control),它把傳統(tǒng)上由程序代碼直接操控的對象的調(diào)用權(quán)交給容器,通過容器來實現(xiàn)對象組件的裝配和管理。

      所謂的“控制反轉(zhuǎn)”概念就是對組件對象控制權(quán)的轉(zhuǎn)移,從程序代碼本身轉(zhuǎn)移到了外部容器。

      二、事務(wù)概述

      在數(shù)據(jù)庫中,所謂事務(wù)是指一組邏輯操作單元即一組sql語句。當(dāng)這個單元中的一部分操作失敗,整個事務(wù)回滾,只有全部正確才完成提交。

      事務(wù)的ACID屬性

      1.原子性(Atomicity)

      原子性是指事務(wù)是一個不可分割的工作單位,事務(wù)中的操作要么都發(fā)生,要么都不發(fā)生。

      2.一致性(Consistency)

      事務(wù)必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另外一個一致性狀態(tài)。(數(shù)據(jù)不被破壞)

      3.隔離性(Isolation)

      事務(wù)的隔離性是指一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾.4.持久性(Durability)

      持久性是指一個事務(wù)一旦被提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久性的.在JDBC中,45

      事務(wù)默認(rèn)是自動提交的,每次執(zhí)行一個 SQL 語句時,如果執(zhí)行成功,就會向數(shù)據(jù)庫自動提交,而不能回滾

      為了讓多個 SQL 語句作為一個事務(wù)執(zhí)行:

      (1)執(zhí)行語句前調(diào)用 Connection 對象的 setAutoCommit(false);

      以取消自動提交事務(wù)

      (2)在所有的 SQL 語句都成功執(zhí)行后,調(diào)用 commit();方法提交事務(wù)(3)在出現(xiàn)異常時,調(diào)用 rollback();方法回滾事務(wù)。

      三、權(quán)限概述

      權(quán)限涉及到5張表:

      用戶表,角色表,權(quán)限表(菜單表),用戶角色關(guān)聯(lián)表,角色權(quán)限關(guān)聯(lián)表

      當(dāng)用戶登錄時,根據(jù)用戶名和密碼到用戶表驗證信息是否合法,如果合法 則獲取用戶信息,之后根據(jù)用戶id再到用戶角色關(guān)聯(lián)表中得到相關(guān)連的角色

      id集合,之后根據(jù)角色id再到角色權(quán)限關(guān)聯(lián)表中獲取該角色所擁有的權(quán)限id集合,然后再根據(jù)權(quán)限id集合到權(quán)限表(菜單表)中獲取具體的菜單,展現(xiàn)給當(dāng)前 登錄用戶,從而達(dá)到不同用用戶看到不同的菜單權(quán)限。

      我們通過ZTree來給角色賦權(quán)并且通過ZTree來展示菜單,以及通過ZTree來管 理菜單即增加和編輯菜單。

      我們做的權(quán)限控制到url級別,為了防止用戶不登錄直接輸入url訪問的這個弊端,通過攔截器進(jìn)行攔截驗證。

      四、OSCache業(yè)務(wù)場景

      在我以前的項目中,我們考慮了系統(tǒng)性能問題,這個時候我們采用了Oscache緩存,剛開始把這個功能交給了項目組中的另外一個同事來做的,但是他做完的時候他發(fā)現(xiàn)緩存中明明已經(jīng)緩存了數(shù)據(jù),但是在取得時候發(fā)現(xiàn)沒有數(shù)據(jù),我們項目經(jīng)理讓我去幫忙看看這個問題,我閱讀完他的代碼之后,我發(fā)現(xiàn)了他每次緩存的時候都是調(diào)用一個新的緩存對象的方法,結(jié)果出現(xiàn)了明明已經(jīng)走了緩存的方法而取不到數(shù)據(jù)的問題,通過我多年的工作經(jīng)驗,我就想到了應(yīng)該用單例模式去封裝一個單例工具類來調(diào)用oscache。但是,在后來的測試過程中,發(fā)現(xiàn)當(dāng)并發(fā)訪問的時候也會出現(xiàn)上述的問題,這個時候我直接采取的DCL(雙重判定鎖)單例模式封裝了工具類,既解決了線程安全問題,相對的性能問題也考慮到了,這個問題才得到了完善的解決。

      46

      五、線程概述

      線程的狀態(tài)以及狀態(tài)之間的相互轉(zhuǎn)換:

      1、新建狀態(tài)(New):新創(chuàng)建了一個線程對象。

      2、就緒狀態(tài)(Runnable):線程對象創(chuàng)建后,其他線程調(diào)用了該對象的start()方法。該狀態(tài)的線程位于可運(yùn)行線程池中,變得可運(yùn)行,等待獲取CPU的使用權(quán)。

      3、運(yùn)行狀態(tài)(Running):就緒狀態(tài)的線程獲取了CPU,執(zhí)行程序代碼。

      4、阻塞狀態(tài)(Blocked):阻塞狀態(tài)是線程因為某種原因放棄CPU使用權(quán),暫時停止運(yùn)行。直到線程進(jìn)入就緒狀態(tài),才有機(jī)會轉(zhuǎn)到運(yùn)行狀態(tài)。阻塞的情況分三種:

      (一)、等待阻塞:運(yùn)行的線程執(zhí)行wait()方法,JVM會把該線程放入等待池中。

      (二)、同步阻塞:運(yùn)行的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池中。

      (三)、其他阻塞:運(yùn)行的線程執(zhí)行sleep()或join()方法,或者發(fā)出了I/O請求時,JVM會把該線程置為阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉(zhuǎn)入就緒狀態(tài)。

      5、死亡狀態(tài)(Dead):線程執(zhí)行完了或者因異常退出了run()方法,該線程結(jié)束生命周期。

      實現(xiàn)線程的兩種方式:

      是繼承Thread類或?qū)崿F(xiàn)Runnable接口,但不管怎樣,當(dāng)new了這個對象后,線程就已經(jīng)進(jìn)入了初始狀態(tài) wait和sleep的區(qū)別:

      線程訪問:

      鎖池狀態(tài),之后等待鎖釋放,然后訪問代碼

      wait

      等待隊列(釋放資源)--->調(diào)用notify或者notifyall之后鎖池狀態(tài)--->(等待鎖釋放)--->可運(yùn)行狀態(tài)--->運(yùn)行狀態(tài)---->訪問代碼

      sleep,join

      不釋放資源-->結(jié)束后直接進(jìn)入可運(yùn)行狀態(tài)--->運(yùn)行狀態(tài)---->訪問代碼

      一個java控制臺程序,默認(rèn)運(yùn)行兩個線程,一個主線程,一個垃圾回收線程。線程與進(jìn)程的區(qū)別:

      1.線程(Thread)與進(jìn)程(Process)進(jìn)程定義的是應(yīng)用程序與應(yīng)用程序之間的邊界,通常來說一個進(jìn)程就代表一個與之對應(yīng)

      的應(yīng)用程序。不同的進(jìn)程之間不能共享代碼和數(shù)據(jù)空間,而同一進(jìn)程的不同線程可以共

      享代碼和數(shù)據(jù)空間。

      2.一個進(jìn)程可以包括若干個線程,同時創(chuàng)建多個線程來完成某項任務(wù),便是多線程。

      六、Ajax請求Session超時問題

      我在做項目時有時會遇到session超時問題,如果session超時,平常請求沒有什么問題,通過攔截器可以正確跳到登陸頁面,可是你如果用ajax請求的話這就出現(xiàn)問題了,因為ajax是異步的,局部刷新,所以登陸界面不會再全頁面中顯示,他只會顯示到頁面的一部分當(dāng)中。所以根據(jù)我這幾年的經(jīng)驗找到了我認(rèn)為比較好的一種方法。因為那我用的框架是和struts2集成的,所以就在攔截器中進(jìn)行設(shè)置:

      47

      首先判斷session是否為空就是判斷session是否超時,如果超時就取出請求的head頭信息request.getHeader(”x-requested-with“),如果不為空就和XMLHttpRequest(Ajax標(biāo)識)進(jìn)行比較(request.getHeader(”x-requested-with“).equalsIgnoreCase(”XMLHttpRequest“)))如果相等說明此請求是ajax請求。

      如果是ajax請求就可以用response.setHeader(”鍵“,”值“)來設(shè)置一個標(biāo)識來告訴用戶這是ajax請求并且session超時時發(fā)出的,這樣我就可以在回調(diào)函數(shù)中取出自己設(shè)置的那個唯一標(biāo)識:XMLHttpRequest.getResponseHeader(”“);如果取出的值是和自己在后臺中設(shè)置的值一樣的話,就證明session已經(jīng)超時,這樣就可以設(shè)置window.location.replace(”登陸界面"),來跳轉(zhuǎn)到登陸界面了。

      這樣做雖然解決了問題,但是,會在每個回調(diào)函數(shù)中寫入那些代碼,這樣的話代碼就會顯得特別零散,所以就想能不能定義一個全局的設(shè)置所以就找到了jqery的ajaxSetUp方法,通過ajaxSetUp對jqery的ajax進(jìn)行全局的判斷(ajaxSetUp就相當(dāng)于ajax的攔截器),通過設(shè)置ajaxSetUp里的complete,它就相當(dāng)于回調(diào)函數(shù),這樣那就彌補(bǔ)了上一方法的不足。我做項目時還用到$(document).ajaxStart(),這是ajax請求時的事件;$(document).ajaxSuccess(),這是AJAX請求成功后的事件。我一般用他們來顯示遮罩層和隱藏遮罩層用的加遮罩層是為了不讓用戶重復(fù)提交,更提高了用戶體驗度,讓用戶知道已經(jīng)提交了。

      七:java線程池概述

      java線程池的工作原理和數(shù)據(jù)庫連接池的差不多,因為每次重新創(chuàng)建線程 都是很耗資源的操作,所以我們可以建立一個線程池,這樣當(dāng)需要用到線程 進(jìn)行某些操作時,就可以直接去線程池里面找到空閑的線程,這樣就可以直接 使用,而不用等到用到的時候再去創(chuàng)建,用完之后可以把該線程重新放入線程池 供其他請求使用從而提高應(yīng)用程序的性能。

      線程池的核心流程: 1.構(gòu)建一個 ThreadPoolExecutor 并指定默認(rèn)要創(chuàng)建的線程的數(shù)量 2.通過 threadPool.execute()去添加一個個要執(zhí)行的線程即實現(xiàn)了Runable接口的java類

      3.在實現(xiàn)了Runable接口的java類的run方法中寫入具體的業(yè)務(wù)代碼 線程池的業(yè)務(wù)場景:

      我在工作的時候,當(dāng)時一個同事給我提了一個需求,目前有大量的圖片 需要處理生產(chǎn)縮略圖并進(jìn)行加水印,因為按照普通的處理方法一個個的 進(jìn)行處理太慢了,問我有沒有好的解決方案,這個時候我就想到了java中 的線程池,我構(gòu)建了一個線程數(shù)為5個線程池,然后采用分段批量提取的

      方式每500條為一組數(shù)據(jù)進(jìn)行圖片信息的提取,然后再把這些通過Threadpool的 execute方法交給線程池中的線程進(jìn)行處理,即充分使用了CPU硬件資源又加快 了大數(shù)據(jù)情況下程序的處理效率。

      48

      我當(dāng)時在工作的過程中,認(rèn)識一個做電商的朋友,他們當(dāng)時公司才起步,很多 技術(shù)都不成熟,所以就常常和我探討一些技術(shù)問題,有次他向我請教一個問題,問我如何才能提高網(wǎng)站的性能,我根據(jù)自己在項目中的經(jīng)驗以及自己以前閱讀的

      關(guān)于優(yōu)化方面的資料給他提出了很多建議,如用lucene進(jìn)行全文檢索,用memcached 進(jìn)行分布式緩存,以及通過spring定時器結(jié)合freeMarker模板引擎來生成靜態(tài) 頁面,由于要生成的頁面的數(shù)量比較多,考慮到程序的性能,我建議他結(jié)合 java的線程池進(jìn)行工作,這樣就可以充分使用了CPU硬件資源又加快 了大數(shù)據(jù)情況下程序的處理效率。

      八、OSCache概述

      oscache是一個高性能的j2ee框架,可以和任何java代碼進(jìn)行集成,并且還可以通過標(biāo)簽對頁面內(nèi)容進(jìn)行緩存,還以緩存請求。

      我們通常將那些頻繁訪問但是又不是經(jīng)常改變的數(shù)據(jù)進(jìn)行緩存。為了保證緩存數(shù)據(jù)的有效性,在數(shù)據(jù)發(fā)生改變的時候,我們要刷新緩存,避免臟數(shù)據(jù)的出現(xiàn)。刷新緩存的策略有兩種,一種是定時刷新,一種手動刷新。

      緩存數(shù)據(jù)的時機(jī)通常也分為兩種,即在tomcat(web容器)啟動時候加載數(shù)據(jù)進(jìn)行緩存,另外也可以在用戶第一次訪問數(shù)據(jù)的時候進(jìn)行緩存,這個相當(dāng)于緩存的立即加載和按需加載。

      緩存的層次如下:jsp-->action-->service-->dao,緩存越靠前對性能的提升越大

      一個action里面可以有多個service,一個service中可以有多個dao或者多個service

      任何類之間都可以進(jìn)行相互調(diào)用,可以通過構(gòu)造函數(shù)傳參,set,get傳參或者是方法傳

      參將相關(guān)的類連接起來。

      九、OSCache+autocomplete+單例業(yè)務(wù)場景

      在我以前做某項目的過程中,其中我們在做產(chǎn)品列表的查詢的時候為了提高用戶的體驗度,我們使用了autocomplete插件來代替select進(jìn)行品牌的選擇,才開始的時候每次都要根據(jù)用戶輸入的信息去查詢數(shù)據(jù)庫進(jìn)行模糊匹配返回結(jié)果,后來我們考慮到系統(tǒng)的性能,因此我們采用了oscache緩存,才開始這個功能是交給我們項目組中的另外一個同事來做的,但是他做完后,我們在使用這個工具類的時候,發(fā)現(xiàn)有時緩存中明明已經(jīng)有時我們需要的數(shù)據(jù),但是從緩存里面取的時候,發(fā)現(xiàn)沒有,之后項目經(jīng)理讓我去幫這個同事看看這個問題,我經(jīng)過閱讀他的代碼發(fā)現(xiàn),它里面在使用緩存的時候,針對于每次方法的調(diào)用都產(chǎn)生一個新的實例,結(jié)果導(dǎo)致了上面的問題,這個時候我想起了可以使用設(shè)計模式中的單例模式來解決這個問題,才開始我直接采用了普通的單列模式,但是后來在測試的過程中,發(fā)現(xiàn)當(dāng)用戶并發(fā)量大的時候還是會出現(xiàn)上面的問題,之后我再次考慮了代碼,最后發(fā)現(xiàn)是因為沒有給單列模式加鎖的原因,從而導(dǎo)致了大用戶并發(fā)的時候,線程安全的問題,之后我便在方法上加上了synchronized關(guān)鍵字,解決上述的問題,但是后來測試人員反饋,覺的這段的性能有問題,我考慮之后便采用在方法體內(nèi)加鎖并結(jié)合雙重判定的方式解決了上面的問題。

      49

      我們是將數(shù)據(jù)在tomcat啟動的時候加載到緩存中,之后用戶進(jìn)行查詢的時候直接從緩存中獲取數(shù)據(jù),根據(jù)前綴匹配進(jìn)行查詢,將結(jié)果返回給用戶。這樣在提高用戶體驗度的同時也提高性能。

      十、緩存概述

      應(yīng)用程序為了提高性能,可以通過使用緩存來達(dá)到目的,緩存的存儲介質(zhì)可以 內(nèi)存或者硬盤,通常將數(shù)據(jù)存儲在內(nèi)存里,確切的說是jvm的內(nèi)存中,緩存是 基于Map這種思想構(gòu)建的,以鍵值對的方式進(jìn)行存取,之所以還可以將

      緩存的數(shù)據(jù)存儲在硬盤中,是因為內(nèi)存資源相當(dāng)有限和寶貴,所以當(dāng)內(nèi)存資源 不足的時候,就可以將其存儲到硬盤中,雖然硬盤的存取速度比內(nèi)存要慢,但是 因為減少了網(wǎng)絡(luò)通信量,所以還是提高程序的性能。緩存可以分為客戶端緩存和 服務(wù)器端緩存,所謂的客戶端緩存通常指的是IE瀏覽器的緩存,服務(wù)器端緩存指 的web服務(wù)器的緩存,通??梢酝ㄟ^第三方組件實現(xiàn),如oscache,memcache

      我們通常將那些頻繁訪問但是又不是經(jīng)常改變的數(shù)據(jù)進(jìn)行緩存。為了保證緩存數(shù)據(jù)的 有效性,在數(shù)據(jù)發(fā)生改變的時候,我們要刷新緩存,避免臟數(shù)據(jù)的出現(xiàn)。刷新緩存的 策略有兩種,一種是定時刷新,一種手動刷新。

      緩存的層次如下:jsp-->action-->service(通常放置在service)-->dao, 緩存越靠前對性能的提升越大

      緩存的策略:(緩存空間不足需要進(jìn)行清理的時候使用)LRU:最近最少使用原則.(理解:存儲書)FIFO:先進(jìn)先出的緩存策略.(理解:排隊)

      你來說說緩存?說說你對緩存的理解(如果遇到重復(fù)的,就可以省略)

      我們在項目中使用緩存的目的是為了提高應(yīng)用程序的性能,減少訪問數(shù)據(jù)庫 的次數(shù),從而提高應(yīng)用程序的吞吐量。我們通常將權(quán)限,菜單,組織機(jī)構(gòu)

      這些頻繁訪問但是不經(jīng)常改變的基礎(chǔ)數(shù)據(jù)進(jìn)行緩存,其中我在做()某某項目的時候 就通過oscache對ZTree的樹形菜單進(jìn)行了緩存,并且在做的時候和單列設(shè)計 模式進(jìn)行結(jié)合,考慮到多線程下的安全問題,還對單例模式加入了雙重判定鎖 的檢查方式。

      十一、實現(xiàn)頁面靜態(tài)化業(yè)務(wù)場景

      我們在做某項目時,涉及到程序訪問的性能問題,這時候我們想到可以通過靜態(tài)化來提高用戶訪問時候的性能,所以我們就采用了freemarker模板引擎,考慮到頁面也是要有動態(tài)的變化的,所以我們采用spring定時器在每天晚上2點鐘的時候定時再次生成html靜態(tài)

      50

      第五篇:JAVA基礎(chǔ)總結(jié)

      JAVA基礎(chǔ)總結(jié)

      轉(zhuǎn)眼間,已經(jīng)來到這里學(xué)習(xí)半年了,而現(xiàn)在我們對于JAVA學(xué)習(xí)才算是真正的開始。一開始接觸的時候我發(fā)現(xiàn)這個和C語言的基本語法幾乎一模一樣的,老師說:JAVA語言本來就是C++語言發(fā)展過來的,而C++是從C語言發(fā)展來的,C C++ 還有JAVA雖然是不同的三種語言,但是其實他們的基本語法是一樣的,但是它們卻有巨大的區(qū)別,這個區(qū)別主要是體現(xiàn)在思想上。

      都說C語言是面向過程的語言,C++ C#和JAVA是面向?qū)ο蟮木幊?,其實就是思維方式稍微改了一下子,面向過程的語言主要是著重于算法,面向?qū)ο笾赜谶壿嫸选?/p>

      這個教我們的老師是張成峰老師,張成峰是個很負(fù)責(zé)的老師,雖然JAVA基礎(chǔ)其實和C語言基礎(chǔ)差不多,但是仔細(xì)學(xué)學(xué)還是能找出很多不同的細(xì)節(jié)的,于是大家的問題就很多,張老師幾乎就是手把手的教我們,所以整體來說JAVA基礎(chǔ)學(xué)得挺扎實的。

      我在這本書的學(xué)習(xí)不是挺好,聯(lián)系得少了,所以對代碼也不是特別熟悉。而且JAVA是一門重概念的書,對于我來說,概念是我的要害,理論知識也是我最怕學(xué)習(xí)的,所以學(xué)習(xí)這本書對我來說很是艱難,聽了很久的課,代碼寫得出來,但是理論知識幾乎一點也不明白,結(jié)果就造成了這次筆試考的不好。

      筆試考的不好,機(jī)試也因為我的粗心沒有考好,所以這次的成績不好。

      學(xué)習(xí)JAVA基礎(chǔ)后,還要在學(xué)習(xí)的過程中對每個知識都要用心和細(xì)心,當(dāng)然最該注重的地方就是應(yīng)該提高我對理論知識的學(xué)習(xí),要多看書,也要多敲敲代碼,這些就是提高學(xué)習(xí)知識全面的方法。

      下一本書學(xué)習(xí)的是JAVAOO算是JAVA的一個重要的內(nèi)容了,這才會真正的接觸JAVA的核心課程,在這本書里我要好好的理解理論知識,仔細(xì)的學(xué)習(xí)每個知識。

      下載Java基礎(chǔ)知識點總結(jié)-Ch1word格式文檔
      下載Java基礎(chǔ)知識點總結(jié)-Ch1.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        Java基礎(chǔ)總結(jié)

        ? 基本數(shù)據(jù)類型 ? 變量單元直接存放數(shù)據(jù) ? 賦值和傳參的方式:傳值,即傳遞副本 ? 比較相等使用關(guān)系運(yùn)算符“==”? 引用數(shù)據(jù)類型 ? 變量單元存放引用即對象地址,而數(shù)據(jù)(對象)在另一內(nèi)存區(qū)......

        java知識點總結(jié)目錄.

        1:J2SE 面向?qū)ο螅庋b、繼承、多態(tài) 內(nèi)存的分析 遞歸 集合類、泛型、自動打包與解包、Annotation IO 多線程、線程同步 TCP/UDP AWT、事件模型、匿名類 正則表達(dá)式 反射機(jī)制 2:......

        java期末考試知識點總結(jié)(范文模版)

        java知識點總結(jié) 應(yīng)同學(xué)要求,特意寫了一個知識點總結(jié),因比較匆忙,可能歸納不是很準(zhǔn)確,重點是面向?qū)ο蟮牟糠帧? java有三個版本:JAVA SE 標(biāo)準(zhǔn)版JAVA ME移動版JAVA EE企業(yè)版 j......

        《JAVA基礎(chǔ)》基本概念總結(jié)

        《JAVA基礎(chǔ)》基本概念總結(jié) 1、在JAVA中所有萬物皆對象,所有的代碼都要寫在一個類中,在類中只能包含屬性(變量)和方法(函數(shù)),其它代碼必須寫在某一個方法中,方法與方法之間是平行的,不......

        java基礎(chǔ)總結(jié)大全(筆記)

        一、基礎(chǔ)知識: 1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī),用于保證java的跨平臺的特性。 java語言是跨平臺,jvm不是跨平臺的。JRE(Java Runtime Environmen......

        Java學(xué)習(xí)_基礎(chǔ)總結(jié)

        現(xiàn)在學(xué)習(xí)JAVA的人越來越多!但是學(xué)的好的,能用到工作中去的卻很少很少,下面就是我為大家總結(jié)歸納的一些JAVA學(xué)習(xí)基礎(chǔ),希望大家少走彎路,盡快投入到工作中去! Java 學(xué)習(xí)基礎(chǔ)總結(jié)歸......

        Java基礎(chǔ)語法總結(jié)2

        Java基礎(chǔ)語法總結(jié)2 三、運(yùn)算符 Java基 本 的 運(yùn) 算 符 按功能分有 下 面 幾 類 : 1.算 術(shù) 運(yùn) 算 符 (+,-,*,/,%,++,--) Java對 加 運(yùn) 算 符 進(jìn) 行 了 擴(kuò) 展 ,使 它 能 夠......

        【黑馬程序員】Java基礎(chǔ)總結(jié)

        【黑馬程序員】Java基礎(chǔ)總結(jié) 黑馬程序員的javaEE課程主要分為2個部分:java基礎(chǔ)+java就業(yè)。今天就簡單的給大家總結(jié)一下咱們java基礎(chǔ)的知識。 注:Java采用Unicode符號集,每個......