-
從C++轉到Java需注意的地方
1.Java在虛擬機上運行 Java源代碼並不是被編譯成為普通的機器代碼。而是被翻譯成為虛擬機可以執行的代碼。一個Java解釋器最終執行這些代碼。這其中沒有連接的過程;解釋在需要的時候動態的加載一些類; 2.Java是完全面向對象的 Java是一種完全面向對象的語言。這意味著你對任何一個Java對象所做的動作都是通過一個方法實現的。第一點就是,再也沒有沒有主函數這樣的孤立的東西了。取而代之的是,你必須開始用一個對象的看法看待一個程序,一個類的對象。但是這個對象又什麼對象呢?大多數Java程序只是簡單的通過繼承Java基礎類Object來實現所需要的東西,但是你可以通過創建程序基礎類用於多個特性相似的應用程序來節省時間。 嚴格的面向對象的規定意味著理用原有的C/C++代碼不可以直接不加改動的使用;系統調用也是這樣的。 C++中,你可以通過在C++正常的命名空間外聲明extern”C”來使用原有的C的過程調用,包括系統調用 在Java中,只有一個類似的安全回溯的方法,但是並不是十分簡單的方法。你必須定義一個本地方法,其目的是為C語言提供接口,然後提供連接的介質。 Java環境提供了完成這種任務的工具,但是整個過程和C++中提供的extern比微不足道,完成使用C++類的過程則更加複雜,因為這樣會引入對C的藉口和C函數和C++成員函數的問題。 幸運的是,許多常用的系統實用工具函數已經在系統類中的方法中提供出來,但是這些明顯沒有包含經過許多年來你所創建的那些類和過程。所以,在你需要的時候你應該去鑽研一下。 3.Java中沒有獨立的頭文件 在Java中,關於類的一切東西都被放到一個單獨的文件中。方法的位置只可能在一個地方出現,一個方法的實現必須在它的定義過程中同時進行。這樣做得優點是在實現程序的時候不容易因為文件的非同步錯誤而失敗,或者獲取到一個沒有實現的聲明。類的聲明可以被Java解釋器利用甚至是從一個編譯過的單元中獲取,所以不再需要有頭文件,只要有編譯過的文件。 這樣做的缺點與我們編程的過程有關。許多C++程序員喜歡用頭文件來代替文檔。要看一個成員函數的接口參數,只需要看頭文件中的聲明即可。你可以經常的看頭文件即可了解怎樣去使用這個類。在Java中,沒有這樣的總結。因為實現類方法的代碼必須在方法定義的時候出現,而且,對於一個單獨的函數的代碼來說就經常佔據了一整頁乃至更多。這樣,很難通過看Java的代碼就初步了解類是怎樣使用的。你必須為你需要的類準備足夠多的文檔。不言而喻,再處理非商業類庫的時候文檔是極度缺乏的。 在當先的Java環境中提供了兩個工具來補償這些,javap來打印類標識,javadoc為嵌入式程序提供HTML文檔。 4.用Package來分解Java命名空間 在大的C++工程中經常遇到的一個問題是命名空間–怎樣保證工程的一些程序員不會創建和另一些程序員一樣名字的類?更糟糕的是,供應商可能會提供一個包含和你的類一樣名字的類的庫。有許多方法可以解決這一問題,但是很可能在問題發現之前工程已經啟動,改正錯誤是需要付出許多痛苦的。 Java通過”Package”這個概念解決了這個問題,Package有效地通過通過集合類劃分了命名空間。在不同包內的兩個同名的類仍然是不同的。關鍵問題就變成了類是否放置到相應的包中。 記住,Java並沒有解決命名衝突的問題。擴展一個基類而引起了派生類的衝突。比如說,如果你最喜歡的供應商提供了一些類,然後你把它們用做基類並且派生有一個foo方法的類,當供應商提供一個新版本的類的時候就可能出現,如果供應商業也在新類中提供了一個foo的方法。 5.異常是Java的重要特性 在C++中,異常和異常處理是十分深奧的事情;許多C++程序員從沒有處理過它們甚至不知道它們是何物。異常是在正常的過程中出現的未預料的錯誤,因此,它們不會從方法中返回,或者作為參數傳入;但是,它們不能被忽略!這裡的一個例子是計算一個書的方根的方法。正常的接口形式是將一個正數作為參數傳入方法,然後方法會返回一個正實數作為結果,方法可以檢驗這些並且在異常產生的時候拋出異常。在大多數係統中,程序員並不是必須這樣做,這樣,一個沒有考慮到的異常可以使程序不正常的退出。 在Java中,異常已經成為語言中非常成熟的部分。方法的說明中就包含了異常的信息,程序處理器也強制檢驗如果你使用了一個能夠產生異常的方法,你就必須檢查異常是否發生。幾乎所有的Java程序員都會遇到異常的情況,因為許多非常有用的庫中的類都會拋出異常。處理異常並不難,但是在一些時候是需要注意的。一個方法的文檔會指明方法拋出的異常的類型。如果你忘了,不要緊,編譯器會提醒你的。 6.字符串不再是字符數組 Java中包括了一個字符串的對象,並且是個常量。字符串不像字符數組一樣,雖然可以簡單的從一個字符數組構造一個字符串。你應該盡可能的用字符串代替字符數組,因為他們不會因為誤操作而被覆蓋。 7.Java限制了常量對象和方法 在C++中,你可以正式的聲明一個函數參數或者函數返回值為const類型,這樣可以有效的防止對參數或者返回值的不正當修改。另外,你可以聲明一個成員函數為const,表明它不可以修改任何他操作的對象。 Java支持常量操作符,只讀變量,這些通過final關鍵字實現。但是Java沒有支持強制的使一個可寫變量在函數傳遞、返回的過程中變為只讀。或者定義一個不操作修改對象的常量方法。 在Java中,這個省略帶來的影響和在C++中相比就非常小了,這很大程度上因為字符串變量和字符數組的不同,但是這也帶來一個引起錯誤的隱患。特別地,沒有辦法檢驗一個方法是否可以改動對象。 8.Java沒有指針 理解指針的概念是一個C或C++程序員最難應付的問題。指針也是錯誤產生的一大根源。 Java中沒有指針,對象的句柄直接作為參數傳遞,而不是傳遞指針。另外,你必須通過索引使用數組。這些都不是什麼大問題。然而,沒有指針是在寫含有函數指針或者成員函數指針的系統的時候引起很大麻煩。這個問題在處理回調函數的時候更加顯著。 9.Java沒有參數化類型 參數化類型提供了用一段程序處理許多相似程序的方法。一個例子就是開平方根的方法,它可以對int或者float操作。在C++中,這一特性是由模板提供的。 Java中不包含C++中的模板的等價物。如果你經常使用模板來簡化程序,比如說構造許多使用相似參數類型的函數,這簡直就是災難。這意味著更多使用複制、粘貼的過程來手動的完成。然而,如果你使用模板來生成類的話,沒有簡單的方法。 10.Java使用垃圾回收 在垃圾回收的語言中,運行時環境一直監測哪些內存不被使用。當一塊內存不用的時候,系統自動的回收內存。比如說,一個對像在一個方法中生成,但是沒有被調用著返回或者沒有儲存為全局變量,不能在方法外部使用。系統自己會知道哪些變量是你用不到的,哪些是可以用到的。因此,你不必再為破壞對象回收內存而擔心。在C++中,很多的調試時間都被使用到檢查內存漏洞中。 Java的這種方法很大程度上降低了這種錯誤的可能。但是他依然不能處理邏輯混亂的程序,他們不能夠被回收。許多C++的類中的析構函數是用來釋放對象引用的內存的。 Java使垃圾回收的事實說明在Java中不是必需寫析構函數了。但是並不意味著你可以忘記為你的類寫析構函數。比如,一個對像打開了網絡連接就必須被恰當的清理來關閉這個連接。在Java中,析構函數被稱作”finalization”方法。 11.Java不支持多重繼承 在任何一個複雜的面向對象的系統中,實現一個有更多方法的新類是十分經常遇到的事情。比如說,一個Manager類,需要被作為一個連表的表頭,但是一個Manager又必須是一個Employee。有許多方法來處理這樣的問題。一個方法是允許從多個類繼承。在這個例子中,Manager需要從Linked List和Employee繼承。 Java沒有多重繼承。但是你可以聲明接口–來描述實現一些功能的編程接口。一個類可以由多個接口實現,包括他唯一的功能。不同的類可以由同樣的接口實現。方法的參數既可以聲明為類,也可以聲明為接口。如果是接口的話,實現接口的類就可以作為參數傳入方法。 接口的概念要比多繼承容易理解一些,但是他有一定的局限性。特別地,你必須在類中實現接口的時候編碼去重新實現類的功能。 12.Java支持多線程 多線程可以使你寫出在同一時刻完成多種任務的程序。比如說,你可以在完成讀取一個大文件之間允許用戶對已經讀取的部分進行編輯。你需要把程序分為多線程來執行。為安全起見。你的程序要被精心的設計,因為可能不止一個線程需要對數據進行訪問、修改。 Java開始就支持多線程。類和接口用來分解一個程序成為不同的線程。語言簡單的對重要的數據作同步或者鎖定處理。 13.Java以一些預定義的類為基礎 默認的Java環境中包括一些從Java基礎類實現而來的一些包。這些允許你很快的寫出一些有用的程序,這些包如下: java.awt:當今許多應用程序都非常依賴GUI,java提供了一個Abstract Window Toolkid,這可以讓你在不考慮運行平台的前提下處理GUI對象。 java.applet:applet的主要目的是提供瀏覽有關的內容。它本身是awt組件的字類並且支持其他一些特性,比如聲音、渲染等。 java.io:java.io提供了對流、文件、管道的讀寫操作。 java.lang:提供了java的基礎類Objcet,Integar,Float……; java.net:提供對網絡編程的支持。包括處理socket,URL,Internet尋址等。…
-
Sun 310-065 information
This foundation certification is for programmers interested in demonstrating proficiency in the fundamentals of the Java programming language. To achieve this certification, candidates must successfully complete one exam. It is not necessary to be a Sun Certified Java Associate prior to taking this exam. The Sun Certified Programmer for Java Platform, Standard Edition 6 certification…
-
SUN 系列認證
Sun認證的種類 為了給業界建立壹套認證的標準,Sun公司推出了Java以及Solaris技術認證方案。對於企業而言,可以借助這項認證作為招聘人才的評判標準,或是作為衡量員工技術水準的依據;在個人方面,通過這些認證也可以證明個人的技術能力。目前Sun在中國推出的認證考試項目如下(在全球範圍中的要多壹些,具體可以慘見:http://suned.sun.com/certification.html 1.Java認證考試 該認證主要面對Java程序員。同時,該認證是業界唯壹經Sun授權的Java認證,考試內容涉及所有Java相關知識、編程概念及applet開發技巧。Sun認證Java程序員考試旨在觀察您通過應用軟件分配進行復雜編程的能力,之後還要測試您完成編程所需的知識。每次考試都包括65道以上的選擇題,時間大約為90分鐘。目前在這方面有兩項認證:Sun Certified Java Programmer(SCJP)310-065 和 SunCertifiedJava Developer (SCJD)。SCJP測驗Java程序設計概念及能力,內容偏重於Java語法及JDK的內容;SCJD則進壹步測試用Java開發應用程序的能力,考試者必須先完成壹個程序的設計方案,再回答與此方案相關的壹些問題。 2.Solaris系統管理認證考試 對Solaris/SunOS系統管理員,Sun推出CertifiedSolarisAdministrator(CSA)。CSA分別為兩個等級(PartⅠ和PartⅡ),測試對Solaris系統管理的了解程度。 3.Solaris網酪管理認證考試 為了測試使用者對於Solaris網酪管理能力,Sun推出CertifiedNetworkAdministrator(CNA)。內容包括基本網酪概念、RoutingandSubnet、Security、Performance、DNS、NIS+等。通過SUN任何壹門專業認證後,考生將收到SunMicrosystems總公司寄發的資格證書及徽章,並有權將通過Sun認證的標記印在個人名片上,作為個人技術能力的肯定。
-
JAVA學習資料
要想深入理解“容器”的概念需要我們首先理解“容器”的宏觀框架——容器框架。容器框架從宏觀角度為我們描述了壹個“容器”的世界,告訴我們在Java的容器世界中有哪些 “容器”、它們之間的關系如何、它們是什麽樣子、它們如何使用。總之,容器框架就是壹個用於表示操作集合的統壹的體系結構,容器框架包含以下元素: q 接口——它們代表容器類型的抽象數據類型。SCJP 整個Java容器類的基礎後來是容器接口(例如Collection,Map等接口),而不是類。使用接口的最大好處在於將容器的實現與容器的接口分開,這就意味著妳可以使用相同的方法訪問容器而不用關心容器是由什麽樣的數據結構實現的,即接口允許操作容器和不涉及容器所代表的細節。在面向對象的語言中,這些接口壹般組成壹個層次結構。 q 實現—— 它們是容器接口的具體實現。 q 算法—— 它們是在實現集合接口對象上執行運算的方法,如搜索和排序。這些算法被稱為多態的,也就是說,相同的方法可以用於處理某種接口的許多種不同的實現,算法就是可重用的功能。 相比較傳統的容器框架——例如C++的標準模板庫(Standard Template Library)和Smalltalk 的層次結構,Java的容器框架結構清晰,容易掌握。 圖6.1是容器框架中接口以及實現的之間的集成關系圖,它對我們學習Java中大量容器類型是很有幫助的。點線箭頭代表特定的類實現(Implements)壹個接口(若是抽象類,則表示部分實現了接口)。虛線線箭頭表示壹個類可以生成(Produce)箭頭所指向類的對象,例如,任意的Collection可以生成Iterator,而List可以生成ListIterator(當然,也能生成普通的Iterator)。實線箭頭表示類間的繼承(Inheritate)關系。 要想深入理解“容器”的概念需要我們首先理解“容器”的宏觀框架——容器框架。容器框架從宏觀角度為我們描述了壹個“容器”的世界,告訴我們在Java的容器世界中有哪些 “容器”、它們之間的關系如何、它們是什麽樣子、它們如何使用。總之,容器框架就是壹個用於表示操作集合的統壹的體系結構,容器框架包含以下元素: q 接口——它們代表容器類型的抽象數據類型。整個Java容器類的基礎後來是容器接口(例如Collection,Map等接口),而不是類。使用接口的最大好處在於將容器的實現與容器的接口分開,這就意味著妳可以使用相同的方法訪問容器而不用關心容器是由什麽樣的數據結構實現的,即接口允許操作容器和不涉及容器所代表的細節。在面向對象的語言中,這些接口壹般組成壹個層次結構。 q 實現—— 它們是容器接口的具體實現。 q 算法—— 它們是在實現集合接口對象上執行運算的方法,如搜索和排序。這些算法被稱為多態的,也就是說,相同的方法可以用於處理某種接口的許多種不同的實現,算法就是可重用的功能。 相比較傳統的容器框架——例如C++的標準模板庫(Standard Template Library)和Smalltalk 的層次結構,Java的容器框架結構清晰,容易掌握。 圖6.1是容器框架中接口以及實現的之間的集成關系圖,它對我們學習Java中大量容器類型是很有幫助的。點線箭頭代表特定的類實現(Implements)壹個接口(若是抽象類,則表示部分實現了接口)。虛線線箭頭表示壹個類可以生成(Produce)箭頭所指向類的對象,例如,任意的Collection可以生成Iterator,而List可以生成ListIterator(當然,也能生成普通的Iterator)。實線箭頭表示類間的繼承(Inheritate)關系。
-
SCJP考試心得
壹、準備: 開始沒有打算考SCJP,後來公司說要考,考過後報賬,所以才決定去試試。開始對SCJP根本不了解,所以在google上搜索了很多資料。其中在電驢上下到了壹個SCJP.iso,有266m,是壹個兄弟歸納,搜集的。裏面有很詳細的資料,包括各種電子書,模擬器,以及模擬題(這個兄弟應該是我們川大的,我看到資料裏面的link有望將樓:))。不過都是針對310-055的。開始時,我不清楚SCJP還要分310-055和310-065.所以,根據055的考綱復習,看了很多I/O和awt的東西。去預約考試時才曉得,考試中心只考065.所以,準備考SCJP的兄弟壹定要搞清楚這兩個的區別(好像現在都不考055?)。清楚考綱後,就是根據考綱復習。雖然那個SCJP.iso是針對055的,不過大部分內容是相同的。所以裏面的資料都比較有用,只是復習的時候,遇到考綱不要求的,不看就是了。 首先看書,我覺得《Java2認證學習指南》也就是《Complete Java 2 Certification Study Guide 》這個應該看。上面根據考綱,對每個知識點做了詳細講解,文字淺顯,容易理解。而且,它不是像其他書,僅僅羅列出考點,上面講了很多原理上的東西。這樣更易於理解。我想,即便是不考SCJP,如果想學Java,這本書也值得推薦。不過,我不知道是否有中文版的。我看的英文電子版。 另外為了能成功地通過SCJP的考試,最好為自己準備壹份最新的SCJP考古題,達到保險的效果。 二、預約考試: 帶上身份證到各考試中心預約。預約時,壹定要確定考試種類,是310-035還是其他的,因為他們的考綱是不壹樣的。我就是預約時,才曉得只考310-065.所以浪費了很多時間。幸好預約到了下壹個周,而且那個周老板正好出差,所以有時間看310-065多出來的東西。 三、總結: 雖然以前做過也些Java項目,但是感覺做寫Java程序和考SCJP是兩碼事。能寫Java程序,不壹定過得了SCJP.但是能過SCJP,卻能說明擁有寫Java程序的基礎。這次過SCJP,對我Java基礎又是壹次鞏固,我覺得這是我收獲最大的。那個證反而意義不大。不過,對於非計算機專業的兄弟,如果想找個程序員的工作,相信SCJP是個很好的跳板。總之,只要有壹定Java基礎,通過壹段時間的復習,過肯定沒問題。SCJP並難,壹定要有信心。 總算過了,也算對公司有了交待,不過不知道花在上面的時間值不值。Anyway,現在終於可以看點自己想看的東西了
-
SCJP 310-065
SCJP 310-065考試考古題由“KillTest認證題庫網”資深IT認證講師和SCJP產品專家結合Prometric或VUE的真實考試環境最新原題精心打造。310-065考古題助您一次輕鬆通過考試。本站所售考古題含蓋了當前最新的真實考題,並且全部附有正確答案,我們承諾對SCJP 310-065(Sun Certified Programmer for the Java 2 Platform. SE6.0)考試原題完整覆蓋。如果您正在準備310-065考試,它將是最佳的學習助手,是您通過考試取得證照的捷徑。 310-065 Exam考古題由我們的資深IT認證講師和SCJP產品專家精心打造,包括了當前最新的真實310-065考試題目,全部附有正確答案。所有購買我們“310-065考古題”的客護,都將獲得60天免費昇級的售後服務,確保客護的壹次通過率。
-
SCJP認證概述
SUN認證 Java 程式員 (Sun Certified Programmer for Java, SCJP) 是 Java 的基礎認證,以 Java 程式語言與基礎類別庫使用為考試的方向,並且作為 SCJD 與平台認證集的前置需求,此認證是目前 Sun 認證體系中人數最多的,SCJP 自 Java JDK 1.2 版開始,目前最新的版本為 Java SE 6.0。 SCJP 只要考過一科考試即可,同時也沒有任何前置需求。考試代號是310-055/310-065。自 2000 年 SCJP 開辦以來,SCJP 已歷經四個版本:SCJP 6.0,以 Java SE 6.0 版為基礎,考試代碼為 Exam 310-065:Sun Certified Programmer for the Java 2 Platform. SE6.0。SCJP 5.0,以 J2SE 5.0 版為基礎,考試代碼為 Exam 310-055。SCJP 1.4,以…