欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

最小戰(zhàn)斗力Java代碼 最小戰(zhàn)力編程

1道JAVA面向?qū)ο蟮木毩?xí)題,最后不懂!求助!

//防御方法通過輸入?yún)?shù)接收攻擊力,如果攻擊力小于防御力,生命值不受影響,反之傷害值=攻擊力-防御力

成都創(chuàng)新互聯(lián)公司成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元瑪納斯做網(wǎng)站,已為上家服務(wù),為瑪納斯各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792

public void recovery(int attack){

recovery(15) 是你自己本身定義的方法,用來判斷攻擊力和防御能力的大小從而去改變他們的生命值。

比如就你那參數(shù) 15來說。 攻擊是15 防御才10 所以對象會受到15-10=5的傷害

如何寫出好的Java代碼

如何寫出好的Java代碼

1. 優(yōu)雅需要付出代價。

從短期利益來看,對某個問題提出優(yōu)雅的解決方法,似乎可能花你更多的時間。但當(dāng)它終于能夠正確執(zhí)行并可輕易套用于新案例中,不需要花上數(shù)以時計,甚至以天計或以月計的辛苦代價時,你會看得到先前所花功夫的回報(即使沒有人可以衡量這一點)。這不僅給你一個可更容易開發(fā)和調(diào)試的程序,也更易于理解和維護。這正是它在金錢上的價值所在。這一點有賴某種人生經(jīng)驗才能夠了解,因為當(dāng)你努力讓某一段程序代碼變得比較優(yōu)雅時,你并不是處于一種具生產(chǎn)力的狀態(tài)下。但是,請抗拒那些催促你趕工的人們,因為那么做只會減緩你的速度罷了。

2. 先求能動,再求快。

即使你已確定某段程序代碼極為重要,而且是系統(tǒng)的重要瓶頸,這個準(zhǔn)則依然成立。盡可能簡化設(shè)計,讓系統(tǒng)能夠先正確動作。如果程序的執(zhí)行不夠快,再量測其效能。幾乎你總是會發(fā)現(xiàn),你所認為的”瓶頸”其實都不是問題所在。把你的時間花在刀口上吧。

3. 記住”各個擊破”的原理。

如果你所探討的問題過于混雜,試著想像該問題的基本動作會是什么,并假設(shè)這一小塊東西能夠神奇地處理掉最難的部分。這”一小塊”東西其實就是對象–請撰寫運用該對象的程序代碼,然后檢視對象,并將其中困難的部分再包裝成其他對象,依此類推。

4. 區(qū)分class開發(fā)者和class使用者(使用端程序員)。

Class 使用者扮演著”客戶”角色,不需要(也不知道)class的底層運作方式。Class開發(fā)者必須是class設(shè)計專家,并撰寫class,使它能夠盡可能被大多數(shù)新手程序員所用,而且在程序中能夠穩(wěn)當(dāng)執(zhí)行。一套程序庫只有在具備通透性的情況下,使用起來才會容易。

5.當(dāng)你撰寫class時,試著給予明了易懂的名稱,減少不必要的注解。

你給客戶端程序員的接口,應(yīng)該保持概念上的單純性。不了這個目的,當(dāng)函數(shù)的重載(overloading)適合制作出直覺、易用的接口時,請善加使用。

6. 也必你的分析和設(shè)計必須讓系統(tǒng)中的classes保持最少,須讓其Public interfaces保持最少,以及讓這些classes和其他classes之間的關(guān)聯(lián)性( 尤其是base classes)保持最少。

如果你的設(shè)計所得結(jié)果更甚于此,請問問自己,是否其中每一樣?xùn)|西在整個程序生命期中都饒富價值?如果并非如此,那么,維護它們會使你付出代價。開發(fā)團隊的成員都有不維護”無益于生產(chǎn)力提升”的任何東西的傾向;這是許多設(shè)計方法無法解釋的現(xiàn)象。

7. 讓所有東西盡量自動化。先撰寫測試用的程序代碼(在你撰寫class之前),并讓它和class結(jié)合在一起。請使用makefile或類似工具,自動進行測試動作。

通過這種方式,只要執(zhí)行測試程序,所有的程序變動就可以自動獲得驗證,而且可以立即發(fā)現(xiàn)錯誤。由于你知道的測試架構(gòu)所具備的安全性,所以當(dāng)你發(fā)現(xiàn)新的需求時,你會更勇于進行全面修改。請記住,程序語言最大的改進,是來自型別檢查、異常處理等機制所賦予的內(nèi)置測試動作。但這些功能只能協(xié)助你到達某種程度。開發(fā)一個穩(wěn)固系統(tǒng)時,你得自己驗證自己的classes或程序的性質(zhì)。

8. 在你撰寫class之前先寫測試碼,以便驗證你的class 是否設(shè)計完備。如果你無法撰寫測試碼,你便無法知道你的class 的可能長相。撰寫測試碼通常能夠顯現(xiàn)出額外的特性(features)或限制 ( constraints)__它們并不一定總是能夠在分析和設(shè)計過程中出現(xiàn)。測試碼也可做為展示class 用法的示例程序。

9. 所有軟件設(shè)計上的問題,都可以通過”引入額外的概念性間接層(conceptual indirection)”加以簡化。這個軟件工程上的基礎(chǔ)法則是抽象化概念的根據(jù),而抽象化概念正是面向?qū)ο蟪绦蛟O(shè)計的主要性質(zhì)。

10. 間接層(indirection)應(yīng)該要有意義(和準(zhǔn)則-9致)。

這里所指的意義可以像”將共用程序代碼置于惟一函數(shù)”這么簡單。如果你加入的間接層(或抽象化、或封裝等等)不具意義,它可能就和沒有適當(dāng)?shù)拈g接層一樣糟糕。

11. 讓class盡可能微小而無法切割(atomic)。

賦予每個class單一而清楚的用途。如果你的classes或你的系統(tǒng)成長得過于復(fù)雜,請將復(fù)雜的classes切割成比較簡單的幾個classes。最明顯的一個判斷指針就是class的大小:如果它很大,那么它工作量過多的機會就可能很高,那就應(yīng)該被切割。重新設(shè)計class的建議線索是:

1) 復(fù)雜的switch語句:請考慮運用多態(tài)(Polymorphism)。

2) 許多函數(shù)各自處理類型極為不同的動作:請考慮切割為多個不同的(classes)。

12. 小心冗長的引數(shù)列(argument lists)。

冗長的引數(shù)列會使函數(shù)的調(diào)用動作不易撰寫、閱讀、維護。你應(yīng)該試著將函數(shù)搬移到更適當(dāng)?shù)腸lass中,并盡量以對象為引數(shù)。

13. 不要一再重復(fù)。

如果某段程序代碼不斷出現(xiàn)于許多derived class函數(shù)中,請將該段程序代碼置于某個base class 函數(shù)內(nèi),然后在derived class函數(shù)中調(diào)用。這么做不僅可以省下程序代碼空間,也可以讓修改該段程序代碼動作更易于進行。有時候找出此種共通程序代碼還可以為接口增加實用功能。

14. 小心switch語句或成串的if-else 子句。

通常這種情況代表所謂的”type-check coding”。也就是說究竟會執(zhí)行哪一段程序代碼,乃是依據(jù)某種型別信息來做抉擇(最初,確切型別可能不十分明顯)。你通常可以使用繼承和多態(tài)來取代此類程序代碼;Polymorphical method (多態(tài)函數(shù))的調(diào)用會自動執(zhí)行此類型別檢驗,并提供更可靠更容易的擴充性。

15. 從設(shè)計觀點來看,請找出變動的事物,并使它和不變的事物分離。

也就是說,找出系統(tǒng)中可能被你改變的元素,將它們封裝于classes中。你可以在《Thinking in Patterns with Java》(可免費下載于 www. BruceEckel. Com)大量學(xué)習(xí)到這種觀念。

16. 不要利用subclassing來擴充基礎(chǔ)功能。

如果某個接口元素對class而言極重要,它應(yīng)該被放在base class 里頭,而不是直到衍生(derivation)時才被加入。如果你在繼承過程中加入了函數(shù),或許你應(yīng)該重新思考整個設(shè)計。

17. 少就是多。

從class 的最小接口開始妨展,盡可能在解決問題的前提下讓它保持既小又單純。不要預(yù)先考量你的class被使用的所有可能方式。一旦class被實際運用,你自然會知道你得如何擴充接口。不過,一旦class被使用后,你就無法在不影響客戶程序代碼的情況下縮減其接口。如果你要加入更多函數(shù)倒是沒有問題–不會影響既有的客戶程序代碼,它們只需重新編譯即可。但即使新函數(shù)取代了舊函數(shù)的功能,也請你保留既有接口。如果你得通過”加入更多引數(shù)”的方式來擴充既有函數(shù)的接口,請你以新引數(shù)寫出一個重載化的函數(shù);通過 這種方式就不會影響既有函數(shù)的任何客戶了。

18. 大聲念出你的classes,確認它們符合邏輯。

請base class和derived class 之間的關(guān)系是”is-a”(是一種),讓class和成員對象之間的關(guān)系是”has-a”(有一個)。

19. 當(dāng)你猶豫不決于繼承(inheritance)或合成(組合,composition)時,請你問問自己,是否需要向上轉(zhuǎn)型(upcast)為基礎(chǔ)型別。

如果不需要,請優(yōu)先選擇合成(也就是是使用成員對象)。這種作法可以消除”過多基礎(chǔ)型別”。如果你采用繼承,使用者會認為他們應(yīng)該可以向上轉(zhuǎn)型。

20. 運用數(shù)據(jù)成員來表示數(shù)值的變化,運用經(jīng)過覆寫的函數(shù)(overrided method)來代表行為的變化 。

也就是說,如果你找到了某個 class, 帶有一些狀態(tài)變量,而其函數(shù)會依據(jù)這些變量值切換不同的行為,那么你或許就應(yīng)該重新設(shè)計,在subclasses 和覆寫后的函數(shù)(overrided methods)中展現(xiàn)行為止的差異。

21. 小心重載(overloading)。

函數(shù)不應(yīng)該依據(jù)引數(shù)值條件式地選擇執(zhí)行某一段程序代碼。這種情況下你應(yīng)該撰寫兩個或更多個重載函數(shù)(overloaded methods)

22. 使用異常體系(exception hierarchies)

最好是從Java標(biāo)準(zhǔn)異常體系中衍生特定的classes, 那么,捕捉異常的人便可以捕捉特定異常,之后才捕捉基本異常。如果你加入新的衍生異常,原有的客戶端程序仍能通過其基礎(chǔ)型別來捕捉它。

23. 有時候簡單的聚合(aggregation)就夠了。

飛機上的”旅客舒適系統(tǒng)”包括數(shù)個分離的元素:座椅、空調(diào)、視訊設(shè)備等等,你會需要在飛機上產(chǎn)生許多這樣的東西。你會將它們聲明為Private成員并開發(fā)出一個全新的接口嗎?不會的,在這個例子中,元素也是Public接口的一部分,所以仍然是安全的。當(dāng)然啦,簡單聚合并不是一個常被運用的解法,但有時候的確是。

24. 試著從客戶程序員和程序維護的角度思考。

你的class應(yīng)該設(shè)計得盡可能容易使用。你應(yīng)該預(yù)先考量可能性有的變動,并針對這些 可能的變動進行設(shè)計,使這些變動日后可輕易完成。

25. 小心”巨大對象并發(fā)癥”。

這往往是剛踏OOP領(lǐng)域的過程式(procedural)程序員的一個苦惱,因為他們往往最終還是寫出一個過程式程序,并將它們擺放到一個或兩個巨大對象中。注意,除了application framework (應(yīng)用程序框架,譯注:一種很特殊的、大型OO程序庫,幫你架構(gòu)程序本體)之外,對象代表的是程序中的觀念,而不是程序本身。

26. 如果你得用某種丑陋的方式來達成某個動作,請將丑陋的部分局限在某個class里頭。

27. 如果你得用某種不可移植方式來達成某個動作,請將它抽象化并局限于某個class里頭。這樣一個”額外間接層”能夠防止不可移植的部分擴散到整個程序。這種作法的具體呈現(xiàn)便是Bridge設(shè)計模式(design pattern)。

28. 對象不應(yīng)僅僅只用來持有數(shù)據(jù)。

對象也應(yīng)該具有定義明確界限清楚的行為。有時候使用”數(shù)據(jù)對象”是適當(dāng)?shù)模挥性谕ㄓ眯稳萜鞑贿m用時,才適合刻意以數(shù)據(jù)對象來包裝、傳輸一群數(shù)據(jù)項。

29. 欲從既有的classes身上產(chǎn)生新的classes時,請以組合(composition)為優(yōu)先考量。

你應(yīng)該只在必要時才使用繼承。如果在組合適用之處你卻選擇了繼承,你的設(shè)計就滲雜了非必要的復(fù)雜性。

30. 運用繼承和函數(shù)覆寫機制來展現(xiàn)行為上的差異,運用fields(數(shù)據(jù)成員)來展現(xiàn)狀態(tài)上的差異。

這句話的極端例子,就是繼承出不同的classes表現(xiàn)各種不同的顏色,而不使用”color”field.

31. 當(dāng)心變異性(variance)。

語意相異的兩個對象擁有相同的動作(或說責(zé)任)是可能的。OO世界中存在著一種天生的引誘,讓人想要從某個class繼承出另一個subclass,為的是獲得繼承帶來的福利。這便是所謂”變異性”。但是,沒有任何正當(dāng)理由足以讓我們強迫制造出某個其實并不存在的superclass/subclass關(guān)系。比較好的解決方式是寫出一個共用的base class,它為兩個derived classes制作出共用接口–這種方式會耗用更多空間,但你可以如你所盼望地從繼承機制獲得好處,而且或許能夠在設(shè)計上獲得重大發(fā)現(xiàn)。

32. 注意繼承上的限制。

最清晰易懂的設(shè)計是將功能加到繼承得來的class里頭;繼承過程中拿掉舊功能(而非增加新功能)則是一種可疑的設(shè)計。不過,規(guī)則可以打破。如果你所處理的是舊有的class程序庫,那么在某個class的subclass限制功能,可能會比重新制定整個結(jié)構(gòu)(俾使新class得以良好地相稱于舊 class)有效率得多。

33. 使用設(shè)計模式(design patterns)來減少”赤裸裸無加掩飾的機能(naked functionality)”。

舉個例子,如果你的class只應(yīng)該產(chǎn)出惟一一個對象,那么請不要以加思索毫無設(shè)計的手法來完成它,然后撰寫”只該產(chǎn)生一份對象”這樣的注解就拍拍屁股走人。請將它包裝成singleton(譯注:一個有名的設(shè)計模式,可譯為”單件”)。如果主程序中有多而混亂的”用以產(chǎn)生對象”的程序代碼,請找出類似 factory method這樣的生成模式(creational patterns),使價錢可用以封裝生成動作減少”赤裸裸無加掩飾的機能”(naked functionality)不僅可以讓你的程序更易理解和維護,也可以阻止出于好意卻帶來意外的維護者。

34. 當(dāng)心”因分析而導(dǎo)致的癱瘓(analysis paralysis)”。

請記住,你往往必須在獲得所有信息之前讓項目繼續(xù)前進。而且理解未知部分的最好也最快的方式,通常就是實際前進一步而不只是紙上談兵。除非找到解決辦法,否則無法知道解決辦法。Java擁有內(nèi)置的防火墻,請讓它們發(fā)揮作用。你在單一class或一組classes中所犯的錯誤,并不會傷害整個系統(tǒng)的完整性。

35. 當(dāng)你認為你已經(jīng)獲得一份優(yōu)秀的分析、設(shè)計或?qū)崿F(xiàn)時,請試著加以演練。

將團隊以外的某些人帶進來-他不必非得是個顧問不可,他可以是公司其他團隊的成員。請那個人以新鮮的姿態(tài)審視你們的成果,這樣可以在尚可輕易修改的階段找出問題,其收獲會比因演練而付出的時間和金錢代價來得高。實現(xiàn) (Implementation)

36. 一般來說,請遵守Sun的程序編寫習(xí)慣。

價錢可以在以下網(wǎng)址找到相關(guān)文檔:java.sun.com/docs/codeconv/idex.html。本書盡可能遵守這些習(xí)慣。眾多Java程序員看到的程序代碼,都有是由這些習(xí)慣構(gòu)成的。如果你固執(zhí)地停留在過去的編寫風(fēng)格中,你的(程序代碼)讀者會比較辛苦。不論你決定采用什么編寫習(xí)慣,請在整個程序中保持一致。你可以在home.wtal.de/software-solutions/jindent上找到一個用來重排Java程序的免費工具。

37. 無論使用何種編寫風(fēng)格,如果你的團隊(或整個公司,那就更好了)能夠加以標(biāo)準(zhǔn)化,那么的確會帶來顯著效果。這代表每個人都可以在其他人不遵守編寫風(fēng)格修改其作品,這是個公平的游戲。標(biāo)準(zhǔn)化的價值在于,分析程序代碼時所花的腦力較小,因而可以專心于程序代碼的實質(zhì)意義。

38. 遵守標(biāo)準(zhǔn)的大小寫規(guī)范。

將 class名稱的第一個字母應(yīng)為大寫。數(shù)據(jù)成員、函數(shù)、對象(references)的第一個字母應(yīng)為小寫。所有識別名稱的每個字都應(yīng)該連在一塊兒,所有非首字的第一個字母都應(yīng)該大寫。例如: ThisIsAClassName thisIsAMethodOrFieldName 如果你在static final 基本型別的定義處指定了常量初始式(constant initializers),那么該識別名稱應(yīng)該全為大寫,代表一個編譯期常量。 Packages是個特例,其名稱皆為小寫,即使非首字的字母亦是如此。域名(org, net, edu 等等)皆應(yīng)為小寫。(這是Java 1.1遷移至Java 2時的一項改變) 。

39、不要自己發(fā)明”裝飾用的”Private數(shù)據(jù)成員名稱。

通常這種的形式是在最前端加上底線和其他字符,匈牙利命名法(Hungarian notation)是其中最差的示范。在這種命名法中,你得加入額外字符來表示數(shù)據(jù)的型別、用途、位置等等。仿佛你用的是匯編語言(assembly language)而編譯器沒有提供任何協(xié)肋似的。這樣的命名方式容易讓人混淆又難以閱讀,也不易推行和維護。就讓classes和packages來進行”名稱上的范

圍制定(name scoping)”吧。

40、當(dāng)你擬定通用性的class時,請遵守正規(guī)形式(canonical form)。

包括equals( )、hashCode( )、clone( ) ( 實現(xiàn)出Cloneable),并實現(xiàn)出Comparable和Serialiable等等。

41、對于那些”取得或改變Private數(shù)據(jù)值”的函數(shù),請使用Java Beans 的”get”、”set”、”is”等命名習(xí)慣,即使你當(dāng)時不認為自己正在撰寫Java Bean。這么做不僅可以輕易以Bean的運用方式來運用你的class,也是對此類函數(shù)的一種標(biāo)準(zhǔn)命名方式,使讀者更易于理解。

42、對于你所擬定的每一個class,請考慮為它加入static public test( ),其中含有class功能測試碼。

你不需要移除該測試就可將程序納入項目。而且如果有所變動,你可以輕易重新執(zhí)行測試。這段程序代碼也可以做為class的使用示例。

43、有時候你需要通過繼承,才得以訪問base class的protected成員。

這可能會引發(fā)對多重基類(multiple base types)的認識需求。如果你不需要向上轉(zhuǎn)型,你可以先衍生新的class發(fā)便執(zhí)行protected訪問動作,然后在”需要用到上述 protected成員”的所有classes中,將新class聲明為成員對象,而非直接繼承。

44、避免純粹為了效率考量而使用final函數(shù)。

只有在程序能動但執(zhí)行不夠快時,而且效能量測工具(profiler)顯示某個函數(shù)的調(diào)用動作成為瓶頸時,才使用final函數(shù)。

45、如果兩個classes因某種功能性原因而產(chǎn)生了關(guān)聯(lián)(例如容器containers和迭代器iterators),那么請試著讓其中某個class成為另一個class 的內(nèi)隱類(inner class)。

這不僅強調(diào)二者間的關(guān)聯(lián),也是通過”將class名稱嵌套置于另一個class 內(nèi)”而使同一個class 名稱在單一Package中可被重復(fù)使用。Java 容器庫在每個容器類中都定義了一個內(nèi)隱的(inner)Iterator class,因而能夠提供容器一份共通接口。運用內(nèi)隱類的另一個原因是讓它成為private實現(xiàn)物的一部分。在這里,內(nèi)隱類會為信息隱藏帶來好處,而不是對上述的class關(guān)聯(lián)性提供肋益,也不是為了防止命名空間污染問題(namespace pollution)。

46、任何時候你都要注意那些高度耦合(coupling)的 classes.請考慮內(nèi)隱類(inner classes)為程序擬定和維護帶來的好處。內(nèi)隱類的使用并不是要去除classes間的耦合,而是要讓耦合關(guān)系更明顯也更便利。

47、不要成為”過早最佳化”的犧牲品。

那會讓人神經(jīng)錯亂。尤其在系統(tǒng)建構(gòu)初期,先別煩惱究竟要不要撰寫(或避免)原生函數(shù)(native methods)、要不要將某些數(shù)聲明為final、要不要調(diào)校程序代碼效率等等。你的主要問題應(yīng)該是先證明設(shè)計的正確性,除非設(shè)計本身需要某種程度的效率。

48、讓范圍(作用域,scope)盡可能愈小愈好,這么一來對象的可視范圍和壽命都將盡可能地小。

這種作法可降低”對象被用于錯誤場所,因而隱藏難以察覺的臭蟲”的機會。假設(shè)你有個容器,以及一段走訪該容器的程序片段。如果你復(fù)制該段程序代碼,將它用于新的容器身上,你可能會不小心以舊容器的大小做為新容器的走訪上限值。如果舊容器已不在訪問范圍內(nèi),那么編譯期便可找出這樣的錯誤。

49、使用Java 標(biāo)準(zhǔn)程序庫提供的容器。

請熟悉他們的用法。你將因此大幅提升你的生產(chǎn)力。請優(yōu)先選擇ArrayList來處理序列(sequences),選擇HashSet來處理集合(sets)、選擇HashMap來處理關(guān)聯(lián)式數(shù)組(associative arrays),選擇Linkedlist (而不是Stack) 來處理 shacks和queues。

50、對一個強固的(robust)程序而言,每一個組成都必須強固。

請在你所撰寫的每個class中運用Java 提供的所有強固提升工具:訪問權(quán)限、異常、型別檢驗等等。通過這種方式,你可以在建構(gòu)系統(tǒng)時安全地移往抽象化的下一個層次。

51、寧可在編譯期發(fā)生錯誤,也不要在執(zhí)行期發(fā)生錯誤。

試著在最靠近問題發(fā)生點的地方處理問題。請優(yōu)先在”擲出異常之處”處理問題,并在擁有足夠信息以處理異常的最接近處理函數(shù)(handler)中捕捉異常。請進行現(xiàn)階段你能夠?qū)υ摦惓K龅奶幚恚蝗绻銦o法解決問題,應(yīng)該再次擲出異常。

52、當(dāng)心冗長的函數(shù)定義。

函數(shù)應(yīng)該是一種簡短的、”描述并實現(xiàn)class接口中某個可分離部分”的功能單元。過長且復(fù)雜的函數(shù)不僅難以維護,維護代價也高。或許它嘗試做太多事情了。如果你發(fā)現(xiàn)這一類函數(shù),代表它應(yīng)該被切割成多相函數(shù)。這種函數(shù)也提醒你或許得撰寫新的class。小型函數(shù)同樣能夠在你的class中被重復(fù)運用。(有時候函數(shù)必須很大才行,但它們應(yīng)該只做一件事情。)

53、盡可能保持”Private”。

一旦你對外公開了程序庫的概況(method、Class 或field)。你便再也無法移除它們。因為如果移除它們,便會破壞某個現(xiàn)有的程序代碼,使得它們必須重新被編寫或重新設(shè)計。如果你只公開必要部分,那么你便可以改變其他東西而不造成傷害。設(shè)計總是會演化,所以這是個十分重要的自由度。通過這種方式,實現(xiàn)碼的更動對derived class 造成的沖擊會降最低。在多線程環(huán)境下,私密性格外重要-只有private數(shù)據(jù)可受保護而不被un-synchronized(未受同步控制)的運用所破壞。

54、大量運用注解,并使用javadoc的”注解文檔語法”來產(chǎn)生程序的說明文檔。

不過注解應(yīng)該賦予程序代碼真正的意義;如果只是重申程序代碼已經(jīng)明確表示的內(nèi)容,那是很煩人的。請注意,通常Java class和其函數(shù)的名稱都很長,為的便是降低注解量。

55、避免使用”魔術(shù)數(shù)字”,也就是那種寫死在程序代碼里頭的數(shù)字–如果你想改變它們,它們就會成為你的惡夢,因為你永遠都沒有辦法知道”100″究竟代表” 數(shù)組大小”或其他東西。你應(yīng)該產(chǎn)生具描述性的常量度名稱,并在程序中使用該常量名稱。這使程序更易于理解也更易于維護。

56、撰寫構(gòu)造函數(shù)時,請考慮異常狀態(tài)。最好情境下,構(gòu)造函數(shù)不執(zhí)行任何會擲出異常的動作。

次佳情境下,class 只繼承自(或合成自)強固的(robust)classes,所以如有任何異常被擲出,并不需要清理。其他情況下,你就得在finally子句清理合成后的classes。如果某個構(gòu)造函數(shù)一定會失敗,適當(dāng)?shù)膭幼骶褪菙S出異常,使調(diào)用者不至于盲目認為對象已被正確產(chǎn)生而繼續(xù)執(zhí)行。

57、如果你的class需要在”客戶程序員用完對象”后進行清理動作,請將清理動作,放到單一而定義明確的函數(shù)中。最好令其名稱為cleanup() 以便能夠?qū)⒂猛靖嬖V他人。此外請將boolean旗標(biāo)放到class中,用以代表對象是否已被清理,使finalize()得以檢驗其死亡條件(請參考第 4章)。

58、finalize() 只可用于對象死亡條件的檢驗(請參考4章),俾有益于調(diào)試。

特殊情況下可能需要釋放一些不會被垃圾回收的內(nèi)存。因為垃圾回收器可能不會被喚起處理你的對象,所以你無法使用finalize()執(zhí)行必要的清理動作。基于這個原因,你得擬定自己的”清理用”函數(shù)。在class finalize()中,請檢查確認對象的確已被清理,并在對象尚未被清理時,擲出衍生自Runtime Exception 的異常。使用這種架構(gòu)前,請先確認finalize()在你的系統(tǒng)上可正常動作(這可能需要調(diào)用System.gc()來確認)。

59、如果某個對象在某個特定范圍(scope)內(nèi)必須被清理(cleaned up),而不是被垃圾回收機制收回,請使用以下方法;將對象初始化,成功后立刻進入擁有finally子句的一個try區(qū)段內(nèi)。Finally子句會引發(fā)清理動作。

60、當(dāng)你在繼承過程中覆寫了finalize(),請記得調(diào)用super. Finalize()。

但如果你的”直接上一層superclass”是Object,,就不需要這個動作。你應(yīng)該讓super.finalize() 成為被覆寫(overridden)之finalize()的最后一個動作而不是第一個動作,用以確保base class的組件在你需要它們的時候仍然可用。

61、當(dāng)你撰寫固定大小的對象容器,請將它們轉(zhuǎn)換為數(shù)組–尤其是從某個函數(shù)返回此一容器時。

通過這種方式,你可以獲得數(shù)組的”編譯期型別檢驗”的好處,而且數(shù)組接收者可能不需要”先將數(shù)組中的對象加以轉(zhuǎn)型”便能加以使用。請注意,容器庫的base class (Java. Util. Collection) 具有兩個toArray(),能夠達到這個目的。

62、在interface(接口)和abstract class(抽象類)之間,優(yōu)先選擇前者。

如果你知道某些東西即將被設(shè)計為一個base class,你的第一選擇應(yīng)該是讓它成為interface;只有在一定得放進函數(shù)或數(shù)據(jù)成員時,才應(yīng)該將它改為abstract class. Interface只和”客戶端想進行什么動作”有關(guān),class則比較把重心放在實現(xiàn)細節(jié)上。

63、在構(gòu)造函數(shù)中只做惟一必要動作:將對象設(shè)定至適當(dāng)狀態(tài)。

避免調(diào)用其他函數(shù)(除了final函數(shù)),因為這些函數(shù)可能會被其他人覆寫因而使你在建構(gòu)過程中得不可預(yù)期的結(jié)果(請參考第7章以取得更詳細的信息)。小型而簡單的構(gòu)造函數(shù)比較不可能擲出異常或引發(fā)問題。

64、為了避免一個十分令人泄氣的經(jīng)驗,請確認你的classpath中的每個名稱,都只有一個未被放到packages里頭class。否則編譯器會先找到另一個名稱相同的class,并回報錯誤消息。如果你懷疑你的classpath出了問題,試著從classpath中的每個起點查找同名的.class文件。最好還是將所有classes都放到packages里頭。

65、留意一不小心犯下的重載(overloading)錯誤。

如果你覆寫base class 函數(shù)時沒有正確拼寫其名稱,那么便會增加一個新的函數(shù),而不是覆寫原有的函數(shù)。但是情況完全合法,所以你不會從編譯器或執(zhí)行期系統(tǒng)得到任何錯誤消息–你的程序代碼只是無法正確作用,如此而已。

66、當(dāng)心過早最佳化。

先讓程序動起來,再讓它快–但只有在你必須(也就是說只有在程序被證明在某段程序代碼上遭遇效能瓶頸)時才這么做。除非你已經(jīng)使用效能量測工具(profiler)找出瓶頸所在,否則你可能性只是在浪費你的時間。效能調(diào)校的”隱藏成本”便是讓你的程序代碼變得更不可讀、更難維持。

67、記住,程序代碼被閱讀的時間多于它被撰寫的時間。

清晰的設(shè)計能夠制作出去易懂的程序。注解、細節(jié)說明、示例都是無價的。這些東西能夠幫助你和你的后繼者。如果沒有其他信息,那么Java 線上文檔找出一些有用的信息時,你所遭遇的挫敗應(yīng)該足以讓你相信這一點。

用java需要編寫下面這段話。 1.角色可向怪物攻擊,一次攻擊后損失部分HP,當(dāng)HP損失完后,怪

public class Tes {

static int hp = 500;//血量

static int[] wuqi = {20,50,100};//武器

static int gj = 0;//攻擊力

public static void test(){

while (hp0) {//如果血量大于0就繼續(xù)循環(huán)

int wq=(int)(Math.random()*3);//隨機選擇武器

int sjs=(int)(Math.random()*2)+1;//暴擊

gj = wuqi[wq];

if (sjs==2 gj==100) {//如果武器為魔劍且暴擊,攻擊力翻倍

gj = gj*2;

}

hp=hp-gj;//怪物剩余血量

}

System.out.println("怪物已死亡!");

}

public static void main(String[] args) {

Tes.test();

}

}

北大青鳥java培訓(xùn):提升寫Java代碼技能的方法?

對于每個學(xué)Java的朋友來說,其他的技能或許不需要你那么地重視,但是學(xué)Java的技能一定是得十分重視的,對于Java代碼編寫出色的朋友,企業(yè)是一百二十個歡迎的。

Java代碼很大程度上就是一個Java程序員的臉面,那么如何提升寫Java代碼的技能?跟IT培訓(xùn)一起往下看。

如何提升寫Java代碼的技能呢?1目標(biāo),如果你的寫的Java代碼目標(biāo)是超越你自己,那么很容易達成,今天比明天再進步一點,明天比后天再進步一點就好,每天進步一點,那么你就在不斷的超越自己,但是這個很難衡量,關(guān)鍵看你為自己制定的目標(biāo),這個就必須你特別的具有自制力,然后有著超凡的執(zhí)行力。

2.目標(biāo),如果你的寫的Java代碼目標(biāo)是超越別人,那么這個其實也不容易。

你的目標(biāo)人物,首先確定為誰好呢?超越別人,有時候你的心氣很難平,超越別人,但是超越別人,你能做的更好的地方是什么有時候是特別模糊的,所以這個也得好好思考,目標(biāo)人物要選對,方法要對,心態(tài)也得對。

3.提升,首先有個明確的目標(biāo),然后再實際提升Java代碼。

首先是滿足客戶需求寫好你的Java代碼,然后是精益求精修改你的Java代碼,如果只是匆匆忙忙地進入下一個任務(wù)中,那么你不可避免地成為了窮忙族。

代碼寫了,但是并沒有實際效率,Java代碼的編寫,最少寫三次吧。

JAVA小軟件的代碼問題

計算機語言的種類非常的多,總的來說可以分成機器語言,匯編語言,高級語言三大類。 電腦每做的一次動作,一個步驟,都是按照以經(jīng)用計算機語言編好的程序來執(zhí)行的,程序是計算機要執(zhí)行的指令的集合,而程序全部都是用我們所掌握的語言來編寫的。所以人們要控制計算機一定要通過計算機語言向計算機發(fā)出命令。 計算機所能識別的語言只有機器語言,即由0和1構(gòu)成的代碼。但通常人們編程時,不采用機器語言,因為它非常難于記憶和識別。 目前通用的編程語言有兩種形式:匯編語言和高級語言。 匯編語言的實質(zhì)和機器語言是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的標(biāo)識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。匯編程序通常由三部分組成:指令、偽指令和宏指令。匯編程序的每一句指令只能對應(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)語言的解釋器“翻譯”成目標(biāo)代碼(機器語言),一邊執(zhí)行,因此效率比較低,而且不能生成可獨立執(zhí)行的可執(zhí)行文件,應(yīng)用程序不能脫離其解釋器,但這種方式比較靈活,可以動態(tài)地調(diào)整、修改應(yīng)用程序。 編譯類:編譯是指在應(yīng)用源程序執(zhí)行之前,就將程序源代碼“翻譯”成目標(biāo)代碼(機器語言),因此其目標(biāo)程序可以脫離其語言環(huán)境獨立執(zhí)行,使用比較方便、效率較高。但應(yīng)用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標(biāo)文件(* .OBJ)才能執(zhí)行,只有目標(biāo)文件而沒有源代碼,修改很不方便。現(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 做出自己的作品。對于那些把編程當(dāng)做游戲的朋友來說,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)的標(biāo)準(zhǔn)語言(ANSI X3. 135-1986),后為國際標(biāo)準(zhǔn)化組織(ISO)采納為國際標(biāo)準(zhǔn)。 1989年,美國ANSI采納在ANSI X3.135-1989報告中定義的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的SQL標(biāo)準(zhǔn)語言,稱為ANSI SQL 89, 該標(biāo)準(zhǔn)替代ANSI X3.135-1986版本。該標(biāo)準(zhǔn)為下列組織所采納: ● 國際標(biāo)準(zhǔn)化組織(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標(biāo)準(zhǔn)。 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的由來 當(dāng)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)用程序,當(dāng)然這些程序還要有極大的安全保障。對于用戶的這種要求,傳統(tǒng)的編程語言顯得無能為力,面SUN的工程師敏銳地察覺到了這一點,從1994年起,他們開始將OAK技術(shù)應(yīng)用于WEB上,并且開發(fā)出了HotJava的第一個版本。當(dāng)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還能告訴你的瀏覽器怎樣處理新的類型文件。當(dāng)我們能在2400 baud線上傳輸視頻圖象時,HotJava將能顯示這些視頻。 當(dāng)今Internet的一大發(fā)展趨勢是電子商務(wù),而Internet的安全問題是必須解決的問題,通常大的部門應(yīng)設(shè)置防火墻,阻止非法侵入。 電子商務(wù)是當(dāng)今的熱門話題,然而傳統(tǒng)的編程語言難以勝任電子商務(wù)系統(tǒng),電子商務(wù)要求程序代碼具有基本的要求:安全、可靠、同時要求能 與運行于不同平臺的機器的全世界客戶開展業(yè)務(wù)。Java以其強安全性、平臺無關(guān)性、硬件結(jié)構(gòu)無關(guān)性、語言簡潔同時面向?qū)ο螅诰W(wǎng)絡(luò)編程語言中占據(jù)無可比擬的優(yōu)勢,成為實現(xiàn)電子商務(wù)系統(tǒng)的首選語言。 Java程序被放置在Internet服務(wù)器上,當(dāng)用戶訪問服務(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ù)庫的標(biāo)準(zhǔn)操作語言SQL(結(jié)構(gòu)化查詢語言)進行。 使用PowerBuilder,可以很容易地開發(fā)出功能強大的圖形界面的訪問服務(wù)器數(shù)據(jù)庫的應(yīng)用程序,PowerBuilder提供了建立符合工業(yè)標(biāo)準(zhǔn)的應(yīng)用程序(例如訂單登記、會計及制造系統(tǒng))所需的所有工具。 PowerBuilder應(yīng)用程序由窗口組成,這些窗口包含用戶與之交互的控件。開發(fā)人員可以使用所有標(biāo)準(zhǔn)空間(如按鈕、復(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ā)的標(biāo)準(zhǔn)。相對于其他任何客戶/服務(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ā)人員通過簡單的鼠標(biāo)操作即可設(shè)計、建立、交互檢驗和測試客戶/服務(wù)器應(yīng)用程序。 [NextPage] Delphi簡介 Delphi這個名字源于古希臘的城市名。它集中了第三代語言的優(yōu)點。以O(shè)bject Pascal為基礎(chǔ),擴充了面向?qū)ο蟮哪芰Γ⑶彝昝赖亟Y(jié)合了可視化的開發(fā)手段。Delphi自1995年3 月一推出就受到了人們的關(guān)注,并在當(dāng)年一舉奪得了多項大獎。 Delphi的出現(xiàn)打破了V承可視化編程領(lǐng)域一統(tǒng)天下的局面。并且Delphi使用了本地編譯器直接生成技術(shù),使程序的執(zhí)行性能遠遠高于其它產(chǎn)品生成的程序。它還是真正的面向?qū)ο蟮木幊陶Z言。PASCAL語言的嚴謹加上可視化的優(yōu)勢和強大的數(shù)據(jù)庫功能使得它有充分的資本和微軟的VB叫板。許多人當(dāng)時都認為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)、當(dāng)今世界上最快的編輯器、最為領(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覆蓋物下面。

分享文章:最小戰(zhàn)斗力Java代碼 最小戰(zhàn)力編程
網(wǎng)頁URL:http://chinadenli.net/article28/hihijp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷建站公司電子商務(wù)商城網(wǎng)站網(wǎng)站排名網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)