第一篇:Java SE考試--編程題總結(jié)
線程和進程的區(qū)別:
(1)進程是運行中的程序,擁有自己獨立的內(nèi)存空間和資源;
(2)一個進程可以有一個或多個線程組成,且至少有一個線程稱為主線程;(3)線程是最小的處理單位,多個線程共享一塊內(nèi)存和資源;
(4)當一個線程改變了所屬進程的變量時,其它線程下次訪問該變量時得到這種改變。簡述什么是多線程。
線程的最主要功能是多任務(wù)處理,即多線程。多線程也就是在主線程中有多個線程在運行,多個線程的執(zhí)行是并發(fā)的,在邏輯上“同時”,而不管是不是物理上的“同時”。
多線程和傳統(tǒng)上的單線程在程序設(shè)計上的區(qū)別在于: 由于各個線程的控制流彼此獨立,使得各個線程之間的代碼是亂序執(zhí)行的,由此帶來的線程調(diào)度、同步等問題是需要重點留意的。
引入線程的優(yōu)點: 充分利用CPU資源。2簡化編程模型。
3簡化異步事件處理。4使GUI更有效率。5節(jié)約成本 線程狀態(tài):
Thread和Runnable區(qū)別:
(1)Thread是類,具有線程的所有方法,其對象就是一個線程對象。但繼承Thread,就不能再繼承其他的類(Java只支持單一繼承)。
(2)Runnable是接口,只提供run()方法。實現(xiàn)該接口的類還可以繼承其他類,但其對象不是線程對象,不能直接運行,必須通過Thread將其啟動。通過Runnable接口創(chuàng)建線程的步驟如下:
1、實例化實現(xiàn)Runnable接口的類;
2、建立一個Thread對象,并將第一步實例化后的對象作為參數(shù)傳入Thread類的構(gòu)造方法;
3、通過Thread類的start()方法建立線程。線程優(yōu)先級:
(1)線程的優(yōu)先級代表該線程的重要程度。
(2)當有多個線程同時處于可執(zhí)行狀態(tài)并等待獲得CPU時間時,線程調(diào)度系統(tǒng)根據(jù)各個線程的優(yōu)先級來決定CPU分配時間。
(3)優(yōu)先級高的線程有更大的機會獲得CPU時間。
(4)線程的默認優(yōu)先級值:Thread.NORM_PRIORITY,值為5。每個新線程均繼承創(chuàng)建線程的優(yōu)先級。setPriority()設(shè)置線程優(yōu)先級。
值為MIN_PRIORITY(1)和MAX_PRIORITY(10)之間的值。getPriority()獲取線程的優(yōu)先級值。線程通信:
(1)線程通信的方法:wait()、notify()和notifyAll()(2)調(diào)用notify()方法時可以隨機選擇一個在該對象調(diào)用wait()方法的線程,解除它的阻 塞。
(3)調(diào)用notifyAll()方法可以喚醒等待該對象的所有線程。但喚醒時無法控制喚醒哪個線程,喚醒過程完全由系統(tǒng)來控制。
(4)notify()方法和notifyAll()方法只能在同步方法或同步塊內(nèi)部使用。產(chǎn)生死鎖的原因主要是:
所謂死鎖,是指兩個或多個線程都在等待對方釋放對象資源而進入的一種不可“調(diào)節(jié)”的狀態(tài)。
1、因為系統(tǒng)資源不足;
2、進程運行推進的順序不合適;
3、資源分配不當?shù)取?/p>
如果系統(tǒng)資源充足,進程的資源請求都能夠得到滿足,死鎖出現(xiàn)的可能性就很低,否則就會因爭奪有限的資源而陷入死鎖。其次,進程運行推進順序與速度不同,也可能產(chǎn)生死鎖。wait()方法區(qū)別于sleep()方法的是:
(1)wait()方法調(diào)用時會釋放對象鎖,而sleep()方法不會(2)sleep()使當前線程進入停滯狀態(tài)(阻塞當前線程),讓出CPU的使用(3)sleep()是Thread類的Static(靜態(tài))的方法;(4)wait()方法是Object類里的方法;wait()使用notify或者notifyAlll或者指定睡眠時間來喚醒當前等待池中的線程。
(5)wait()必須放在synchronized block中,否則會在運行時扔出”java.lang.IllegalMonitorStateException“異常。
通信協(xié)議指網(wǎng)絡(luò)中傳遞、管理信息的一些規(guī)范。TCP/IP協(xié)議,IPX/SPX協(xié)議,NetBEUI協(xié)議等。
TCP/IP協(xié)議
IP協(xié)議:網(wǎng)絡(luò)層協(xié)議,保證計算機之間發(fā)送和接收數(shù)據(jù),能適應(yīng)各種網(wǎng)絡(luò)硬件。無連接,不可靠的協(xié)議。
TCP協(xié)議:端對端的協(xié)議,端與端之間建立連接、發(fā)送、接收數(shù)據(jù)以及終止連接。利用重發(fā)技術(shù)和擁塞控制機制,向應(yīng)用程序提供可靠通信連接。
區(qū)別與聯(lián)系:IP協(xié)議只保證計算機能發(fā)送和接受分組數(shù)據(jù),而TCP協(xié)議則可提供一個可靠的、可流控的、全雙工的信息流傳輸服務(wù)。兩個協(xié)議統(tǒng)稱為TCP/IP協(xié)議。
A類地址:0-126,默認掩碼:255.0.0.0。B類地址:128-191,默認掩碼:255.255。C類地址:192-223,默認掩碼:255.255.255.0。D類地址:廣播地址,E類地址保留。
常用端口以及對應(yīng)的服務(wù) 7:Echo服務(wù)端口
21:FTP服務(wù)端口
23:Telnet服務(wù)端口 25:SMTP服務(wù)端口 80:HTTP服務(wù)端口 網(wǎng)絡(luò)API:
(1)Java中有關(guān)網(wǎng)絡(luò)方面的功能都定義在java.net包中。(2)使用InetAddress類封裝IP地址和域名
(3)URL由四部分組成。協(xié)議名:指明獲取資源所使用的傳輸協(xié)議。主機名:指定獲取資源的域名。端口:指定服務(wù)的端口。文件路徑:指定訪問的文件名以及路徑。URLConnection類:
(1)通過URL的方法openStream()只能從網(wǎng)絡(luò)上讀取數(shù)據(jù),如果如要輸出數(shù)據(jù),就要用到URLConnection類。(2)URLConnection是個抽象類,代表與URL指定的數(shù)據(jù)源的動態(tài)連接。
(3)URLConnection類提供比URL類更強的服務(wù)器交互控制,允許用Post或者Put和其他HTTP請求方法將數(shù)據(jù)送回服務(wù)器。Socket的工作步驟:
1根據(jù)指定的地址和端口創(chuàng)建一個Socket對象。
2調(diào)用getInputStream()方法或getOutputStream()方法打開連接到Socket的輸入/輸出流。3客戶端與服務(wù)器根據(jù)一定的協(xié)議交互,直到關(guān)閉連接。4關(guān)閉客戶端的Socket。ServerSocket的工作步驟:
1根據(jù)指定端口創(chuàng)建一個新的ServerSocket對象。
2調(diào)用ServerSocket的accept()方法,在指定的端口監(jiān)聽到來的連接。Accpet()一直處于阻塞狀態(tài),知道有客戶端試圖建立連接。這時accpet()方法返回連接客戶端與服務(wù)器的Socket對象。
3調(diào)用getInputStream()方法或getOutputStream()方法打開連接到Socket的輸入/輸出流。
4服務(wù)器與客戶端根據(jù)一定的協(xié)議交互,直到關(guān)閉連接。
5關(guān)閉服務(wù)器端的Socket。6回到第2步,繼續(xù)監(jiān)聽下一次的連接。多線程Socket通信實現(xiàn):
服務(wù)器總是在指定的端口監(jiān)聽是否有客戶端請求,一旦監(jiān)聽到客戶請求,服務(wù)器就會啟動一個專門的服務(wù)線程來響應(yīng)客戶請求,而服務(wù)器本身在啟動完線程之后馬上有進入監(jiān)聽狀態(tài),等待下一個客戶的到來。synchronized兩種使用方式:
1.修飾方法,使調(diào)用該方法的線程均能獲得該對象的鎖。2.放在代碼塊中,修飾對象,當前代碼獲得對象的鎖。。鎖定的是對象,而不是方法或代碼塊。
Swing的結(jié)構(gòu):
(1)Swing組件位于javax.swing包中,javax是一個Java擴展包。(2)在javax.swing包中,定義了兩種類型的組件:
頂層容器(不包含在其他容器中的容器,JFrame,JApplet,JDialog和Jwindow 4個)和輕量級組件。
Swing組件都是AWT的Container類的直接子類和間接子類。布局:
(1)用來管理組件在容器中的布局格式。
(2)FlowLayout, BorderLayout, GridLayout和CardLayout四種。位于java.awt包中。(3)FlowLayout流布局一般用來安排面板中的按鈕。它使得按鈕呈水平放置,直到同一條線上再也沒有適合的按鈕。線的對齊方式由align屬性確定。(4)BorderLayout邊界布局,JFrame的默認布局。
(5)GridLayout網(wǎng)格布局,類似于表格,按照行列排列所有組件,每個單元格大小一樣。添加組件使,按照從左至右,自上而下的順序加入。
(6)CardLayout卡片布局,將加入到容器的組件看作一疊卡片,只能看到最上面的組件 常用的事件類:
java.awt.event包中常用的事件類:
ActionEvent, AdjustmentEvent, ItemEvent, FocusEvent, KeyEvent, MouseEvent, WindowEvent。java.awt.event包中常用的監(jiān)聽接口:
ActionListener,AdjustmentListener, ItemListener, FocusListener, KeyListener, MouseListener, WindowListener。適配器:
(1)擴展監(jiān)聽接口時,有些事件處理方法是不需要的,但必須重寫。
(2)出于簡化代碼的目的,java.awt.event包中提供了一個抽象適配器類,分別實現(xiàn)每個具有多個事件處理方法的監(jiān)聽接口。
(3)繼承適配器后,可以僅重寫需要的事件處理方法。事件處理的步驟:
1創(chuàng)建監(jiān)聽類,監(jiān)聽類中,事件處理方法中編寫事件處理代碼 2創(chuàng)建監(jiān)聽對像。
3利用組件的addXXXListener()方法將監(jiān)聽對象注冊到組件上 3者區(qū)別聯(lián)系:
監(jiān)聽類:是一個擴展監(jiān)聽接口的類,可以擴展一個或多個監(jiān)聽接口。
事件處理方法:是監(jiān)聽接口中已經(jīng)定義好的相應(yīng)的事件處理方法,要重寫。監(jiān)聽對象:是監(jiān)聽類的一個實例對象,具有監(jiān)聽功能。
事件用于實現(xiàn)用戶界面的交互,是GUI編程的重要組成部分。Java最新的事件處理方法是基于委派事件模型的。
事件包含3個組件:事件對象、事件源和事件處理程序。
事件是一個描述事件源狀態(tài)改變的對象,不是通過new 創(chuàng)建的,而是由用戶操作觸發(fā)的。一個事件源可能會生成不同類型的事件??梢詫⒁粋€事件發(fā)送到多個監(jiān)聽器對象。
監(jiān)聽類是實現(xiàn)監(jiān)聽接口的類,監(jiān)聽對象是監(jiān)聽類的實例化對象 在組件中注冊監(jiān)聽器的方法是:addXxxxListener()。適配器是實現(xiàn)相關(guān)監(jiān)聽接口的類,目的是簡化程序代碼 創(chuàng)建菜單的步驟:
1創(chuàng)建一個JMenuBar菜單欄對象,將其設(shè)置到窗體中。
2創(chuàng)建若干個JMenu菜單對象,將其放置到JMenuBar對象中,或按要求放到其他JMenu對象中。
3創(chuàng)建若干個JMenuItem菜單項對中,將其放置到對應(yīng)的JMenu對象中。JPopupMenu:彈出式菜單 位置不固定、無標題
(JDialog類)模式對話框:必須首先對該對話框進行響應(yīng)(單擊“確定”或“取消”)后,才能對對話框以外的應(yīng)用程序進行操時;
無模式對話框:可以不響應(yīng)對話框,對其以外的程序進行操作。JTable類--表格模型 TableModel:
TableModel本身是個接口,若要實現(xiàn)此接口建立表格非常復(fù)雜,因此Java提供了兩個類實現(xiàn)了TableModel接口:(1)AbstractTableModel:抽象類,實現(xiàn)了大部分的TableModel方法。AbstractTableModel 類 對 TableModel 接口中大部分方法提供部分實現(xiàn),它關(guān)注監(jiān)聽器的管理,并生成TableModeEvents 事件,以及把他們發(fā)送到監(jiān)聽器提供方便。
(2)DefaultTableModel:繼承AbstractTableModel,是默認的表格模型類。
(3)要創(chuàng)建一個TableModel,可以簡單擴展AbstractTableModel類并且至少實現(xiàn)下列三 個方法 public int getRowCount()、public int getColumnCount()、public Object getValueAt(int row,int column)使用JDBC訪問數(shù)據(jù)庫的基本步驟:
1加載JDBC驅(qū)動程序(Class.forName(“oracle.jdbc.driver.OracleDriver”);)。2建立數(shù)據(jù)庫連接(Class.forName(“oracle.jdbc.driver.OracleDriver”);Connection conn = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”, “scott”, “tiger”);)。3創(chuàng)建Statement對象 4執(zhí)行SQL語句。5 處理返回結(jié)果。6 關(guān)閉創(chuàng)建的對象 Statement中3個執(zhí)行方法的不同:
(1)execute():用于執(zhí)行返回多個結(jié)果集、多個更新計數(shù)或二者的混合。(2)executeUpdate():用于執(zhí)行insert、update、delete語句及SQl DDL語句。插、更、刪效果是修改表中的行或列,返回值一個整數(shù),即影響行數(shù)。對于建立、刪除返回值為0。(3)executeQuery():用于產(chǎn)生單個結(jié)果集的語句,例如select語句。事務(wù)的ACID特性:
數(shù)據(jù)庫中的操作通常是一個獨立單元,事務(wù)是構(gòu)成單一邏輯單位的操作集合。已提交事務(wù)是指成功執(zhí)行完畢的事務(wù),未能成功完成的事務(wù)成為中止事務(wù),對中止事務(wù)造成的變更需要進行撤銷處理,成為事務(wù)回滾。原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durabilily)。
保存點: 集元數(shù)據(jù): 集元數(shù)據(jù) Meta Data,是有關(guān)數(shù)據(jù)庫和表格結(jié)構(gòu)的信息,如數(shù)據(jù)庫的表、表的列、表的索引、數(shù)據(jù)類型、對SQL的支持程度等信息。DatabaseMetaData接口
(1)主要用來得到數(shù)據(jù)庫的信息,如:數(shù)據(jù)庫中所有表格的列表、系統(tǒng)函數(shù)、關(guān)鍵字、數(shù)據(jù)庫產(chǎn)品名和數(shù)據(jù)庫支持的JDBC驅(qū)動名。
(2)通過Connection.getMetaData()方法創(chuàng)建。(3)主要提供了兩大類方法:
1.返回類型boolean的,用于檢查數(shù)據(jù)庫或驅(qū)動器是否支持某項功能。2.用于獲取數(shù)據(jù)庫或驅(qū)動器本身的某些特征值。
通過Statement實現(xiàn)靜態(tài)SQL查詢
使用PreparedStatement實現(xiàn)動態(tài)SQL查詢 使用CallableStatement實現(xiàn)存儲過程的調(diào)用
DatabaseMetaData接口用于得到關(guān)于數(shù)據(jù)庫的信息 ResultSetMetaData接口主要用來獲取結(jié)果集的結(jié)構(gòu) JDBC默認的事務(wù)提交模式是自動提交
通過setAutoCommit()方法控制自動提交模式,使用rollback()方法實現(xiàn)事務(wù)回滾 開發(fā)RMI--步驟: 定義遠程接口。2 實現(xiàn)遠程接口。3 編寫和實現(xiàn)遠程服務(wù)類。4 編寫客戶端程序 RMI機制原理:
2個獨立程序。服務(wù)器端、客戶端 服務(wù)器端:(1)創(chuàng)建多個遠程對象,(2)調(diào)用注冊服務(wù)程序使得名字與遠程對象關(guān)聯(lián),使得這些遠程對象能夠被引用,(3)等待客戶端調(diào)用這些遠程對象的方法??蛻舳耍?/p>
(1)在服務(wù)器上的注冊服務(wù)程序中用遠程對象名稱查找一個或者多個遠程對象的引用,(2)調(diào)用遠程對象的方法。
JOptionPane類中四種對話框的靜態(tài)方法
1消息對話框(showmessagedialog)2輸入對話框(input)3確認對話框(Option)4選項對話框(Confirm)Locale常用定義:
Locale類是用來標識本地化消息的重要工具類。該類包含對主要地理區(qū)域的地域化特征的封裝。通過設(shè)定Locale為特定的國家或地區(qū),提供符合當?shù)匚幕?xí)慣的字體、圖標和表達格式。
簡述java異常處理機制 :
java提供了兩種處理異常的機制:一是捕獲異常,二是聲明拋出異常.在java運行過程中系統(tǒng)得到一個異常對象時,它會沿著方法的調(diào)用棧逐層回溯,尋找處理這個異常的代碼,找到后,系統(tǒng)把當前異常對象教給這個方法處理,這就是捕獲異常.如果方法中不知道如何處理所出現(xiàn)的異常,則可在定義方法時,聲明拋出異常.使用JDBC查詢Scott用戶的emp表中的所有信息? String sql=“select * from emp”;PreparedStatement stmt =conn.prepareStatement(sql);ResultSet rs = stmt.executeQuery();int columnCount = rs.getMetaData().getColumnCount();//這地方補充了一下 while(rs.next()){ for(int i = 1;i <= columnCount;i++){ System.out.println(md.getColumnName(i)+ “--” + rs.getObject(i));} } JDBC API的三個組成部分: 1 JDBC驅(qū)動程序管理器 2 JDBC驅(qū)動程序測試包 3 JDBC-OCBC橋
加載JDBC驅(qū)動程序中加載驅(qū)動程序的一種簡單方法是使用Class.forName方法顯示加載: Class.forName(“DriverName”);對于JDBC/ODBC橋,加載JDBC-ODBC數(shù)據(jù)庫驅(qū)動程序的方法為: Class.forName(“sun.jdnc.odbc.JdbcOdbcDriver”);而對于Oracle數(shù)據(jù)庫,加載數(shù)據(jù)庫驅(qū)動程序的方法為: Class.forName(“oracle.jdbc.driver.OracleDriver”);對于Oracle驅(qū)動連接的是URL是:
Jdbc:oracle:thin:@serverName:port:instance 通過Oracle驅(qū)動獲得數(shù)據(jù)庫連接的實力語句:
Class.forName(“oracle.jdbc.driver.OracleDriver”);Connection conn = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”,”scott”,”tiger”);
多線程Socket通信中多個while循環(huán)是用來監(jiān)聽的。
TableModel本身是一個借口,若是要直接實現(xiàn)此接口來建立表格是非常復(fù)雜的,因此java中還提供了AbstractTableModel和DefaultTableModel這兩個類分別實現(xiàn)TableModel接口。ListSelecyionModel接口中的常量:
static final int SINGLE_SELECTION 單一選擇模式 static final int SINGLE_INTERVAL_SELECTION 連續(xù)區(qū)間選擇模式 static final int MULTIPLE_INTERVAL_SELECTION 多重選擇模式
簡述實現(xiàn)一個自定義的對話框的步驟?
(1)繼承JDialog類,在構(gòu)造方法中傳入?yún)?shù)(2)在對話框中添加用戶界面組件(3)添加事件處理(4)設(shè)置對話框大小
什么是檢查型異常,非檢查型異常
檢查型異常:指編譯器要求必須處置的異常,是程序運行時由于外界因素造成的一般性異常 非檢查型異常:指編譯器不要求強制處理的異常,該異常是因設(shè)計或?qū)崿F(xiàn)方式不當導(dǎo)致的,可以避免這種異常的發(fā)生.簡述一下使用泛型有什么優(yōu)點?
答:泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。Java語言引入泛型的好處是安全簡單。泛型的好處是在編譯的時候檢查類型安全,并且所有的強制轉(zhuǎn)換都是自動和隱式的,提高代碼的重用率。
2.簡要描述ArrayList,Vector,LinkedList的存儲性能和特性? 答:ArrayList支持可隨需要而調(diào)整的動態(tài)數(shù)組。其內(nèi)部封裝了一個動態(tài)再分配的Object[]數(shù)組。每個ArrayList對象有一個capacity,表示存儲列表中元素的數(shù)組的容量。當元素添加到ArrayList時,它的capacity自動增加。在向一個ArrayList對象添加大量元素的程序中,可使用ensureCapacity()方法增加Capacity,此法可以減少或增加重分配的數(shù)量。Vector 由于使用了synchronized 方法(線程安全),通常性能上較ArrayList 差,而LinkedList 使用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)需要進 行前向或后向遍歷,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快。3.簡述Collection和Collections的區(qū)別。
答:java.util.Collection 是一個集合接口集合接口集合接口集合接口。它提供了對集合對象進行基本操作的通用接口方法。Collection接口在Java 類庫中有很多具體的實現(xiàn)。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。java.util.Collections 是一個包裝類。它包含有各種有關(guān)集合操作的靜態(tài)靜態(tài)靜態(tài)靜態(tài)多 態(tài)方法多態(tài)方法多態(tài)方法多態(tài)方法。此類不能實例化不能實例化不能實例化不能實例化,就像一個工具類個工具類個工具類個工具類,服務(wù)于Java的Collection框架。Java代碼。
4、List、Map和Set三個接口,存取元素時,各有什么特點? 答:List 以特定次序來持有元素,可有重復(fù)元素。Set 無法擁有重復(fù)元素,內(nèi)部排序。Map 保存key-value值,value可多值。
5、描述HashMap和Hashtable的區(qū)別。答:Hashtable和HashMap類有三個重要的不同之處。第一個不同主要是歷史原因。Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現(xiàn)。最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是只有HashMap可以讓你將空值作為一個表的條目的key或value。HashMap中只有一條記錄可以是一個空的key,但任意數(shù)量的條目可以是空的value。這就是說,如果在表中沒有發(fā)現(xiàn)搜索鍵,或者如果發(fā)現(xiàn)了搜索鍵,但它是一個空的值,那么get()將返回null。如果有必要,用containKey()方法來區(qū)別這兩種情況。
6、簡述序列化和反序列化概念?
對象的序列化就是把對象寫入到一個輸出流中,對象的反序列化是指從一個輸入流中讀取一個對象。
7、簡述適配器與監(jiān)聽接口的區(qū)別?
區(qū)別:適配器只需要重寫需要的事件處理方法,而監(jiān)聽接口需要實現(xiàn)全部的方法。
監(jiān)聽接口中定義了抽象的事件處理方法,這些方法針對不同的操作進行不同的處理。在程序中,通常使用監(jiān)聽類實現(xiàn)監(jiān)聽接口中的事件處理方法。監(jiān)聽接口定義在java.awt.event包中,該包中提供了不同事件的監(jiān)聽接口,這些接口中定義了不同的抽象的事件處理方法。擴展監(jiān)聽接口時,有些事件處理方法是不需要的,但必須重寫。
處于簡化代碼的目的,java.awt.event包中有提供了一套抽象適配器類,分別實現(xiàn)每個具有多個事件處理方法的監(jiān)聽接口。這樣繼承適配器后,可以僅重寫需要的事件處理方法。
第二篇:javase總結(jié)
建議開發(fā)較大規(guī)模的java應(yīng)用程序都考慮使用mvc模式
首先考慮系統(tǒng)架構(gòu),學(xué)習(xí)使用第三方成熟的jar包,并import到自己的項目中
1、開發(fā)時考慮包的規(guī)劃,model,view層
2、應(yīng)用結(jié)對編程原理進行開發(fā),隨時保證程序的可運行性。(針對接口的編程)
3、編譯調(diào)試代碼,注意異常問題的處理
4、注意javadoc文檔的編寫應(yīng)該和代碼的編寫同步進行
5、Log4j日志的記錄,Junit單元測試工具的使用
6、代碼編寫完畢,將其使用jar打包成可執(zhí)行的jar文件
7、使用Ant自動化編譯測試打包部署工具完成代碼的最終發(fā)布
第三篇:編程題總結(jié)
C作業(yè)匯總
1.short a,b=32767;/*short類型在內(nèi)存中占2B*/ a=b+1;問:a的值是多少?并分析原因。
2.有一4位數(shù)整數(shù),假設(shè)用abcd表示,請把這個4位數(shù)的每個數(shù)位用表達式表示出來。3.從鍵盤輸入圓的半徑r,計算并輸出圓的面積s(要求:半徑r定義為float型;圓周率?定義為符號常量;面積s保留2位小數(shù))#define PI 3.14159 #include
4.輸入m>=3的正整數(shù),判斷m是否素數(shù)。畫出算法流程圖及NS圖
5.有一函數(shù):
x?1 ?x ?y??2x?1 1?x?10
?3x-11 x?10 ?寫一段程序,輸入x,輸出y值。
要求x,y聲明為float類型,y保留2位小數(shù)。#include
if(x<1)
y=x;else
if(x<10)
y=2*x-1;
else
y=3*x-11;
}
printf(“y=%.2fn”,y);
x3x5x7x9?????,6.課后習(xí)題4.17(P159)利用泰勒級數(shù)sinx?x?計算sinx的3!5!7!9!值。要求最后一項的絕對值小于10,并統(tǒng)計出此時累加了多少項。#include
/*記錄每個項數(shù)*/ int n=1,count=0;/*count記錄累加了多少項*/
printf(“請輸入x值(弧度):n”);scanf(“%f”,&x);
term=x/n;while(fabs(term)>1e-5)
/* while循環(huán)*/ {
sinx+=term;
count++;
n+=2;
term=-term*x*x/((n-1)*n);}
/* do
/*do while循環(huán)*/ {
sinx+=term;
count++;
n+=2;
term=-term*x*x/((n-1)*n);}while(fabs(term)>1e-5);
*/
printf(“sin(%.2f)=%.4fn”,x,sinx);printf(“一共累加了:%d項。n”,count);}
7.用牛頓迭代法求下面方程在1.5附近的根:
2x?4x?3x?6?0 32?5
牛頓迭代公式:
x1?x0?f(x0)f?(x0)
#include
/*y1記錄f(x0),y2記錄f(x0)的導(dǎo)數(shù)*/
do {
x0=x1;
y1=2*x0*x0*x0-4*x0*x0+3*x0-6;
y2=6*x0*x0-8*x0+3;
x1=x0-y1/y2;}while(fabs(x1-x0)>1e-5);
printf(“the root is:%.2fn”,x1);}
8.寫一函數(shù),輸入一個16進制整數(shù),輸出相應(yīng)的10進制數(shù)。例:從鍵盤輸入2a,輸出結(jié)果是42。
要求:若輸入數(shù)據(jù)不合法,則輸出提示信息。如輸入了35g,輸出“您輸入的16進制數(shù)不合法!”。
#include
printf(“請輸入一個16進制數(shù)字:n”);
while((c=getchar())!='n'){
if(c>='0' && c<='9')
sum=sum*16+c-'0';
else
if(c>='a' && c<='f')
sum=sum*16+c-87;
else
if(c>='A' && c<='F')
sum=sum*16+c-55;
else
{
printf(“您輸入的16進制不合法.n”);
exit(0);
} }
printf(“相應(yīng)的10進制數(shù)是:%dn”,sum);} 方法2:用字符串處理的方式 #include
printf(“請輸入一個16進制數(shù)字:n”);gets(str);
for(i=0;str[i];i++){
if(str[i]>='0' && str[i]<='9')
sum=sum*16+str[i]-'0';
else
if(str[i]>='a' && str[i]<='f')
sum=sum*16+str[i]-87;
else
if(str[i]>='A' && str[i]<='F')
sum=sum*16+str[i]-55;
else
{
printf(“您輸入的16進制不合法.n”);
exit(0);
} }
printf(“相應(yīng)的10進制數(shù)是:%dn”,sum);} 方法3:用字符數(shù)組及指針處理的方式 #include
{ char str[20],*p=str;int sum=0;
printf(“請輸入一個16進制數(shù)字:n”);gets(p);
while(*p){
if(*p>='0' && *p<='9')
sum=sum*16+*p-'0';
else
if(*p>='a' && *p<='f')
sum=sum*16+*p-87;
else
if(*p>='A' && *p<='F')
sum=sum*16+*p-55;
else
{
printf(“您輸入的16進制不合法.n”);
exit(0);
}
p++;}
printf(“相應(yīng)的10進制數(shù)是:%dn”,sum);} 9.編寫一個小函數(shù),其功能是計算兩個整數(shù)的平均值,該函數(shù)要在主函數(shù)中調(diào)用。
#include
avg=average(x,y);
printf(“%d,%d的平均值是:%.2fn”,x,y,avg);}
float average(int x,int y)
{ return(x+y)/2.0;}
10.有N(N用宏定義為符號常量)個元素的一維整型數(shù)組,該數(shù)組中各元素值從鍵盤隨機輸入。然后,將這個整型數(shù)組中的值逆序存放。例如,原來5個元素的順序為8、1、4、6、5,逆序之后各元素的值是5、6、4、1、8 #define N 5 #include
printf(“輸入%d個整數(shù),用空格或回車分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); printf(“數(shù)組原來的值是:n”);for(i=0;i printf(“%dt”,a[i]); for(i=0;i t=a[i]; a[i]=a[N-1-i]; a[N-1-i]=t;} printf(“n逆序之后數(shù)組的值是:n”);for(i=0;i printf(“%dt”,a[i]); printf(“n”);} 11.有N(N用宏定義為符號常量)個元素的一維整型數(shù)組,該數(shù)組中各元素值從鍵盤隨機輸入。然后,對該數(shù)組元素進行由小到大排序(要求,該功能用函數(shù)實現(xiàn)),輸出數(shù)組中各元素值。最后,從鍵盤隨機輸入一個整數(shù),并把該整數(shù)插入上述數(shù)組中(該功能用函數(shù)實現(xiàn)),使得插入該整數(shù)后的數(shù)組仍然有序,輸出數(shù)組中各元素的值。#define N 5 #include int i,x;void sort(int array[],int n);void insert(int array[],int n,int x); printf(“輸入%d個整數(shù),用空格或回車分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); sort(a,N); /*調(diào)用sort對數(shù)組進行排序*/ printf(“n升序排序之后數(shù)組的值是:n”);for(i=0;i printf(“%d ”,a[i]); printf(“n輸入一個x值插入到數(shù)組中:n”);scanf(“%d”,&x); insert(a,N,x); printf(“n插入%d之后數(shù)組的值是:n”,x);for(i=0;i printf(“%d ”,a[i]); printf(“n”);} void sort(int array[],int n)/*用選擇法對數(shù)組array升序排序*/ { int i,j,t,min; for(i=0;i min=i; for(j=i+1;j if(array[j] min=j; if(min!=i) { t=array[i]; array[i]=array[min]; array[min]=t; } } } void insert(int array[],int n,int x){ int i,pos; for(i=0;i pos=i; for(i=n-1;i>=pos;i--) array[i+1]=array[i]; array[pos]=x;} 12.有一整型數(shù)組,N(N用宏定義為符號常量)個元素,該數(shù)組中各元素值從鍵盤隨機輸入。從鍵盤隨機輸入一個整數(shù)x,刪除該數(shù)組中值與x相同的所有元素(該功能用函數(shù)實現(xiàn)),輸出數(shù)組中各元素的值。#define N 5 #include printf(“輸入%d個整數(shù),用空格或回車分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); printf(“數(shù)組原來的值是:n”);for(i=0;i printf(“%dt”,a[i]); printf(“n請輸入要刪除的值x:n”);scanf(“%d”,&x); n=delet(a,N,x); /*n值是刪除與x相同的元素后,數(shù)組剩余元素的個數(shù)。*/ printf(“刪除%d之后數(shù)組的值是:n”,x);for(i=0;i printf(“%d ”,a[i]); printf(“n”); } int delet(int a[],int n,int x){ int i,j; for(i=0,j=0;i if(a[i]!=x) a[j++]=a[i]; return j;} 13.從鍵盤隨機輸入一字符串,將所有ASCII值為偶數(shù)的字符輸出。例如:輸入abc123,輸出結(jié)果是b2(因為b的ASCII值是98,2的ASCII值是50,其他字符的ASCII值都是奇數(shù)) #include printf(“輸入字符串:n”);gets(str); printf(“ASCII碼是偶數(shù)的字符有:”);for(i=0;str[i];i++) if(str[i]%2==0)putchar(str[i]); printf(“n”);} 14.從鍵盤輸入兩個字符串s1,s2,把s2連接到s1的末尾。不能用strcat函數(shù) #include printf(“輸入兩個字符串,輸入回車鍵結(jié)束:n”);gets(str1);gets(str2); mystrcat(str1,str2); printf(“連接在一起的字符串是:n”);puts(str1); } void mystrcat(char *p1,char *p2){ while(*p1)p1++;while(*p2) *p1++=*p2++;*p1='