




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Java程序測試環境配置首先正確安裝Rational軟件,這里要注意的是安裝路徑中不要出現中文,因為在測試Java程序時,需要調用Javac.exe輸入命令,在命令中出現中文字符會出錯。然后是安裝JDK,在這次試驗中采用的是JDK 1.50版本(本實驗采用的IBM的Rational測試程序似乎不支持JDK 1.60版本),配置Java應用服務器環境,設置環境變量JAVA_HOME為 (Path是JDK 安裝目錄)。然后對于另一個變量_JAVA_OPTIONS,你可以選擇性的配置,Rational PurifyPlus 通過 Java 虛擬機假脫機接口(JVMPI)來收集所有關于Java應用程序
2、的信息。因為JVM和Rational PurifyPlus是作為兩個不同的進程運行的,Java進程需要載入一個名為PureJVMPI的PurifyPlus共享文件來偵聽JVM 事件,通過 JVMPI 收集運行數據。這個動態連接庫是通過一個運行Java可執行文件時的附加選項:-Xrun來加載的。下面是啟動Purify(Quantify以及Coverage)的例子:java -XrunPureJVMPI: Purify Java_App(或 java -XrunPureJVMPI: Quantify Java_App(或 java -XrunPureJVMPI: Coverage Java_App
3、)為了分析服務器端Java應用程序和服務,您需要手動創建一個特殊的包括-Xrun選項的系統參數,從而在每一次使用JAVA虛擬機時自動運行選中的PurifyPlus工具。對Sun JVM,整個變量的名稱是_JAVA_OPTIONS,它的值應該是: -XRunPureJVMPI: Purify (or -XrunPureJVMPI:Quantify or -XrunPureJVMPI:Coverage) 你可以選擇性的在_JAVA_OPTIONS環境變量中設置上述選項,這樣會使Java應用程序運行時啟動Rational Purify(或者Quantify和PureCoverage),而Purify
4、(或者Quantify和PureCoverage)則會自動的開始收集該Java進程的數據。下面是啟動Purify收集Java程序數據時命令行的代碼:在上面代碼中值得注意的是對于Rational自帶的位于 C:Program FilesRationalPurifyPlusSamplesJAVAPPlusDemo目錄下的WordCount Sample (即本次試驗所采用的測試程序) 程序中有用到PureAPI函數,對于這個函數是來自Rational自帶的Rational.jar包,程序中使用的代碼如下:import Rational.PureAPI;這里導入的函數包需要配置一下,不然會報錯,國外
5、有關Rational的網站上有說明這個函數的使用PureAPI is a Java class that includes all the Quantify API methods that can be used with Java code. The PureAPI class is part of a Java package called Rational.jar, which is located in . You can run class files that include calls to PureAPI methods with or without Quantify: W
6、hen you run these class files with Quantify, Quantify automatically sets CLASSPATH and LD_LIBRARY_PATH to access Rational.jar and libQProfJ.so. When you run the class files without Quantify, you must add /lib32 to your LD_LIBRARY_PATH. In addition, if you do not have a Rational.jar file in your /jre
7、/lib/ext directory, you must add to your CLASSPATH. 將Rational安裝目錄下C:Program FilesRationalPurifyPlus的Rational.jar解壓縮,將原壓縮包也就是Rational.jar復制到C:Program FilesRationalPurifyPlusSamplesJAVAPPlusDemo目錄下,然后將解壓縮得到的Rational和META-INF文件夾復制到JDK安裝路徑下的/jre/lib/ext目錄下就可以解決import Rational.PureAPI報錯問題了。本次試驗測試的是Ration
8、al自帶的Sample程序WordCount,在測試WordCount程序之前先閱讀C:Program FilesRationalPurifyPlusSamplesJAVA目錄下的Readme文件,按照上面的步驟開始準備工作,首先需要設置一個環境變量PPLUS_HOME,可以使用命令行:SET PPLUS_HOME=,也可以在系統屬性里面手工設置,這個環境變量是用為C:Program FilesRationalPurifyPlusSamplesJAVAPPlusDemo路徑下的Make.bat批處理文件配置路徑的,配置好PPLUS_HOME環境變量之后就可以運行Make.bat來編譯WordC
9、ount程序了,在第一次編譯時可能會拋出 ”無法根據.classpath找到C:vlhTestJavaPplusDemo下的Rational.jar文件” 的錯誤,這個錯誤很好解決,只要將前面找到的Rational.jar壓縮包復制到指定的路徑下就可以了(沒有路徑可以自己創建)。按照上述步驟操作下來基本上沒有什么問題了,再次運行Make.bat,編譯通過后就可以得到測試需要用到的PplusDemo.class文件了。小結至此,我們可以用Rational對Java程序WordCount進行測試了,上面雖然只是簡單的說明了一下整個環境配置過程所需要做的工作,但是由于目前網上還沒有完整的測試Java
10、應用程序的教程,而且網上的資料大多數都是國外的,這導致我花費了兩天時間去尋找資料,配置環境變量,然后使用MyEclipse分析程序代碼,接著更正錯誤,直至得到編譯生成的.class文件,期間Rational重裝了不下3次,因此希望這份報告能幫助初學者少走彎路。使用Purify工具對Java程序進行測試 程序第一次啟動時,當程序內存使用穩定時對其進行第一次內存快照拍攝,下圖顯示程序初始化時,內存使用逐漸趨于穩定的情況的內存使用圖,同時也可以看著一個黑色的相機表明在此位置對其內存使用進行了拍攝,以用于和程序內存使用發生較大變化時進行比較。圖1、程序第一次啟動時的畫面,使用了PureAPI圖2、程序
11、第一次啟動時待內存穩定的畫面2、這時程序選擇了一個數據文件test1對其進行word Count分析過程,這時可以發現內存使用陡然上升。這時對其使用強制垃圾回收,但內存使用依舊持續上升,下圖為內存使用變化圖,可以看出內存占用增加。圖3、程序進行數據文件分析時內存使用波動圖,內存持續上升時的畫面3、當出現內存使用陡然上升時,由于可能發生內存泄漏,因此嘗試強制使用垃圾回收機制對其進行回收,發現仍不起作用,內存使用依舊上升,因此這時可能發生內存泄漏了,對其進行第二次內存使用快照拍攝已和第一次進行比較找出原因。圖4、對內存波動圖進行第二次內存使用快照拍攝4、程序分析完數據文件后,可以從該程序看出起內存
12、使用情況以及程序對文件進行分析所耗時間。而從圖4所示內存使用的狀況圖可以看出,隨著數據文件的分析結束,內存使用又下降了,最后趨于平穩,但這時平穩后的內存狀況圖,比程序初始化時內存使用明顯增多了。圖5、程序分析完數據文件后結果5、對成穩定狀態的內存進行第三次內存使用的快照拍攝圖6、對內存使用進行第三次內存快照拍攝6、整個程序運行結束后,內存整個使用情況如下圖所示。圖7、程序運行結束時整個過程內存使用情況圖7、把第一次內存快照同第二次內存快照的比較,從下圖可以看出出現的問題,函數關系圖中,高亮顯示部分,表示出現不同點,出現內存使用劇增的主要模塊是WordCount類中Scan的方法。圖8、第一次和
13、第二次內存快照比較結果圖8、第一次快照和第二次快照時的內存分配情況的最大不同可以通過查看函數內存分配表如圖11,12所示,可以看出這兩次內存快照不同點中,第一次快照時,Method:DemoPanel.getJPanelQaConsole()占用內存最多;而在第二次快照時,Method:WordContainer.Set()占用內存最多。顯然這是由于第二次快照時程序要對文件進行掃描導致的。圖9、第一次快照中Method:DemoPanel.getJPanelQaConsole()的細節圖10、第二次快照中Method:WordContainer.Scan()的細節9在第三次快照時,程序分析文件
14、已經完畢,內存使用情況本應該回到分析文件之前的狀態,但由圖9可看出,顯然內存使用比剛啟動程序時要多,這可能是垃圾回收的問題,出現內存泄漏。對比第三次快照時和第一次快照時的函數占用內存列表,(圖11)可看出Method:ResultsTableModel.setData()函數使用了整個程序所占內存的59.72%。而再查看setData()函數中具體內存使用情況可知:在setData()函數中,所調用的方法Method:ResultsTableModel.sort()是內存使用的最主要因素。圖11、Method:ResultsTableModel.setData()內存使用情況11、現在看有修復
15、和沒修復內存泄漏的內存使用情況對比圖12、未修復內存泄漏第一次執行test1數據文件結果信息圖13、修復內存泄漏第二次執行test1數據文件結果信息圖14、修復內存泄露第三次執行test1數據文件結果信息圖15、未修復內存泄露第四次執行test1數據文件信息圖16、整個程序運行過程中各個階段內存使用情況對比結果分析:圖12程序第一次對數據文件test1進行未修復內存泄露分析的結果所耗時間為50.438,從內存使用情況圖16可以看出由于未修復內存泄露,內存在穩定之后明顯高于開始,而圖13為對同一數據文件再一次進行修復內存泄露分析,由于修復內存泄漏,這次分析所耗時間為1.01.593,明顯高于第一
16、次,且從內存使用情況的圖16中可以看出第二次內存快照等于第一次內存快照內存使用量,根據上面分析可知是由于第一次存在了內存泄漏。而在圖13已對內存泄漏修復了,但是由于前次造成的內存的泄漏是無法回收的,因此其內存使用仍明顯高于開始的內存使用情況。從圖13的分析結果所耗時間為1.01.593高于正常水平,估計是修復內存泄露所花的時間,但是從圖14的分析結果所耗時間為48.968,由于圖13和14分析修復了內存泄露,這次所耗時間又回到了正常水平,明顯分析的效率高于存在內存泄漏情況,同時通過圖16的內存使用圖可以看出第三次數據分析明顯內存使用沒有再增加,而第四次又未修復了內存泄漏,圖15為又把修復的內存
17、泄漏又恢復到沒修復情況,這時從圖15執行結果所耗時間為1.24.390可以看出,其分析效率又再次陡然下降了,同時從圖19的內存使用圖可以看出第四次分析其內存使用沒有升高,原因是在修復過一次內存泄漏之后,內存使用不會再繼續上升,從下面的代碼中可以看出來。以下為修復內存泄漏的關鍵代碼:由于在沒修復內存泄漏時,bFixLeaks初始為false,因此導致每次數據分析完時,m_Words容器里存放的許多已經無用的數據沒得到釋放,因此導致了內存泄漏。而修復了內存泄漏后,會將bFixLeaks置為true,這時每次數據分析完之后,下次再次分析時都會把上一次已經分析過的無用數據給釋放掉,避免了內存泄漏,所以
18、只要修復了內存泄露,下次分析時都不會出現內存泄露,但是為了確保程序退出時,不出現內存泄漏,因此在程序正常退出時,同樣要對m_Words容器里數據所占用的內存空間進行釋放,防止多次運行次程序造成越來越多的內存泄漏。使用Quantify工具對Java程序進行測試當程序第一次運行時,內存使用穩定時。 圖(1):程序運行穩定時的線程運行圖圖(2):程序運行截圖2對程序進行world count測試。運行完成后: 圖(3):測試截圖速度很慢,運行時間是32.954秒3現在退出程序,使用quantify調用圖形窗口。窗口的初始顯示聚焦于你code中的高作用組件,和一些任何性能改進都能啟到最大作用的區域.如
19、下圖:圖(4):quantify 圖形窗口通過圖形發現可疑函數限制了程序的性能,可以將它孤立來檢查它在哪兒花了時間發現函數wordcontainer.find()所耗費的時間最多。3在用函數列表來分析數值數據。通過排序發現,wordcontainer.find()所消耗的時間最多,是引起性能瓶頸的 主要因素。圖中右擊wordcontainer.find(),然后刪除wordcontainer.find()子樹。發現wordcount.scan所消耗的時間也很多。在代碼查找得到find()函數:發現在我們在未選中bFixPerformance時,程序始終執行的是IF中的程序,顯然發現IF的程序是
20、通過循環來查找元素,而else中的程序是通過常數時間來查找,效率肯定差別很大。4現在我們把find函數改變一下,即選中程序面板中的FixPerformance選項,看結果有什么區別。我們使用的是相同的數據,但是選中fix performance后,效率大大提高。只用了4.328秒。在看一下現在的圖形窗口:瓶頸不在是find()而是scan了,這和上邊的結果是相一致的。在看一下函數列表:耗時最多的是wordcount.scan()函數了,大約是 33.34%的時間。5結果分析。從Scan和Find函數中可以看出Scan函數已經對文件進行了WordCount分析,所以在If判斷中的線性循環whil
21、e是多余的。通過使用quantify的圖形窗口可以最直觀的看出可疑函數,然后在對照函數列表,就可以確定系統的瓶頸所在。使用PureCoverage工具對Java程序進行測試Coverage:第一次run的時候,選擇test5.txt(空的文本文件)來進行測試,并勾選Use PureAPI選項,點擊run,得到一次運行結果,如下所示圖1、運行畫面圖2、由于執行的是空文件,拋錯,沒有運行結果下面是函數命中率,大部分都是0其覆蓋率如下所示可以看出,本次測試的覆蓋率很不理想然后我們進行另一次測試,這次執行的是test0,其他操作跟第一次相同覆蓋率如下圖這次覆蓋率相對來說只有WordCountExcep
22、tion覆蓋率降低,其他的和第一次差不多,可見這次也不是很理想。這次執行test1在執行過run以后,我們再點擊一下Untested Code按鈕,然后結束此次測試。我們看看這一次的測試結果是怎樣由于比第一次測試多運行了Untested Code按鈕,所以此次覆蓋率在pane之類的文件上有所增加。現在我們再將三次run得到的結果Merge一下,第二次和第一次的Merge1:第三次和第二次的Merge2:我們通過選擇兩個Merge進行比較,結果發現:Merge1在一下DemoPanel類上面的調用比Merge2要多,然而Merge2在WordCount類上面的調用明顯多余Merge1.附錄資料:
23、java重點筆記歸納整理Java初級eclipse快捷鍵:右鍵REFACTER-RENAME 一改全改ALT+ENTER 查看現在項目的位置 Alt+ 當前行和下面一行交互位置(特別實用,可以省去先剪切,再粘貼了) Alt+ 當前行和上面一行交互位置(同上) Ctrl+W 關閉當前Editer C+/ 注釋(取消注釋)選中行C+S+/ 注釋多行C+S+取消注釋 F2 查看完整的函數幫助信息,并且可以復制粘貼文字 ,當選中文件時,有改名作用 F3找到變量的定義 C+鼠標點擊 找到變量的定義 作用和F3C差不多。 F4找到接口方法的具體實現類.=C+T F5刷新 C+F6:在打開的文件間進行切換;
24、 C+F7:在資源窗口間進行切換; C+F8:在各種模式間進行切換; C+E:選擇某個打開的文件; C+S+r:打開一個文件; c+s+t:打開一個類; c+s+f:格式化代碼; C+S+O:導入需要的類 c+o:查看類結構; c+t:列出子類或接口實現類(類的等級結構) Ctrl+Alt+ 復制當前行到下一行(復制增加) Ctrl+Alt+ 復制當前行到上一行(復制增加) CtrlK (加SHIFT是向上)向下查找選中的字符串 Ctrlshift 向上向下查找一個函數和變量 Java基礎知識1.Java是Sun公司的JamesGosling發明的面向對象的可跨平臺的編程語言。2.SUN公司,
25、Stanford University Network,斯坦福大學;3.平臺:我們把cpu處理器與操作系統的整體叫做平臺。不同的操作系統支持不同的cpu指令集。不同的cup有不同的指令集,如intel和AMD.4.JDK:Java Software Develop Kit. JVM:Java Virtual Machine.Java虛擬機,包含:類加載器,字節碼校驗器,java解釋器。 JRE:java運行時環境,包含jvm與java運行支持類庫。5.環境變量:java_home;classpath:.;C:Javajdk1.6.0_10lib;path6.jdkjdk1.1為jvm增加了JI
26、T(即時編譯)編譯器;jdk1.2也叫java2;jdk1.5也叫java5(改動較大);現在使用的是jdk1.6。7.jdk,Java Developent ToolKit;開發java需要有源程序文件到中間文件的編譯器;運行java中間文件需要對應平臺的解釋器(官方叫法JVM);編譯器、解釋器加上一些其它的組件合稱為JDK.JDK的另外一個稱呼為Java Software develop kit.JDK即開發java程序的組件。jdk=java編譯器+jre(java運行環境) jre=jvm+運行支持類庫 eclipse和jbuilder本身自帶了java編譯器但不包含jre。8.jre
27、:Java Runtime Environment,java運行時需要的環境。有兩類,開發需要的jre和公共jre。9.jdk版本,jdk1.2到jdk1.4為java2時代,java技術有j2ee,j2se,jeme.jdk1.5,也叫做java5,技術術語改為javase,javaee,javame.1.5在1.4的基礎上改動很大。10.常用的DOS命令:dir,現實當前文件夾的所有文件;cd . 打開上級目錄;exit:退出。11.java注釋:java注釋分為三種單行注釋,多行注釋,文檔注釋,文檔注釋結果為:/*換行*/,文檔注釋在幫助文檔里面有顯示。12.javadoc幫助文檔,ja
28、vadoc可執行程序可生成幫助文檔,用法如下:javadoc Test01.java13.java 打包jar,用法見cmd輸入jar;ant也是一種打包成jar的工具,其功能叫jar更加強大;除了jar包外,java文件包還有war,ear兩種格式。14.java缺點:運行速度慢,占用資源多是java的缺點;其原因是:class需要二次編譯,解釋執行;jvm運行占用資源;無指針無法直接操作內存,垃圾回收線程占用資源,并且不會實時收集內存。15.JVM,JAVA虛擬機即java解釋器;JVM執行.class文件需要三步:類加載器加載;校驗器檢查錯誤,執行文件。在執行的時候有兩種方法:a.解釋器
29、直接執行;b.JIT代碼生成器搞定。16.兩種解釋執行方法的區別:直接解釋執行是1.1版本的,其直接翻譯class文件,速度必然比機器執行二進制文件的速度慢;1.2版本后引入JIT,即將class文件先轉換為二進制文件,再執行二進制文件,下次執行時可直接執行二進制文件。15.JIT(即時編譯):java即時編譯技術,可執行java代碼的運行速度。17.IDE工具 IDE:Integrated Development Environment,集成開發環境。18.開發java的IDE工具:JCREATOR,JBUILDER,ECLIPSE,NETBEANS.20.拷貝項目的三種方式:a.拷貝整個工
30、作空間,切換工作空間。b.拷貝項目,導入項目。c.只拷貝源代碼(即src文件夾),從新建的項目導入。22.轉義字符:單引號:;雙引號:;反斜杠:;回車:n;水平制表符:t;換行:r. 轉義字符一般出現在字符串中時,要是以原型輸入,則輸出一定報錯,只有以轉換后的才能顯示。23.數據類型轉換:byte char short int long float double,String,小杯到大杯自動轉換,但是大杯到小杯強制轉換。一般的格式:標變量=(目標類型)源變量,特殊的,String轉換為其它,int a = Integer.parseInt(str1);float b = Float.parse
31、Float(str2);boolean c = Boolean.parseBoolean(str3);24.內存分配 基本數據類型只在棧中分配內存;應用數據類型不僅在棧中分配內存,還在堆中分配內存,在變量聲明時,在棧中分配內存,當創建對象時,在堆中分配內存。25.值傳遞和引用傳遞 本人去見網友叫按引用傳遞;替身去見網友叫做按值傳遞。引用傳遞參數數值改變,按值傳遞參數值不變。基本數據類型就是按值傳遞的,又稱為值類型,而引用類型是按引用傳遞的。String 雖然是按引用傳遞的,但是傳遞給的新變量會有屬于自己的堆內存,所以,String值不變。包: 開發中最好在導入包和類的過程中,最好是使用哪個類就
32、導入那個類,不要導入包。27.包的命名規則:反寫的企業域名.功能名.模塊名28.系統包(SUN提供的包)默認包-java.lang.常用包 java.lang: java的核心類庫,包含了運行java程序必不可少的系統類,如基本數據類型、基本數學函數、字符串處理、線程、異常處理類等,系統缺省加載這個包 java.lang.reflect:提供用于反射對象的工具 java.io: java語言的標準輸入/輸出類庫,如基本輸入/輸出流、文件輸入/輸出等 java.util:常用的工具類,如集合框架類,日期處理類等。主題:旺旺老師軟件工程師實訓教程-JAVASE 第六章:包與 JAVA 常用類 ja
33、va.sql: JDBC相關類。 :JAVA網絡包,其中包含能夠使程序通過網絡進行通信的 java.awt;javax.swing:使用java開發C/S結構應用程序使用的類。29.企業開發中命名規則一般如下: com.easyitedu.dao /持久層代碼 com.easyitedu.view /表示層代碼 .student /stuent模塊的業務層代碼 .teacher /teacer模塊的業務層代碼 com.easyitedu.tool /本項目使用的工具類30.包裝類:8個值類型對應的有8個類,我們把它們稱為包裝類。其作用較八種基本類型的作用強大,java不符合面向對象的兩個地方:
34、一個是JAVA保留了8個基本數據類型,他們不是對象,更沒有屬性和方法;另一個就是JAVA中存在著main方法。之所以還在用八種基本類型而不是通通用包裝類,是因為一些簡單的業務用基本數據類型效率較高,但是有時必須用八個包裝包,例如:強制類型轉換。 其中byte的包裝類是Byte.只有char的類是Character,int 是 Integer.其它像byte一樣是其本身。說明:int a = 10; Integer b = new Integer(10);其中,前者占用一塊內存,后者占用兩塊,符合引用傳遞。自動的拆箱和裝箱:把數據由基本數據類型轉換為對應包裝類叫做裝箱,把數據由包裝類轉化為基本數
35、據類型叫拆箱。實例:int a = 10;Integer b = a;/自動裝箱,基本數據類型-包裝類 int c = b;/自動拆箱,包裝類-基本數據類型,即兩種類型可以自動相互轉換,沒其它制約。32.String轉換成基本型:調用包裝類的parse*方法,例如:String a = 12; int a = Integer.parseInt(a);33.=和equals,=比較的是堆內存地址,后者堆內存(即地址可以不同)。equals,用法:常量.equals(變量),要不然會出現空指針異常。34.字符串池:當字符串直接賦值時,(string a = aa;)其堆內存會進入字符串池,當下次在
36、賦值相同時,String b =aa;b會直接引用a的堆內存。但是當賦值為new 方法賦值時,其堆內存不會進入字符串池,而是直接開辟一個新的空間。String c = new String(aa);35.三個空字符串的區別:String a = null;String b = ;String c = ;其中null,沒有分配堆內存空間,b分配了堆內存空間,里面放了一個空格;c雖然分配了內存空間,但是沒有放東西。36.字符串拼接:不用String 而是用StringBuffer.append(),前者的對內存限定了,改變后重新分配內存;后者可以添加內存。就像前面是不能加車廂的汽車,每次都得換車;
37、后者是可以加車廂的汽車。37.面向對象編程叫OOP,還有一門知識叫OOAD(面向對象的分析與設計),在OOAD中,繼承又叫派生,父類又叫超類。38.Override注釋:第四種注釋,給java編譯器看的,在編譯階段提示錯誤,在重寫父類方法時,一般加上此注釋,表示此方法是重寫的父類方法。39.Deprecated注釋:此方法不推薦使用(看文檔時),一般會有功能更強大的方法代替。SuppressWarrin40.繼承的7點特性:a.子類擁有父類的屬性和方法b.子類可以有自己行的屬性和方法c.子類可以重寫父類的方法d.可以聲明父類,創建子類d_1.聲明什么類型,就只能調用什么類型的方法d_2.創建什
38、么類型,運行什么類型的方法d_3要使用創建類型的方法,必須得強制轉化類型。41.this與super關鍵字 一般在子類中使用,this表示調用自己聲明的屬性和方法;super表示父類聲明的屬性和方法。static方法中不能使用this與super關鍵字。42.繼承中的構造方法 創建對象一定會調用構造方法? 創建子類對象一定會調用父類的構造方法? 子類默認調用父類無參構造方法? 子類只能調用父類存在的構造方法? 子類構造方法中使用super調用父類構造方法,并且super必須放在第一行? 構造方法中this表示調用本類其他構造方法,并且this必須放在第一行43.封裝定義:隱藏屬性,方法和方法實
39、現細節的過程成為封裝。45.方法的說明符 方法的訪問說明符 1.public 任何地方都可以訪問 2.protected 子類或者同包,同類可以訪問,但是其它包的非子類不可以訪問 3.default 只有同類或者同包可以訪問 4.private 私有的方法,這里的私有指的是被被class所私有,其他類不能訪問,繼承的類也不行。 方法的其他說明符 1.static 2.final 此方法不可以被子類覆蓋。 3.abstract 抽象的方法 4.native 用戶可以使用,但是不能編寫的類。 5.synchronized 同步的方法面向對象 面向對象的程序開發實際上分為三種:OOA OOD OOP
40、 |-OOA:面向對象的分析 |-OOD:面向對象設計 |-OOP:面向對象程序 三大特性:封裝、繼承、多態。 對象的創建及使用:Person zcy = null;/聲明對象 zcy=new Person();/實例化對象 Person zcy = new Person(); 方法不需要創建,直接使用。47.封裝性 封裝性有很多體現,但是最簡單的體現是假如“private”關鍵字。48.實體類:在開發過程中,有一些類與數據庫緊密聯系,其叫法有幾種,常用的有,entity 實體類;vo類 value object 值傳遞;dto,data transmission object 數據傳輸對象。
41、Static49.static普通變量通過對象名.變量訪問;而static變量通過類命.變量訪問,因為static 修飾的變量為類變量。50.final,當定義一常量時,用final修飾,變量名大寫,通常情況下,final修飾,前面加上static,但是反之不成立!51.static方法,靜態方法,同樣是通過類名.方法名調用。靜態方法里面不能調用非靜態變量;靜態方法下面不能使用this,super等關鍵字。靜態方法中不能訪問普通方法,但可以調用靜態方法;即靜態方法里面不能出現非靜態的東西。52.靜態塊:在虛擬機加載類時就調用,不需要等到創建對象時執行。sun公司不推薦使用。多態53.方法重載相
42、同的方面名稱,不同的參數列表(個數和類別不同),同時出現在一個類中。54.方法重寫:在子類中產生與父類相同的方法頭(參數列表也相同),但是方法體不同,屬于方法重寫,與方法重載有根本區別。子類也可以重載父類的方法,只是父子類的方法重載。55.多態定義:多種形態,多種形式,多種表現形態。最直接的表現形式是方法重寫(父子類之間),方法重載(一個類里面)。抽象類,接口都為接口服務。abstract56.抽象方法(abstract):由abstract關鍵字修飾的方法叫做抽象方法,只有方法頭沒有方法體。56.抽象類(abstract):由abstract關鍵字修飾的類叫做抽象類。只能聲明,不能創建。有抽
43、象方法的類一定是抽象類,但抽象類不一定是抽象方法。當想讓一個方法只能被繼承,但是不能創建時,用到此種情況。57.抽象類子類:1實現父類的所有的抽象方法,2.或者自己聲明為抽象類,3.或者部份實現父類的方法,但自身還是要聲明成抽象類。58.取隨機數:Random random = new Random();int selectTndex = random.nextInt(3);System.out.println(selectTndex);59.接口(interface):接口是一系列方法(功能)的聲明,即沒有實現任何方法的抽象類(沒有abstract關鍵字,但出現也不會報錯);命名時,前面加上
44、大寫字母I,在其子類中,子類 implements 接口,implements在這里是實現的意思。子類要么實現接口的所有方法,要么把自己變成抽象類。60.接口特點:一個子類可以實現多個接口,即變相的多繼承。接口可以繼承接口,一個接口可以繼承多個接口。接口只能聲明不能創建。61.接口的分類:a.普通接口,即一系列方法的聲明;b.常量接口,項目中常用的一些常量。C.標識接口(空方法接口),子類實現此接口,表示屬于某個體系接口,具有某種功能。Java中級HTML知識點:Html怎么轉換成jsp頁面供程序員使用1.首行加上代碼2.重命名為jsptable修飾代碼鼠標來去特效與區別同樣是標示一個儲存格,
45、唯一不同的是所標示的儲存格中的文字是以粗體出現URL重寫jjj.jsp?參數名稱=參數值&參數名稱=參數值&參數名稱=參數值方法重寫可以通過鏈接頁面跳轉傳遞參數,其作用和表單中的隱藏域作用一樣。跳轉服務器跳轉和客戶端跳轉:跳轉之后地址沒變,稱為服務器跳轉,地址改變稱為客戶端跳轉。跳轉方式:客戶端跳轉setHeader() response.setHeader(refresh,2;url=ddd.jsp);屬于客戶端跳轉response.sendRedirect(DDD,JSP);客戶端跳轉,頁面執行完畢之后再跳轉,但是不能出傳遞request范圍的屬性。服務器跳轉;服務器跳轉,屬于無條件跳轉,
46、后面的內容不執行,故而數據庫的關閉不能放在后面。頁面間的兩種跳轉服務器跳轉:超鏈接跳轉ssssscookie使用方法:Cookie c1 = new Cookie (dd,ddd); response.addCookie(c1);Cookie c = request.getCookies();for (int i=0;i-注意:發現瀏覽器關閉后,不能取得cookie內容,原因為其內容僅保存在瀏覽器中,并沒有保存在本地,保存本地,其保存時間必需得到設置。cl.setMaxAge(22);/插入此代碼即可out.println()out.println()的換行去哪里了呢?這個換行只是針對于源文件
47、中的換行,但是此換行會被HTML忽略掉,所以如果需要換行,可以直接編寫html語句。兩種include指令 include指令和指令語法格式為: include: 指令有兩種格式:語法一: 語法二: /想頁面1中傳遞參數,再包含在本頁面中 四種屬性每種屬性都有三種操作方法:1.設置屬性setAttribute(String name,Object value) 取得屬性getAttribute (String name) 刪除屬性(removeAttribute)2.屬性范圍 pageContext 范圍僅本頁面 范例:pageContext.setAttribute(name,mldn);/
48、設置屬性 String re = (String)pageContext.getAttribute(name);/取得屬性 requset 屬性范圍表示在一次服務器跳轉中有效,只要是服務器跳轉,則設置的request屬性可以一直傳遞下去,超鏈接則不行。 范例:request.setAttribute(name,dd); String ddd = (Sring)request.getAttribute(name); session 屬性范圍僅為一個客戶,兩種跳轉都可以 范例:seesion.setAttriute(name,dddd); String dddd = (String)seesion
49、.getAttribute(ddd) application 范圍是在服務器上面設置一個屬性,所以一旦設置后任何用戶都可以瀏覽到此屬性。如果在服務器上設置過多的Application屬性,則會影響到服務器的餓性能。 亂碼轉換:產生原因:所有靜態web的執行流程,是先從服務器上取得一個頁面,之后通過把內同提交給服務器,之后服務器在提交的內容返回給客戶進行顯示。設置page指令后,本頁面輸入的中文會得到正確的顯示,但是接受到的從其他頁面的參數卻還是亂碼,解決方法有兩個:第一個直接把接受到的內容用服務器返回給客戶的進行顯示,即加上str=new String(str.getBytes(ISO8859
50、-1);/轉碼 第二種方法為:前面加上 request.getCharacterEnocoding(gbk);/按中文接受。兩種方法的區別為:第一種是接受了再轉換,第二種是轉換了再接受。接收多個同名參數在表單中,存在復選框,接收方法如下:abc若String inst = request.getParameter(inst);接收內容只為選項最前面一個,解決方法如下:String inst = request.getParameteValues(inst);/接收表單參數% for(int i=0;i 、配置tomcat虛擬目錄。1.文件目錄結果必須為:WEB TOOT/WEB-INF/WEB
51、.xml。WEB.xml文件有格式要求。可以拷貝D:Tomcat 6.0webappsROOTWEB-INF里面的文件,但是注釋內容去掉。2.修改serve.xml 正確位置加上:3.conf/web.xmllistings下面false改為true,項目完成記得改過來。登錄代碼系統登錄 用戶名:密碼: 錯誤的用戶名或者密碼! if(!(.equals(name)|name=null)&(.equals(password)|password=null)這條很重要!String轉換package com.zcy;/* * author yangzhi * */public class Test0
52、4 public static void main(String args) String str1 = 10;String str2 = 10.2;String str3 = boolean;/與基本數據類型對應的有八個包裝類int a = Integer.parseInt(str1);System.out.println(a);float b = Float.parseFloat(str2); System.out.println(b);boolean c = Boolean.parseBoolean(str3);System.out.println(c);輸入輸出package com.
53、zcy;import java.util.Scanner;/* * 測試輸入輸出 * author 楊志 * */public class Test03 public static void main(String args) Scanner input = new Scanner(System.in);int age;float money;String name;System.out.println(請輸入您的姓名:);name = input.next();System.out.println(請輸入您的年齡:);age = input.nextInt();System.out.prin
54、tln(請輸入您的工資:);money = input.nextFloat();System.out.println(name = +name);System.out.println(age = +age);System.out.println(money = +money);方法的說明符方法的訪問說明符 1.public 任何地方都可以訪問 2.protected 子類或者同包,同類可以訪問,但是其它包的非子類不可以訪問 3.default 只有同類或者同包可以訪問 4.private 私有的方法,這里的私有指的是被被class所私有,其他類不能訪問,繼承的類也不行。方法的其他說明符 1.s
55、tatic 2.final 此方法不可以被子類覆蓋。 3.abstract 抽象的方法 4.native 用戶可以使用,但是不能編寫的類。 5.synchronized 同步的方法面向對象 面向對象的程序開發實際上分為三種:OOA OOD OOP |-OOA:面向對象的分析 |-OOD:面向對象設計 |-OOP:面向對象程序三大特性:封裝、繼承、多態。 對象的創建及使用:Person zcy = null;/聲明對象 zcy=new Person();/實例化對象 Person zcy = new Person(); 方法不需要創建,直接使用。封裝性 封裝性有很多體現,但是最簡單的體現是假如“
56、private”關鍵字。循環 處理次數用for,處理量的時候用while,while可以執行0次,do while至少執行1次javaBeanjavaBean的兩種引用方法:第一種:先引入類,然后創建對象,代碼如下 Simple simple = new Simple();第二種:用jsp中的標簽指令: 其中simple指的是對象,class指的是類,scope:javabean的保存范圍,page、request、session、applicationjavabean加載 JavaBean每次修改之后都必需重新啟動服務器,因為這樣才能將新的類重新加載進來,等待用戶使用。每次修改JavaBea
57、n都必需重修啟動服務器,解決方法:修改server.xml文件。servel.xml最后一行, 配制虛擬目錄后面加上reloadable=true。傳統傳值操作:姓名:使用jsp指令操作:姓名:JSP相關知識四種屬性范圍pageContext、request、session、application 屬性操作方式:設置屬性(setAttribute)、取得屬性(getAttribute)、刪除屬性(removeAttribute)。 實例:設置pageContext.setAttribute(name,yzhi);取得pageContext.getAttribute(name);內置對象含義:J
58、ava使用對象,先聲明,后創建,再使用;但是在jsp中,有一部分對象不需要聲明,創建,可以直接使用,這種對象叫做jsp內置對象,也叫做jsp隱含對象。九種內置對象pageContext,request,response,session,application,config,out,page,execption.轉碼1:String str = request.getParameter(name);str=new String(str.getBytes(ISO8859-1);/將字符串內容重新轉變為byte數組。 2:request.setCharacterEncoding(GBK);/按中文接
59、收 String str = request.getParameter(name); response: session: application: config: out: page: execption:數據庫 jdbcjdbc中主要接口有: Driver用來表示驅動程序的類 connection此接口用于連接數據庫 statement執行sql語句并將數據檢索到resultset中 resultset數據庫結果數據表,通常由執行查詢數據庫語句產生 preparedStatement 執行預編譯sql語句。 基本上都是接口,出來DriverManager是個類之外。什么是jdbc?java
60、 database connectivity.SUN指定的java應用程序了解數據庫的規范,通過一些類和接口實現。odbc(微軟制定的應用程序連接數據庫的規范)-oledb(odbc升級) ado是規范的一個實現 95java出現,sun制定了java程序連接數據庫的規范jdbc,即java database coonectivity。sun指定規范,微軟等數據庫公司實現規范供客戶使用。jdbc是規范的同時,也是一門技術,學好這門規范,我們就可以連接各種不同的數據庫。 當然我們實際使用的時候操作的是DriverManager這個類,如Connection,statement,等這些接口,所以說
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車庫房屋合同協議書范本
- 2025秋五年級上冊語文(統編版)-【25 古人談讀書】作業課件
- 搭用電合同協議書范本
- 運輸司機合同協議書模板
- 盆景買賣合同協議書
- 解除掛靠工程合同協議書
- 乙方商業租房合同協議書
- 取消租車合同協議書范本
- 基因編輯技術在農業上的應用
- 街舞計劃書文案
- 健康照護教材課件匯總完整版ppt全套課件最全教學教程整本書電子教案全書教案課件合集
- 《一滴水經過麗江》的課件
- 最新-臨時救助申請審核審批表模板
- 《有效溝通》PPT課件-(2)
- 三級醫院服務能力指南2022
- 家庭室內裝飾裝修工程驗收單
- 青春紅綠燈教學設計中小學心理健康心理游戲腳本
- 《城鎮土地使用稅納稅申報表》
- 三年級數學下冊口算脫式豎式練習題
- 電梯困人救援流程圖
- 大榆樹溝防洪治理工程初步設計報告
評論
0/150
提交評論