計算機語言的種類非常的多,總的來說可以分成機器語言,匯編語言,高級語言三大類。 電腦每做的一次動作,一個步驟,都是按照以經(jīng)用計算機語言編好的程序來執(zhí)行的,程序是計算機要執(zhí)行的指令的集合,而程序全部都是用我們所掌握的語言來編寫的。所以人們要控制計算機一定要通過計算機語言向計算機發(fā)出命令。 計算機所能識別的語言只有機器語言,即由0和1構(gòu)成的代碼。但通常人們編程時,不采用機器語言,因為它非常難于記憶和識別。 目前通用的編程語言有兩種形式:匯編語言和高級語言。 匯編語言的實質(zhì)和機器語言是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的標識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。匯編程序通常由三部分組成:指令、偽指令和宏指令。匯編程序的每一句指令只能對應(yīng)實際操作過程中的一個很細微的動作,例如移動、自增,因此匯編源程序一般比較冗長、復(fù)雜、容易出錯,而且使用匯編語言編程需要有更多的計算機專業(yè)知識,但匯編語言的優(yōu)點也是顯而易見的,用匯編語言所能完成的操作不是一般高級語言所能實現(xiàn)的,而且源程序經(jīng)匯編生成的可執(zhí)行文件不僅比較小,而且執(zhí)行速度很快。 高級語言是目前絕大多數(shù)編程者的選擇。和匯編語言相比,它不但將許多相關(guān)的機器指令合成為單條指令,并且去掉了與具體操作有關(guān)但與完成工作無關(guān)的細節(jié),例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令。同時,由于省略了很多細節(jié),編程者也就不需要有太多的專業(yè)知識。 高級語言主要是相對于匯編語言而言,它并不是特指某一種具體的語言,而是包括了很多編程語言,如目前流行的VB、VC、FoxPro、Delphi等,這些語言的語法、命令格式都各不相同。 高級語言所編制的程序不能直接被計算機識別,必須經(jīng)過轉(zhuǎn)換才能被執(zhí)行,按轉(zhuǎn)換方式可將它們分為兩類: 解釋類:執(zhí)行方式類似于我們?nèi)粘I钪械摹巴暦g”,應(yīng)用程序源代碼一邊由相應(yīng)語言的解釋器“翻譯”成目標代碼(機器語言),一邊執(zhí)行,因此效率比較低,而且不能生成可獨立執(zhí)行的可執(zhí)行文件,應(yīng)用程序不能脫離其解釋器,但這種方式比較靈活,可以動態(tài)地調(diào)整、修改應(yīng)用程序。 編譯類:編譯是指在應(yīng)用源程序執(zhí)行之前,就將程序源代碼“翻譯”成目標代碼(機器語言),因此其目標程序可以脫離其語言環(huán)境獨立執(zhí)行,使用比較方便、效率較高。但應(yīng)用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標文件(* .OBJ)才能執(zhí)行,只有目標文件而沒有源代碼,修改很不方便?,F(xiàn)在大多數(shù)的編程語言都是編譯型的,例如Visual C++、Visual Foxpro、Delphi等。 [NextPage] 學(xué)習(xí)編程,從何入手 如果樓主想學(xué)習(xí)編程,卻又不知從何入手,那么樓主不妨看看下面的幾種學(xué)習(xí)方案,可能會給樓主一些啟示吧! 方案一 Basic語言 Visual Basic 優(yōu)點 (1)Basic 簡單易學(xué),很容易上手。 (2)Visual Basic 提供了強大的可視化編程能力,可以讓你輕松地做出漂亮的程序。 (3)眾多的控件讓編程變得象壘積木一樣簡單。 (4)Visual Basic 的全部漢化讓我們這些見了English就頭大的人喜不自禁。 缺點 (1)Visual Basic 不是真正的面向?qū)ο蟮拈_發(fā)文具。 (2)Visual Basic 的數(shù)據(jù)類型太少,而且不支持指針,這使得它的表達能力很有限。 (3)Visual Basic 不是真正的編譯型語言,它產(chǎn)生的最終代碼不是可執(zhí)行的,是一種偽代碼。它需要一個動態(tài)鏈接庫去解釋執(zhí)行,這使得Visual Basic 的編譯速度大大變慢。 綜述:方案一適合初涉編程的朋友,它對學(xué)習(xí)者的要求不高,幾乎每個人都可以在一個比較短的時間里學(xué)會vB編程,并用VB 做出自己的作品。對于那些把編程當做游戲的朋友來說,VB 是您最佳的選擇。 Basic/Visual Basic簡介 方案二 Pascal語言 Delphi 優(yōu)點 (1)Pascal語言結(jié)構(gòu)嚴謹,可以很好地培養(yǎng)一個人的編程思想。 (2)Delphi是一門真正的面向?qū)ο蟮拈_發(fā)工具,并且是完全的可視化。 (3)Delphi使用了真編譯,可以讓你的代碼編譯成為可執(zhí)行的文件,而且編譯速度非???。 (4)Delphi具有強大的數(shù)據(jù)庫開發(fā)能力,可以讓你輕松地開發(fā)數(shù)據(jù)庫。 缺點 Delphi幾乎可以說是完美的,只是Pascal語言的過于嚴謹讓人感覺有點煩。 綜述: 方案二比較適合那些具有一定編程基礎(chǔ)并且學(xué)過Pascal語言的朋友。 Pascal語言簡介 Delphi簡介 方案三 C語言 Visual C++ 優(yōu)點 (1)C語言靈活性好,效率高,可以接觸到軟件開發(fā)比較底層的東西。 (2)微軟的MFC庫博大精深,學(xué)會它可以讓隨心所欲地進行編程。 (3)VC是微軟制作的產(chǎn)品,與操作系統(tǒng)的結(jié)合更加緊密。 缺點 對使用者的要求比較高,既要具備豐富的C語言編程經(jīng)驗,又要具有一定的WINDOWS編程基礎(chǔ),它的過于專業(yè)溝靡話愕謀喑貪 謎哐 捌鵠椿嵊脅恍〉睦 選 綜述: VC是程序員用的東西。如果你是一個永不滿足的人,而且可以在編程上投入很大的精力和時間,那么學(xué)習(xí)VC你一定不會后悔的。 C語言簡介 方案四 C++語言 C++ Builder 優(yōu)點 (1)C++語言的優(yōu)點全部得以繼承。 (2)完全的可是化。 (3)極強的兼容性,支持OWL、VCL和MFC三大類庫。 (4)編譯速度非???。 缺點 由于推出的時間太短,關(guān)于它的各種資料還不太多。 綜述:我認為C++ Builder 是最好的編程工具。它既保持了C++語言編程的優(yōu)點,又做到了完全的可視化。 C語言簡介 方案五 SQL語言 Power Builder 對于一些傳統(tǒng)的數(shù)據(jù)開發(fā)人員來說,F(xiàn)oxpro系列也許讓他們感到更加熟悉。但是對于初學(xué)者來說,PowerBuilder也許是最好的數(shù)據(jù)庫開發(fā)工具。各種各樣的控件,功能強大的PowerBuilder語言都會幫助你開發(fā)出自己的數(shù)據(jù)庫應(yīng)用程序。 [NextPage] JSP簡介 在Sun正式發(fā)布JSP(Java Server Pages)之后,這種新的Web應(yīng)用開發(fā)技術(shù)很快引起了人們的關(guān)注。JSP為創(chuàng)建高度動態(tài)的Web應(yīng)用提供了一個獨特的開發(fā)環(huán)境。按照 Sun 的說法,JSP能夠適應(yīng)市場上包括Apache WebServer 、IIS4.0在內(nèi)的85%的服務(wù)器產(chǎn)品。 JSP與ASP的簡單比較 JSP與Microsoft的ASP技術(shù)非常相似。兩者都提供在HTML代碼中混合某種程序代碼、由語言引擎解釋執(zhí)行程序代碼的能力。在ASP或JSP環(huán)境下,HTML代碼主要負責(zé)描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。普通的HTML頁面只依賴于Web服務(wù)器,而ASP和JSP頁面需要附加的語言引擎分析和執(zhí)行程序代碼。程序代碼的執(zhí)行結(jié)果被重新嵌入到HTML代碼中,然后一起發(fā)送給瀏覽器。ASP和JSP都是面向Web服務(wù)器的技術(shù),客戶端瀏覽器不需要任何附加的軟件支持。 ASP的編程語言是VBScript之類的腳本語言,JSP使用的是Java,這是兩者最明顯的區(qū)別。 此外,ASP與JSP還有一個更為本質(zhì)的區(qū)別:兩種語言引擎用完全不同的方式處理頁面中嵌入的程序代碼。在ASP下,VBScript代碼被ASP引擎解釋執(zhí)行;在JSP下,代碼被編譯成Servlet并由Java虛擬機執(zhí)行,這種編譯操作僅在對JSP頁面的第一次請求時發(fā)生。 運行環(huán)境 執(zhí)行 JSP 代碼需要在服務(wù)器上安裝 JSP 引擎。此處我們使用的是 Sun 的 JavaServer Web Development Kit ( JSWDK )。為便于學(xué)習(xí),這個軟件包提供了大量可供修改的示例。安裝 JSWDK 之后,只需執(zhí)行 startserver 命令即可啟動服務(wù)器。在默認配置下服務(wù)器在端口 8080 監(jiān)聽,使用 即可打開缺省頁面。 在運行 JSP 示例頁面之前,請注意一下安裝 JSWDK 的目錄,特別是" work "子目錄下的內(nèi)容。執(zhí)行示例頁面時,可以在這里看到 JSP 頁面如何被轉(zhuǎn)換成 Java 源文件,然后又被編譯成 class 文件(即 Servlet )。 JSWDK 軟件包中的示例頁面分為兩類,它們或者是 JSP 文件,或者是包含一個表單的 HTML 文件,這些表單均由 JSP 代碼處理。與 ASP 一樣, JSP 中的 Java 代碼均在服務(wù)器端執(zhí)行。因此,在瀏覽器中使用"查看源文件"菜單是無法看到 JSP 源代碼的,只能看到結(jié)果 HTML 代碼。所有示例的源代碼均通過一個單獨的" examples "頁面提供。 Java Servlet是一種開發(fā)Web應(yīng)用的理想構(gòu)架。 JSP以Servlet技術(shù)為基礎(chǔ),又在許多方面作了改進。JSP頁面看起來象普通HTML頁面,但它允許嵌入執(zhí)行代碼,在這一點上,它和ASP技術(shù)非常相似。利用跨平臺運行的JavaBean 組件,JSP為分離處理邏輯與顯示樣式提供了卓越的解決方案。JSP必將成為ASP技術(shù)的有力競爭者。 [NextPage] SQL語言簡介 SQL全稱是“結(jié)構(gòu)化查詢語言(Structured Query Language)”,最早的是IBM的圣約瑟研究實驗室為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEM R開發(fā)的一種查詢語言,它的前身是SQUARE語言。SQL語言結(jié)構(gòu)簡潔,功能強大,簡單易學(xué),所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應(yīng)用。如今無論是像Oracle ,Sybase,Informix,SQL server這些大型的數(shù)據(jù)庫管理系統(tǒng),還是像Visual Foxporo,PowerBuilder這些微機上常用的數(shù)據(jù)庫開發(fā)系統(tǒng),都支持SQL語言作為查詢語言。 Structured Query Language包含4個部分: 數(shù)據(jù)查詢語言DQL-Data Query Language SELECT 數(shù)據(jù)操縱語言DQL-Data Manipulation Language INSERT, UPDATE, DELETE 數(shù)據(jù)定義語言DQL-Data Definition Language CREATE, ALTER, DROP 數(shù)據(jù)控制語言DQL-Data Control Language COMMIT WORK, ROLLBACK WORK SQL的歷史 在70年代初,E.E.Codd首先提出了關(guān)系模型。70年代中期,IBM公司在研制 SYSTEM R關(guān)系數(shù)據(jù)庫管理系統(tǒng)中研制了SQL語言,最早的SQL語言(叫SEQUEL2)是在1976 年 11 月的IBM Journal of RD上公布的。 1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2 和SQL/DS數(shù)據(jù)庫系統(tǒng)中也實現(xiàn)了SQL。 1986年10月,美國ANSI采用SQL作為關(guān)系數(shù)據(jù)庫管理系統(tǒng)的標準語言(ANSI X3. 135-1986),后為國際標準化組織(ISO)采納為國際標準。 1989年,美國ANSI采納在ANSI X3.135-1989報告中定義的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的SQL標準語言,稱為ANSI SQL 89, 該標準替代ANSI X3.135-1986版本。該標準為下列組織所采納: ● 國際標準化組織(ISO),為ISO 9075-1989報告“Database Language SQL With Integrity Enhancement” ● 美國聯(lián)邦政府,發(fā)布在The Federal Information Processing Standard Publication(FIPS PUB)127 目前,所有主要的關(guān)系數(shù)據(jù)庫管理系統(tǒng)支持某些形式的SQL語言, 大部分數(shù)據(jù)庫打算遵守ANSI SQL89標準。 SQL的優(yōu)點 SQL廣泛地被采用正說明了它的優(yōu)點。它使全部用戶,包括應(yīng)用程序員、DBA管理員和終端用戶受益非淺。 (1) 非過程化語言 SQL是一個非過程化的語言,因為它一次處理一個記錄,對數(shù)據(jù)提供自動導(dǎo)航。SQL允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對單個記錄進行操作,可操作記錄集。所有SQL 語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結(jié)果作為另一條SQL語句的輸入。 SQL不要求用戶指定對數(shù)據(jù)的存放方法。 這種特性使用戶更易集中精力于要得到的結(jié)果。所有SQL語句使用查詢優(yōu)化器,它是RDBMS的一部分,由它決定對指定數(shù)據(jù)存取的最快速度的手段。查詢優(yōu)化器知道存在什么索引,哪兒使用合適,而用戶從不需要知道表是否有索引,表有什么類型的索引。 (2) 統(tǒng)一的語言 SQL可用于所有用戶的DB活動模型,包括系統(tǒng)管理員、數(shù)據(jù)庫管理員、 應(yīng)用程序員、決策支持系統(tǒng)人員及許多其它類型的終端用戶。基本的SQL 命令只需很少時間就能學(xué)會,最高級的命令在幾天內(nèi)便可掌握。 SQL為許多任務(wù)提供了命令,包括: ● 查詢數(shù)據(jù) ● 在表中插入、修改和刪除記錄 ● 建立、修改和刪除數(shù)據(jù)對象 ● 控制對數(shù)據(jù)和數(shù)據(jù)對象的存取 ● 保證數(shù)據(jù)庫一致性和完整性 以前的數(shù)據(jù)庫管理系統(tǒng)為上述各類操作提供單獨的語言,而SQL 將全部任務(wù)統(tǒng)一在一種語言中。 (3) 是所有關(guān)系數(shù)據(jù)庫的公共語言 由于所有主要的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL語言,用戶可將使用SQL的技能從一個RDBMS轉(zhuǎn)到另一個。所有用SQL編寫的程序都是可以移植的。 [NextPage] Java語言簡介 一. Java的由來 當1995年SUN推出Java語言之后,全世界的目光都被這個神奇的語言所吸引。那么Java到底有何神奇之處呢? Java語言其實最是誕生于1991年,起初被稱為OAK語言,是SUN公司為一些消費性電子產(chǎn)品而設(shè)計的一個通用環(huán)境。他們最初的目的只是為了開發(fā)一種獨立于平臺的軟件技術(shù),而且在網(wǎng)絡(luò)出現(xiàn)之前,OAK可以說是默默無聞,甚至差點夭折。但是,網(wǎng)絡(luò)的出現(xiàn)改變了OAK的命運。 在Java出現(xiàn)以前。Internet上的信息內(nèi)容都是一些乏味板的HTML文檔。這對于那些迷戀于WEB瀏覽的人們來說簡直不可容忍。他們迫切希望能在WEN中看到一些交互式的內(nèi)容,開發(fā)人員也極希望能夠在WEB上創(chuàng)建一類無需考慮軟硬件平臺就可以執(zhí)行的應(yīng)用程序,當然這些程序還要有極大的安全保障。對于用戶的這種要求,傳統(tǒng)的編程語言顯得無能為力,面SUN的工程師敏銳地察覺到了這一點,從1994年起,他們開始將OAK技術(shù)應(yīng)用于WEB上,并且開發(fā)出了HotJava的第一個版本。當SUN公司1995年正式以Java這個名字推出的時候,幾乎所有的WEB開發(fā)人員都想到:噢,這正是我想要的。于是Java成了一顆耀眼的明星,丑小鴨一下了變成了白天鵝。 二. Java的定義 Java是一種簡單的,面象對象的,分布式的,解釋的,鍵壯的安全的,結(jié)構(gòu)的中立的,可移植的,性能很優(yōu)異的多線程的,動態(tài)的語言。 Java的開發(fā)環(huán)境有不同的版本,如sun公司的Java Developers Kit, 簡稱 JDK。后來微軟公司推出了支持Java規(guī)范的Microsoft Visual J++ Java開發(fā)環(huán)境,簡稱 VJ++。 三. Java的特點 1. 平臺無關(guān)性 平臺無關(guān)性是指Java能運行于不同的平臺。Java引進虛擬機 原理,并運行于虛擬機,實現(xiàn)不同平臺的Java接口之間。使 用Java編寫的程序能在世界范圍內(nèi)共享。Java的數(shù)據(jù)類型與 機器無關(guān),Java虛擬機(Java Virtual Machine)是建立在 硬件和操作系統(tǒng)之上,實現(xiàn)Java二進制代碼的解釋執(zhí)行功能, 提供于不同平臺的接口的。 2. 安全性 Java的編程類似C++,學(xué)習(xí)過C++的讀者將很快掌握Java的精 髓。Java舍棄了C++的指針對存儲器地址的直接操作,程序 運行時,內(nèi)存由操作系統(tǒng)分配,這樣可以避免病毒通過指 針侵入系統(tǒng)。Java對程序提供了安全管理器,防止程序的 非法訪問。 3. 面向?qū)ο?Java 吸取了C++面向?qū)ο蟮母拍?將數(shù)據(jù)封裝于類中,利用類 的優(yōu)點,實現(xiàn)了程序的簡潔性和便于維護性。類的封裝性、 繼承性等有關(guān)對象的特性,使程序代碼只需一次編譯,然后 通過上述特性反復(fù)利用。程序員只需把主要精力用在類和接 口的設(shè)計和應(yīng)用上。Java 提供了眾多的一般對象的類,通 過繼承即可使用父類的方法。在 Java 中,類的繼承關(guān)系是單一的非多重的,一個子類 只有一個父類,子類的父類又有一個父類。Java 提供的 Object 類及其子類的繼承關(guān)系如同一棵倒立的樹形,根類 為 Object 類, Object 類功能強大,經(jīng)常會使用到它及其 它派生的子類。 4. 分布式 Java建立在擴展TCP/IP網(wǎng)絡(luò)平臺上。庫函數(shù)提供了用HTTP和FTP協(xié)議傳送和接受信息的方法。這使得程序員使用網(wǎng)絡(luò)上的文件和使用本機文件一樣容易。 5. 鍵壯性 Java致力于檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。Java自已操縱內(nèi)存減少了內(nèi)存出錯的可能性。Java還實現(xiàn)了真數(shù)組,避免了覆蓋數(shù)據(jù)的可能。這些功能特征大大提高了開發(fā)Java應(yīng)用程序的周期。Java提供: Null指針檢測、 數(shù)組邊界檢測、 異常出口、 Byte code校驗。 四. Java與C/C++語言 Java提供了一個功能強大語言的所有功能,但幾乎沒有一點含混特征。C++安全性不好,但C和C++被大家接受,所以Java設(shè)計成C++形式,讓大家很容易學(xué)習(xí)。 Java去掉了C++語言的許多功能,讓Java的語言功能很精煉,并增加了一些很有用的功能,如自動收集碎片。 Java去掉了以下幾個C和C++功能: 指針運算 結(jié)構(gòu) typedefs #define 需要釋放內(nèi)存 這將減少了平常出錯的50%。而且,Java很小,整個解釋器只需215K的RAM。 面象對象:Java實現(xiàn)了C++的基本面象對象技術(shù)并有一些增強,(為了語言簡單,刪除了一些功能)。Java處理數(shù)據(jù)方式和用對象接口處理對象數(shù)據(jù)方式一樣。 五. Java與Internet 我們知道,早先的 www 僅可以傳送文本和圖片,Java的出現(xiàn)實現(xiàn)了互動的頁面,是一次偉大的革命。 Java并不是為 Internet,WWW而設(shè)計的,它也可以用來編寫?yīng)毩⒌膽?yīng)用程序。Java 是一種面向?qū)ο笳Z言。Java 語言類似于 C++ 語言,所以已熟練掌握 C++語言的編程人員,再學(xué)習(xí) Java 語言就容易得多!Java 程序需要編譯。實際上有兩種 Java 程序:一種 Java 應(yīng)用程序是一個完整的程序,如 Web 瀏覽器。一種 Java 小應(yīng)用程序是運行于 Web 瀏覽器中的一個程序. Java程序和它的瀏覽器HotJava,提供了可讓你的瀏覽器運行程序的方法。你能從你的瀏覽器里直接播放聲音。你還能播放頁面里的動畫。Java還能告訴你的瀏覽器怎樣處理新的類型文件。當我們能在2400 baud線上傳輸視頻圖象時,HotJava將能顯示這些視頻。 當今Internet的一大發(fā)展趨勢是電子商務(wù),而Internet的安全問題是必須解決的問題,通常大的部門應(yīng)設(shè)置防火墻,阻止非法侵入。 電子商務(wù)是當今的熱門話題,然而傳統(tǒng)的編程語言難以勝任電子商務(wù)系統(tǒng),電子商務(wù)要求程序代碼具有基本的要求:安全、可靠、同時要求能 與運行于不同平臺的機器的全世界客戶開展業(yè)務(wù)。Java以其強安全性、平臺無關(guān)性、硬件結(jié)構(gòu)無關(guān)性、語言簡潔同時面向?qū)ο?,在網(wǎng)絡(luò)編程語言中占據(jù)無可比擬的優(yōu)勢,成為實現(xiàn)電子商務(wù)系統(tǒng)的首選語言。 Java程序被放置在Internet服務(wù)器上,當用戶訪問服務(wù)器時,Java程序被下載到本地的用戶機上,由瀏覽器解釋運行。 [NextPage] PowerBuilder簡介 PowerBuilder的產(chǎn)生 PowerBuilder是美國著名的數(shù)據(jù)庫應(yīng)用開發(fā)工具生產(chǎn)廠商PowerSoft推出的成功產(chǎn)品,其第一版于1991年6月正式投入市場。它是完全按照客戶/服務(wù)器體系結(jié)構(gòu)研制設(shè)計的,采用面向?qū)ο蠹夹g(shù),圖形化的應(yīng)用開發(fā)環(huán)境,是數(shù)據(jù)庫的前端開發(fā)工具。 PowerBuilder的特點 它支持應(yīng)用系統(tǒng)同時訪問多種數(shù)據(jù)庫,其中既包括Oracel,Sybase之類的大型數(shù)據(jù)庫,又包括FOXPRO之類支持ODBC接口的小型數(shù)據(jù)庫,PowerBuilder是完全可視化的數(shù)據(jù)庫開發(fā)工具,它提供了大量的控件,大大加快了項目的開發(fā)速度,也使開發(fā)者更容易掌握數(shù)據(jù)庫的開發(fā)。 它使用的編程語言叫做工PowerScripr,它也是一種高級的,結(jié)構(gòu)化的編程語言。PowerScript提供了一套完整的嵌入式SQL語句,開發(fā)人員可以像使用其它語句一樣自由地使用SQL語言,這樣就大大增強了程序操縱和訪問數(shù)據(jù)庫的能力。可以說PowerBuilder既適合初學(xué)者快速學(xué)習(xí)數(shù)據(jù)庫的開發(fā),又可以讓有經(jīng)驗的開發(fā)人員開發(fā)出功能強大的數(shù)據(jù)庫,是一種適用面非常廣的開發(fā)工具。 PowerBuilder是一個用來進行客戶/服務(wù)器開發(fā)的完全的可視化開發(fā)環(huán)境。使用PowerBuilder,你可以用一種可視的直觀的方式來創(chuàng)建應(yīng)用程序的用戶界面和數(shù)據(jù)庫接口。這是一個總的概念,實際上是開發(fā)人員使用PowerBuilder去開發(fā)應(yīng)用程序,由于所開發(fā)的各種應(yīng)用程序充分利用了圖形用戶接口(GUI)的優(yōu)點,所以PowerBuilder被認為是一個圖形工具。 在客戶/服務(wù)器結(jié)構(gòu)的應(yīng)用中,PowerBuilder具有描述多個數(shù)據(jù)庫連接與檢索的能力。特別是PowerBuilder能從大多數(shù)流行的RDBMS中存取數(shù)據(jù),且不管數(shù)據(jù)存放在什麼地方;另外,各種應(yīng)用程序又可以獨立于RDBMS,因為PowerBuilder可以使用數(shù)據(jù)庫的標準操作語言SQL(結(jié)構(gòu)化查詢語言)進行。 使用PowerBuilder,可以很容易地開發(fā)出功能強大的圖形界面的訪問服務(wù)器數(shù)據(jù)庫的應(yīng)用程序,PowerBuilder提供了建立符合工業(yè)標準的應(yīng)用程序(例如訂單登記、會計及制造系統(tǒng))所需的所有工具。 PowerBuilder應(yīng)用程序由窗口組成,這些窗口包含用戶與之交互的控件。開發(fā)人員可以使用所有標準空間(如按鈕、復(fù)選框、下拉式列表框或編輯框)以及PowerBuilder提供的特殊的使應(yīng)用程序更易于開發(fā)和使用的控件。 通常人們把PowerBuilder看成是一種開發(fā)工具,實際上它比其他工具強得多,是一種強有力的開發(fā)環(huán)境。開發(fā)人員不僅能用它來開發(fā)用戶容易使用的各種應(yīng)用程序還可以通過PowerBuilder修改數(shù)據(jù)庫,利用400多個內(nèi)部定義函數(shù),可以開發(fā)能和其他應(yīng)用程序進行的各種應(yīng)用程序。 PowerBuilder正在成為客戶/服務(wù)器應(yīng)用開發(fā)的標準。相對于其他任何客戶/服務(wù)器開發(fā)環(huán)境,PowerBuilder使開發(fā)人員的工作更快、成本更低、質(zhì)量更高、功能更強。 PowerBuilder為應(yīng)用開發(fā)提供了全面綜合性的支持,可以分別概括為如下幾點: 事件驅(qū)動的應(yīng)用程序 功能強大的編程語言與函數(shù) 面向?qū)ο蟮木幊?跨平臺開發(fā) 開放的數(shù)據(jù)庫連結(jié)系統(tǒng) PowerBuilder開發(fā)環(huán)境 PowerBuilder開發(fā)環(huán)境由一系列集成的圖形畫板(Painter)組成,應(yīng)用開發(fā)人員通過簡單的鼠標操作即可設(shè)計、建立、交互檢驗和測試客戶/服務(wù)器應(yīng)用程序。 [NextPage] Delphi簡介 Delphi這個名字源于古希臘的城市名。它集中了第三代語言的優(yōu)點。以O(shè)bject Pascal為基礎(chǔ),擴充了面向?qū)ο蟮哪芰?,并且完美地結(jié)合了可視化的開發(fā)手段。Delphi自1995年3 月一推出就受到了人們的關(guān)注,并在當年一舉奪得了多項大獎。 Delphi的出現(xiàn)打破了V承可視化編程領(lǐng)域一統(tǒng)天下的局面。并且Delphi使用了本地編譯器直接生成技術(shù),使程序的執(zhí)行性能遠遠高于其它產(chǎn)品生成的程序。它還是真正的面向?qū)ο蟮木幊陶Z言。PASCAL語言的嚴謹加上可視化的優(yōu)勢和強大的數(shù)據(jù)庫功能使得它有充分的資本和微軟的VB叫板。許多人當時都認為Pascal 是最有前途的程序設(shè)計語言,并預(yù)測Delphi將會成為可視化編程的主流環(huán)境。 Delphi在你編好程序后自動轉(zhuǎn)換成.EXE文件它運行時速度比VB快,而且編譯后不需要其他的支持庫就能運行。它的數(shù)據(jù)庫功能也挺強的,是開發(fā)中型數(shù)據(jù)庫軟件理想的編程工具。 Delphi適用于應(yīng)用軟件、數(shù)據(jù)庫系統(tǒng)、系統(tǒng)軟件等類型的開發(fā)。而且它擁有和VB差不多一樣的功能,而且一樣能應(yīng)用API函數(shù),這在控制Windows很有用。 Delphi是全新的可視化編程環(huán)境,為我們提供了一種方便、快捷的Windows應(yīng)用程序開發(fā)工具。它使用了Microsoft Windows圖形用戶界面的許多先進特性和設(shè)計思想,采用了彈性可重復(fù)利用的完整的面向?qū)ο蟪绦蛘Z言(Object-Oriented Language)、當今世界上最快的編輯器、最為領(lǐng)先的數(shù)據(jù)庫技術(shù)。對于廣大的程序開發(fā)人員來講,使用Delphi開發(fā)應(yīng)用軟件,無疑會大大地提高編程效率,而且隨著應(yīng)用的深入,您將會發(fā)現(xiàn)編程不再是枯燥無味的工作——Delphi的每一個設(shè)計細節(jié),都將帶給您一份欣喜。 Delphi的基本形式 Delphi實際上是Pascal語言的一種版本,但它與傳統(tǒng)的Pascal語言有天壤之別。一個Delphi程序首先是應(yīng)用程序框架,而這一框架正是應(yīng)用程序的“骨架”。在骨架上即使沒有附著任何東西,仍可以嚴格地按照設(shè)計運行。您的工作只是在“骨架”中加入您的程序。缺省的應(yīng)用程序是一個空白的窗體(form),您可以運行它,結(jié)果得到一個空白的窗口。這個窗口具有Windows窗口的全部性質(zhì):可以被放大縮小、移動、最大最小化等,但您卻沒有編寫一行程序。因此,可以說應(yīng)用程序框架通過提供所有應(yīng)用程序共有的東西,為用戶應(yīng)用程序的開發(fā)打下了良好的基礎(chǔ)。 Delphi已經(jīng)為您做好了一切基礎(chǔ)工作——程序框架就是一個已經(jīng)完成的可運行應(yīng)用程序,只是不處理任何事情。您所需要做的,只是在程序中加入完成您所需功能的代碼而已。 在空白窗口的背后,應(yīng)用程序的框架正在等待用戶的輸入。由于您并未告訴它接收到用戶輸入后作何反應(yīng),窗口除了響應(yīng)Windows的基本操作(移動、縮放等)外,它只是接受用戶的輸入,然后再忽略。Delphi把Windows編程的回調(diào)、句柄處理等繁復(fù)過程都放在一個不可見的Romulam覆蓋物下面。
公司專注于為企業(yè)提供網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、微信公眾號開發(fā)、商城網(wǎng)站制作,成都微信小程序,軟件定制網(wǎng)站建設(shè)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗,我們會仔細了解各客戶的需求而做出多方面的分析、設(shè)計、整合,為客戶設(shè)計出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)公司更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。
import java.awt.*;//計算器實例
import java.awt.event.*;
public class calculator
{
public static void main(String args[])
{
MyWindow my=new MyWindow("計算器");
}
}
class MyWindow extends Frame implements ActionListener
{ StringBuffer m=new StringBuffer();
int p;
TextField tex;
Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,jia,jian,cheng,chu,deng,dian,qingling,kaifang;
MyWindow(String s)
{
super(s);
//StringBuffer s2=new StringBuffer();
//String s;
tex=new TextField(18);
b0=new Button(" 0 ");
b1=new Button(" 1 ");
b2=new Button(" 2 ");
b3=new Button(" 3 ");
b4=new Button(" 4 ");
b5=new Button(" 5 ");
b6=new Button(" 6 ");
b7=new Button(" 7 ");
b8=new Button(" 8 ");
b9=new Button(" 9 ");
dian=new Button(" . ");
jia=new Button(" + ");
jian=new Button(" - ");
cheng=new Button(" × ");
chu=new Button(" / ");
deng=new Button(" = ");
qingling=new Button(" 清零 ");
kaifang=new Button(" √ ");
setLayout(new FlowLayout());
add(tex);
add(b0);
add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
add(b6);
add(b7);
add(b8);
add(b9);
add(dian);
add(jia);
add(jian);
add(cheng);
add(chu);
add(kaifang);
add(qingling);
add(deng);
b0.addActionListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
jia.addActionListener(this);
jian.addActionListener(this);
cheng.addActionListener(this);
chu.addActionListener(this);
dian.addActionListener(this);
deng.addActionListener(this);
qingling.addActionListener(this);
kaifang.addActionListener(this);
setBounds(200,200,160,280);
setResizable(false);//不可改變大小
setVisible(true);
validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent ee)
{ System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b0)
{
m=m.append("0");
tex.setText(String.valueOf(m));
}
if(e.getSource()==b1)
{
m=m.append("1"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b2)
{
m=m.append("2"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b3)
{
m=m.append("3"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b4)
{
m=m.append("4"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b5)
{
m=m.append("5"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b6)
{
m=m.append("6"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b7)
{
m=m.append("7"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b8)
{
m=m.append("8"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b9)
{
m=m.append("9"); tex.setText(String.valueOf(m));
}
if(e.getSource()==jia)
{
m=m.append("+"); tex.setText(String.valueOf(m));
}
if(e.getSource()==jian)
{
m=m.append("-"); tex.setText(String.valueOf(m));
}
if(e.getSource()==cheng)
{
m=m.append("*"); tex.setText(String.valueOf(m));
}
if(e.getSource()==chu)
{
m=m.append("/"); tex.setText(String.valueOf(m));
}
if(e.getSource()==dian)
{
m=m.append("."); tex.setText(String.valueOf(m));
}
String mm=String.valueOf(m);
int p1=mm.indexOf("+");
int p2=mm.indexOf("-");
int p3=mm.indexOf("*");
int p4=mm.indexOf("/");
if(p1!=-1)
{
p=p1;
}
else if(p3!=-1)
{
p=p3;
}
else if(p2!=-1)
{
p=p2;
}
else if(p4!=-1)
{
p=p4;
}
if(e.getSource()==deng)
{
String m1=mm.substring(0,p);
String m2=mm.substring(p+1);
String ch=mm.substring(p,p+1);
//System.out.println(m1);
//System.out.println(m2);
//System.out.println(ch);
if(ch.equals("+"))
{
float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1+n2;
String su=String.valueOf(sum);
tex.setText(su);
}
if(ch.equals("-"))
{
float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1-n2;
String su=String.valueOf(sum);
tex.setText(su);
}
if(ch.equals("*"))
{
float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1*n2;
String su=String.valueOf(sum);
tex.setText(su);
}
if(ch.equals("/"))
{
float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1/n2;
String su=String.valueOf(sum);
tex.setText(su);
}
}
if(e.getSource()==qingling)
{StringBuffer kk=new StringBuffer();
m=kk;
tex.setText("0");
// System.out.println(mm);
}
if(e.getSource()==kaifang)
{
String t=tex.getText();
float num=Float.parseFloat(t);
double nub=Math.sqrt(num);
tex.setText(String.valueOf(nub));
}
}
}
1、組織與風(fēng)格
(1).關(guān)鍵詞和操作符之間加適當?shù)目崭瘛?/p>
(2).相對獨立的程序塊與塊之間加空行
(3).較長的語句、表達式等要分成多行書寫。
(4).劃分出的新行要進行適應(yīng)的縮進,使排版整齊,語句可讀。
(5).長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首。
(6).循環(huán)、判斷等語句中若有較長的表達式或語句,則要進行適應(yīng)的劃分。
(7).若函數(shù)或過程中的參數(shù)較長,則要進行適當?shù)膭澐帧?/p>
(8).不允許把多個短語句寫在一行中,即一行只寫一條語句。
(9).函數(shù)或過程的開始、結(jié)構(gòu)的定義及循環(huán)、判斷等語句中的代碼都要采用縮進風(fēng)格。
注:如果大家有興趣可以到安安DIY創(chuàng)作室博客,有相關(guān)說明性的文章和解釋。
2、注解
Java 的語法與 C++ 及為相似,那么,你知道 Java 的注釋有幾種嗎?是兩種?
// 注釋一行
/* ...... */ 注釋若干行
不完全對,除了以上兩種之外,還有第三種,文檔注釋:
/** ...... */ 注釋若干行,并寫入 javadoc 文檔
注釋要簡單明了。
String userName = null; //用戶名
邊寫代碼邊注釋,修改代碼同時修改相應(yīng)的注釋,以保證注釋與代碼的一致性。
在必要的地方注釋,注釋量要適中。注釋的內(nèi)容要清楚、明了,含義準確,防止注釋二義性。
保持注釋與其描述的代碼相鄰,即注釋的就近原則。
對代碼的注釋應(yīng)放在其上方相鄰位置,不可放在下面。對數(shù)據(jù)結(jié)構(gòu)的注釋應(yīng)放在其上方相鄰位置,不可放在下面;對結(jié)構(gòu)中的每個域的注釋應(yīng)放在此域的右方;
同一結(jié)構(gòu)中不同域的注釋要對齊。
變量、常量的注釋應(yīng)放在其上方相鄰位置或右方。
全局變量要有較詳細的注釋,包括對其功能、取值范圍、哪些函數(shù)或過程存取它以及存取時注意事項等的說明。
在每個源文件的頭部要有必要的注釋信息,包括:文件名;版本號;作者;生成日期;模塊功能描述(如功能、主要算法、內(nèi)部各部分之間的關(guān)系、該文件與其它文件關(guān)系等);主要函數(shù)或過程清單及本文件歷史修改記錄等。
/**
* Copy Right Information : Neusoft IIT
* Project : eTrain
* JDK version used : jdk1.3.1
* Comments : config path
* Version : 1.01
* Modification history :2003.5.1
* Sr Date Modified By Why What is modified
* 1. 2003.5.2 Kevin Gao new
**/
在每個函數(shù)或過程的前面要有必要的注釋信息,包括:函數(shù)或過程名稱;功能描述;輸入、輸出及返回值說明;調(diào)用關(guān)系及被調(diào)用關(guān)系說明等
/**
* Description :checkout 提款
* @param Hashtable cart info
* @param OrderBean order info
* @return String
*/
public String checkout(Hashtable htCart,
OrderBean orderBean)
throws Exception{
}
javadoc注釋標簽語法
@author 對類的說明 標明開發(fā)該類模塊的作者
@version 對類的說明 標明該類模塊的版本
@see 對類、屬性、方法的說明 參考轉(zhuǎn)向,也就是相關(guān)主題
@param 對方法的說明 對方法中某參數(shù)的說明
@return 對方法的說明 對方法返回值的說明
@exception 對方法的說明 對方法可能拋出的異常進行說明
3、命名規(guī)范
定義這個規(guī)范的目的是讓項目中所有的文檔都看起來像一個人寫的,增加可讀性,減少項目組中因為換人而帶來的損失。(這些規(guī)范并不是一定要絕對遵守,但是一定要讓程序有良好的可讀性)較短的單詞可通過去掉元音形成縮寫;要不然最后自己寫的代碼自己都看不懂了,那可不行。
較長的單詞可取單詞的頭幾發(fā)符的優(yōu)先級,并用括號明確表達式的操作順序,避免使用默認優(yōu)先級。
使用匈牙利表示法
Package 的命名
Package 的名字應(yīng)該都是由一個小寫單詞組成。
package com.neu.util
Class 的命名
Class 的名字必須由大寫字母開頭而其他字母都小寫的單詞組成,對于所有標識符,其中包含的所有單詞都應(yīng)緊靠在一起,而且大寫中間單詞的首字母。
public class ThisAClassName{}
Class 變量的命名
變量的名字必須用一個小寫字母開頭。后面的單詞用大寫字母開頭
userName , thisAClassMethod
Static Final 變量的命名
static Final 變量的名字應(yīng)該都大寫,并且指出完整含義。
/**
*DBConfig PATH
**/
public static final String
DB_CONFIG_FILE_PATH =com.neu.etrain.dbconfig;
參數(shù)的命名
參數(shù)的名字必須和變量的命名規(guī)范一致。
數(shù)組的命名
數(shù)組應(yīng)該總是用下面的方式來命名:
byte[] buffer;
而不是:
byte buffer[];
方法的參數(shù)
使用有意義的參數(shù)命名,如果可能的話,使用和要賦值的字段一樣的名字:
SetCounter(int size){
this.size = size;
}
4、文件樣式
所有的 Java(*.java) 文件都必須遵守如下的樣式規(guī)則:
版權(quán)信息
版權(quán)信息必須在 java 文件的開頭,比如:
/*
* Copyright ? 2000 Shanghai XXX Co. Ltd.
* All right reserved.
*/
其他不需要出現(xiàn)在 javadoc 的信息也可以包含在這里。
Package/Imports
package 行要在 import 行之前,import 中標準的包名要在本地的包名之前,而且按照字母
順序排列。如果 import 行中包含了同一個包中的不同子目錄,則應(yīng)該用 * 來處理。
package hotlava.net.stats;
import java io.*;
import java.util.Observable;
import hotlava.util.Application;
這里 java。io.* 使用來代替InputStream and OutputStream 的。
Class
接下來的是類的注釋,一般是用來解釋類的。
/**
* A class representing a set of packet and byte counters
* It is observable to allow it to be watched, but only
* reports changes when the current set is complete
*/
接下來是類定義,包含了在不同的行的 extends 和 implements
public class CounterSet
extends Observable
implements Cloneable
Class Fields
接下來是類的成員變量:
/**
* Packet counters
*/
protected int[] packets;
public 的成員變量必須生成文檔(JavaDoc)。proceted、private和 package 定義的成
員變量如果名字含義明確的話,可以沒有注釋。
存取方法
接下來是類變量的存取的方法。它只是簡單的用來將類的變量賦值獲取值的話,可以簡單的
寫在一行上。
/**
* Get the counters
* @return an array containing the statistical data. This array has been
* freshly allocated and can be modified by the caller.
*/
public int[] getPackets() { return copyArray(packets, offset); }
public int[] getBytes() { return copyArray(bytes, offset); }
public int[] getPackets() { return packets; }
public void setPackets(int[] packets) { this.packets = packets; }
其它的方法不要寫在一行上
構(gòu)造函數(shù)
接下來是構(gòu)造函數(shù),它應(yīng)該用遞增的方式寫(比如:參數(shù)多的寫在后面)。
訪問類型 (public, private 等.) 和 任何 static, final 或 synchronized 應(yīng)該在一行
中,并且方法和參數(shù)另寫一行,這樣可以使方法和參數(shù)更易讀。
public
CounterSet(int size){
this.size = size;
}
克隆方法
如果這個類是可以被克隆的,那么下一步就是 clone 方法:
public
Object clone() {
try {
CounterSet obj = (CounterSet)super.clone();
obj.packets = (int[])packets.clone();
obj.size = size;
return obj;
}catch(CloneNotSupportedException e) {
throw new InternalError(Unexpected CloneNotSUpportedException: +
e.getMessage());
}
}
類方法
下面開始寫類的方法:
/**
* Set the packet counters
* (such as when restoring from a database)
*/
protected final
void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
throws IllegalArgumentException
{
//
// Ensure the arrays are of equal size
//
if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
throw new IllegalArgumentException(Arrays must be of the same size);
System.arraycopy(r1, 0, r3, 0, r1.length);
System.arraycopy(r2, 0, r4, 0, r1.length);
}
toString 方法
無論如何,每一個類都應(yīng)該定義 toString 方法:
public
String toString() {
String retval = CounterSet: ;
for (int i = 0; i data.length(); i++) {
retval += data.bytes.toString();
retval += data.packets.toString();
}
return retval;
}
}
main 方法
如果main(String[]) 方法已經(jīng)定義了, 那么它應(yīng)該寫在類的底部.
5、代碼可讀性
避免使用不易理解的數(shù)字,用有意義的標識來替代。
不要使用難懂的技巧性很高的語句。
源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰。
6、代碼性能
在寫代碼的時候,從頭至尾都應(yīng)該考慮性能問題。這不是說時間都應(yīng)該浪費在優(yōu)化代碼上,而是我們時刻應(yīng)該提醒自己要注意代碼的效率。比如:如果沒有時間來實現(xiàn)一個高效的算法,那么我們應(yīng)該在文檔中記錄下來,以便在以后有空的時候再來實現(xiàn)她。
不是所有的人都同意在寫代碼的時候應(yīng)該優(yōu)化性能這個觀點的,他們認為性能優(yōu)化的問題應(yīng)該在項目的后期再去考慮,也就是在程序的輪廓已經(jīng)實現(xiàn)了以后。
不必要的對象構(gòu)造
不要在循環(huán)中構(gòu)造和釋放對象
使用 StringBuffer 對象
在處理 String 的時候要盡量使用 StringBuffer 類,StringBuffer 類是構(gòu)成 String 類的基礎(chǔ)。
String 類將 StringBuffer 類封裝了起來,(以花費更多時間為代價)為開發(fā)人員提供了一個安全的接口。當我們在構(gòu)造字符串的時候,我們應(yīng)該用 StringBuffer 來實現(xiàn)大部分的工作,當工作完成后將 StringBuffer 對象再轉(zhuǎn)換為需要的 String 對象。比如:如果有一個字符串必須不斷地在其后添加許多字符來完成構(gòu)造,那么我們應(yīng)該使用StringBuffer 對象和她的 append() 方法。如果我們用 String 對象代替StringBuffer 對象的話,會花費許多不必要的創(chuàng)建和釋放對象的 CPU 時間。大家可以來安安DIY創(chuàng)作室一起討論。
避免太多的使用 synchronized 關(guān)鍵字避免不必要的使用關(guān)鍵字 synchronized,應(yīng)該在必要的時候再使用她,這是一個避免死鎖的好方法。
7、編程技巧
byte 數(shù)組轉(zhuǎn)換到 characters
為了將 byte 數(shù)組轉(zhuǎn)換到 characters,你可以這么做:
Hello world!.getBytes();
Utility 類
Utility 類(僅僅提供方法的類)應(yīng)該被申明為抽象的來防止被繼承或被初始化。
初始化
下面的代碼是一種很好的初始化數(shù)組的方法:
objectArguments = new Object[] { arguments };
枚舉類型
JAVA 對枚舉的支持不好,但是下面的代碼是一種很有用的模板:
class Colour {
public static final Colour BLACK = new Colour(0, 0, 0);
public static final Colour RED = new Colour(0xFF, 0, 0);
public static final Colour GREEN = new Colour(0, 0xFF, 0);
public static final Colour BLUE = new Colour(0, 0, 0xFF);
public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);
}
這種技術(shù)實現(xiàn)了RED, GREEN, BLUE 等可以象其他語言的枚舉類型一樣使用的常量。
他們可以用 '==' 操作符來比較。
但是這樣使用有一個缺陷:如果一個用戶用這樣的方法來創(chuàng)建顏色 BLACK new Colour(0,0,0)
那么這就是另外一個對象,'=='操作符就會產(chǎn)生錯誤。她的 equal() 方法仍然有效。由于這個原因,這個技術(shù)的缺陷最好注明在文檔中,或者只在自己的包中使用。
8、編寫格式
代碼樣式
代碼應(yīng)該用 unix 的格式,而不是 windows 的(比如:回車變成回車+換行)
文檔化
必須用 javadoc 來為類生成文檔。不僅因為它是標準,這也是被各種 java 編譯器都認可的方法。使用 @author 標記是不被推薦的,因為代碼不應(yīng)該是被個人擁有的。
縮進
縮進應(yīng)該是每行2個空格. 不要在源文件中保存Tab字符. 在使用不同的源代碼管理工具時Tab字符將因為用戶設(shè)置的不同而擴展為不同的寬度.如果你使用 UltrEdit 作為你的 Java 源代碼編輯器的話,你可以通過如下操作來禁止保存Tab字符, 方法是通過 UltrEdit中先設(shè)定 Tab 使用的長度室2個空格,然后用 Format|Tabs to Spaces 菜單將 Tab 轉(zhuǎn)換為空格。
頁寬
頁寬應(yīng)該設(shè)置為80字符. 源代碼一般不會超過這個寬度, 并導(dǎo)致無法完整顯示, 但這一設(shè)置也可以靈活調(diào)整. 在任何情況下, 超長的語句應(yīng)該在一個逗號或者一個操作符后折行. 一條語句折行后, 應(yīng)該比原來的語句再縮進2個字符.
{} 對
{} 中的語句應(yīng)該單獨作為一行. 例如, 下面的第1行是錯誤的, 第2行是正確的:
if (i0) { i ++ }; // 錯誤, { 和 } 在同一行
if (i0) {
i ++
}; // 正確, { 單獨作為一行
} 語句永遠單獨作為一行.如果 } 語句應(yīng)該縮進到與其相對應(yīng)的 { 那一行相對齊的位置。
括號
左括號和后一個字符之間不應(yīng)該出現(xiàn)空格, 同樣, 右括號和前一個字符之間也不應(yīng)該出現(xiàn)空格. 下面的例子說明括號和空格的錯誤及正確使用:
CallProc( AParameter ); // 錯誤
CallProc(AParameter); // 正確
不要在語句中使用無意義的括號. 括號只應(yīng)該為達到某種目的而出現(xiàn)在源代碼中。下面的例子說明錯誤和正確的用法:
if ((I) = 42) { // 錯誤 - 括號毫無意義
if (I == 42) or (J == 42) then // 正確 - 的確需要括號
9、代碼編譯
1.編寫代碼時要注意隨時保存,并定期備份,防止由于斷電、硬盤損壞等原因造成代碼丟失。
2.同一項目組內(nèi),最好使用相同的編輯器,并使用相同的設(shè)置選項。
3.合理地設(shè)計軟件系統(tǒng)目錄,方便開發(fā)人員使用。
4.打開編譯器的所有告警開關(guān)對程序進行編譯。
5.在同一項目組或產(chǎn)品組中,要統(tǒng)一編譯開關(guān)選項。
6.使用工具軟件(如Visual SourceSafe)對代碼版本進行維護。如果大家有不明白的可以到安安DIY創(chuàng)作室留言。
10、可移植性
Borland Jbulider 不喜歡 synchronized 這個關(guān)鍵字,如果你的斷點設(shè)在這些關(guān)鍵字的作用域內(nèi)的話,調(diào)試的時候你會發(fā)現(xiàn)的斷點會到處亂跳,讓你不知所措。除非必須,盡量不要使用。
換行
如果需要換行的話,盡量用 println 來代替在字符串中使用\n。
你不要這樣:
System.out.print(Hello,world!\n);
要這樣:
System.out.println(Hello,world!);
或者你構(gòu)造一個帶換行符的字符串,至少要象這樣:
String newline = System.getProperty(line.separator);
System.out.println(Hello world + newline);
PrintStream
PrintStream 已經(jīng)被不贊成(deprecated)使用,用 PrintWrite 來代替它。
public gongnengJF() {
initComponents();
if(MessagePost.getUserPost().equals("職工")){
this.jMenuItem2.setEnabled(false);
里面initComponents什么意思setEnabled是什么?
/*
initComponents()
是你在使用GUI工具設(shè)計GUI界面時,NetBeans系統(tǒng)自動生成的方法。其功能是在界面添加各個組件,并為它們注冊監(jiān)聽器。把initComponents()放在構(gòu)造方法中,目的在于:在主類調(diào)用構(gòu)造方法初始化時,完成了界面的繪制。
setEnabled(false)
是設(shè)置組件是否可用。
為false時,是不可用。
*/
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
new pingcebumen().setVisible(true);
this.setVisible(false);
}
private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
String newpwd=javax.swing.JOptionPane.showInputDialog(rootPane, "輸入新密碼");
String sql="update renyuanlist password ="+newpwd+"where username ='"+MessagePost.getUserName()+"'";
Database db = new Database();
db.executeDML(sql);
}
private void jMenuItem1MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
new ziliao().setVisible(true);
String newpwd = null;
String sql="select * from renyuanlist where password ="+newpwd+"where username ='"+MessagePost.getUserName()+"'";
}
private void jMenu1MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
new ziliao().setVisible(true);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
MessagePost.setUserPost("職工");
new gongnengJF().setVisible(true);
}
});
}
// Variables declaration - do not modify
//私有的成員屬性,定義GUI圖形界面的按鈕,菜單等。
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenuItem jMenuItem3;
private javax.swing.JMenuItem jMenuItem4;
Swing是一組Java程序元件,它能夠創(chuàng)建圖象用戶接口(GUI)元件,如按鈕和滾動條,它們獨立于特定操作系統(tǒng)的開窗口系統(tǒng)。Swing元件使用Java Foundation Classes(JFC)。
new gongnengJF().setVisible(true);
this.setVisible(false);
通過new 創(chuàng)建的對象,與this不是同一個對象。
鼠標監(jiān)聽事件,包括單擊,雙擊等。。。
public class TestStar {
public static void main(String[] args) {
String star = "*";
for (int i = 0; i 5; i++) {
if (i == 0) {
System.out.print(" " + star);
System.out.println();
}
if (i == 1) {
for (int z = 0; z 4; z++) {
System.out.print(" " + star);
}
System.out.println();
}
if (i == 2) {
System.out.print(" ");
for (int x = 0; x 3; x++) {
System.out.print(" " + star);
}
System.out.println();
}
if (i == 3) {
for (int y = 0; y 2; y++) {
System.out.print(" " + star + " ");
}
}
}
}
}
是好使的 但是我沒找到畫五角星有什么規(guī)律(五角星好象不是正規(guī)圖形吧?)如果還有什么要求的話 補充問題(如果是用*填充所有的東西 不包括 “ ”的話 我可以重新再給你寫一個)
Scanner in = new Scanner(System.in);
定義接受從控制臺輸入
System.out.println("What is your name");
控制臺輸出:What is your name
String name = in.nextLine();
開始接收控制臺一行語句并賦值給name
System.out.println("How old are you");
控制臺輸出:How old are you
int age =in.nextLine();
開始接收控制臺一行語句并賦值給int(但是這里寫錯了,應(yīng)該寫成int age =in.nextInt();
nextInt()是接收控制臺輸入的整數(shù),你的age定義為整數(shù)所以用這個,nextLIne接收的是一行語句,可以用String接收)
System.out.println("Hello"+name+",next year.you'll ,you"+(age+1));
輸出:hello后面跟你第一次輸入的一行語句next year.you'll ,you第二次輸入的數(shù)字加1