分类: SUN

SUN

  • 台北舉行“JAVA認證日”會場報名考試優惠了

    目前JAVA認證考試卷的價格是6600,會場當天購買優惠價是5300,詳細可參考一下活動網頁的訊息。

    時間:2009年7月31日

    地點:台北國際會議中心
    活動網址:http://weekly.ithome.com.tw/seminar/jcd2009/

    引用網址:http://itking-sunny.blogspot.com/2009/06/2009-java.html

    P.S. 上次一個朋友跟我說SCJP已經漲到300美金,我很納悶地去Prometric網站查,果然查到是300美金。不過當我看到JAVA認證日的活動訊息時我才想起,多數人考JAVA都是先去跟恆毅等SUN原廠授權中心買認證試卷而非在Prometric線上刷卡,而買認證試卷的金額目前訂價是台幣6600而非300美金,若在7/31的JAVA認證日購買就是優惠價3500。

    這個資訊給近期半年內有要考JAVA認證的朋友,若確定要參加考試先去買來放著可以便宜些。

  • Sun/Oracle合併的五大結果:MySQL將亡?

    導語:Oracle74億美元收購Sun的消息對於業界來說是一個不小的震動,也引發了眾多的關注和評論。美國《Computerworld》網站的博客Steven J.Vaughan-Nichols撰文指出:Oracle收購Sun之舉是一次愚蠢的行為。
    以下是Vaughan-Nichols文章的全文:

    我曾經考慮過Oracle收購Sun的事情,但當時我以為,“Larry Ellison不會這麼蠢吧。”看來,我錯了。 Ellison的確很蠢。 Oracle收購Sun一事無論怎麼看都是21世紀IT併購案例中最為愚蠢的一起。

    我仔細閱讀了有關Oracle/Sun的併購協議,閱讀了Ellison對這起併購案合理性的解釋。老實說,我一點兒都不明白。一點兒都看不出這一併購案的任何好處。首先,Oracle花費74億美元收購Sun,已經當了冤大頭,不值。其次,這筆交易雖然能讓Sun的高管和股東們拿到不少錢,但是對於Sun的客戶、開發人員和職員來說將會是一場災難。

    我對Sun的技術很熟悉,所以我要說,我看不出這裡面誰會是贏家。 IBM收購Sun是有益的。儘管它們之間存在著文化上的差異,但是Sun的軟件會在IBM的環境下繼續繁榮興旺。然而,Sun和Oracle?我只能看到的是,Sun的絕大多數技術將會隨著Oracle的接管而消失。

    特別來說,我覺得以下五個可能出現的結果可不是鬧著玩兒的。

    1)MySQL將會死去。我得先喊一聲MySQL萬歲!但是Oracle卻肯定不會這麼看。為什麼呢?因為它們一直都在想著如何靜悄悄地、迅速地剿滅這個開源的死對頭。

    但是對於Oracle來說很不幸的是,一切都太遲了。 MySQL在Sun的錯誤管理下,已經開始分化。 MySQL的創始人Michael Widenius已經離開了Sun,開始創建自己的MySQL社區——MariaDB了。其目的何在?就是要“在用戶層面上建立一個成熟、穩定,永遠自由的MySQL社區,並與主版本兼容。”

    這可不是Ellison或者微軟所願意看到的事情。但是你無法剿滅開源項目。企業可以有生有死,但是受到用戶歡迎的開源程序,比如MySQL這樣的,卻會繼續發展下去。

    2)Solaris/OpenSolaris。按照Oracle的意思,似乎是想用Solaris來做些什麼事。可Solaris半死不活已經好多年了。而且Oracle在內部使用的是Linux,甚至有自己的RHEL(Red Hat企業版Linux),還有所謂的Oracle堅不可摧的Linux計劃。

    Ellison在講到Sun的Solaris時,能夠談到的就是“迄今為止最好的Unix技術,”那又能怎樣? Unix正在消亡。十多年來,Linux已經吞噬掉了Unix的大片領地。 Ellison對於Unix的支持聽上去似乎很仁慈,但是要作為一種企業行為卻絲毫沒有意義。我可以預測,由於Oracle未來對Solaris的忽視,Solaris必亡。

    3)Java。 Java是有價值的,但是Sun這麼多年來在將這種價值轉變成真金白銀的工作上卻做得太差了。 Oracle在自己的很多軟件中都使用了Java,自然會非常看重Java。但我的問題是:“Oracle會拿Java社區怎麼辦,或者反之,Java社區會對Oracle做些什麼?”

    我知道會有一些事情要發生。 NetBeans就是一個例子。 Oracle是Eclipse的一線支持者。那麼其他方面呢?我一點兒都看不清楚Oracle會拿JCP(Java Community Process)這個Java標準組織怎麼辦。如果它明智的話,就應該盡可能快地和該組織搞好關係,制定出Java的未來發展計劃。但是Oracle並不明智,它已經準備讓Java開發人員盡可能快地(不是走開,而是跑步)離開了。

    4)SPARC。 Oracle盡可以去談論如何後退一步,回到硬件、軟件捆綁銷售的時代去,但我看不出有什麼必要。富士通或許會繼續在一個逐漸萎縮的市場上銷售SAPRC機器,我預計,Sun的x86服務器可能會被分拆出去,或者乾脆賣給戴爾和惠普。我是真的看不清楚,Oracle在硬件行業會有什麼作為。

    5)Sun的其他開源程序。我有一種很糟糕、很糟糕的感覺,Oracle會讓在業界很受歡迎,功能也很強大的OpenOffice和VirtualBox等開源項目中途夭折。 Oracle只願意為它自己所使用的開源項目花錢。例如Oracle是一個頂級Linux分銷商。但是我看不出Sun的其他開源項目會對Oracle的收入有何貢獻,所以我也看不出Oracle會對這些項目提供支持。

    多年來,Sun雖然時常並不情願,但還是對操縱系統以及開源軟件做出了很多重要的貢獻。而隨著這次併購,它的所有這些努力都將煙消雲散。再見了,Sun。過去和你相識的美好時光可能將一去不復返了。
    引用:http://oss.org.cn/?action-viewnews-itemid-3675

  • 平價出售各類考試題庫下载(電腦認證考古題)

    killtest題庫是台灣最大供應商,目前擁有BEA, CIW, COMPTIA, Cisco, Citrix, DatabaseEMC, HP, Huawei, IBM, ITIL, Introduction, LPI, Linux, MCPD, Microsoft, News, Nortel, Oracle, SUN, Symantec

    等國際認證考題,考試考古題由“KillTest認證題庫網”資深IT認證講師和產品專家結合Prometric或VUE的真實考試環境最新原題精心打造。killtest題庫助您一次輕鬆通過考試。

    本站所售考古題含蓋了當前最新的真實考題,並且全部附有正確答案,我們承諾對考試原題完整覆蓋。如果您正在準備參加考試,它將是最佳的學習助手,是您通過考試取得證照的捷徑。

    下载地址所有考試題庫  (無法打開請升級office2007)

  • Java入門需掌握的30個基本概念

    Java的白皮書為我們提出了Java語言的11個關鍵特性。

    (1)Easy:Java的語法比C++的相對簡單,另一個方面就是Java能使軟件在很小的機器上運行,基礎解釋其和類庫的支持的大小約為40kb,增

    加基本的標準庫和線程支持的內存需要增加125kb。
    (2)分佈式:Java帶有很強大的TCP/IP協議族的例程庫,Java應用程序能夠通過URL來穿過網絡來訪問遠程對象,由於servlet機制的出現,使

    Java編程非常的高效,現在許多的大的web server都支持servlet。
    (3)OO:面向對象設計是把重點放在對象及對象的接口上的一個編程技術.其面向對象和C++有很多不同,在與多重繼承的處理及Java的原類模

    型。
    (4)健壯特性:Java採取了一個安全指針模型,能減小重寫內存和數據崩潰的可能型。
    (5)安全:Java用來設計網路和分佈系統,這帶來了新的安全問題,Java可以用來構建防病毒和防攻擊的System.事實證明Java在防毒這一方

    面做的比較好。
    (6)中立體系結構:Java編譯其生成體系結構中立的目標文件格式可以在很多處理器上執行,編譯器產生的指令字節碼(Javabytecode)實現此

    特性,此字節碼可以在任何機器上解釋執行。
    (7)可移植性:Java中對基本數據結構類型的大小和算法都有嚴格的規定所以可移植性很好。
    (8)多線程:Java處理多線程的過程很簡單,Java把多線程實現交給底下操作系統或線程程序完成.所以多線程是Java作為服務器端開發語言

    的流行原因之一。
    (9)Applet和servlet:能夠在網頁上執行的程序叫Applet,需要支持Java的瀏覽器很多,而applet支持動態的網頁,這是很多其他語言所不

    能做到的。
    基本概念?
    1.OOP中唯一關係的是對象的接口是什麼,就像計算機的銷售商她不管電源內部結構是怎樣的,他只關係能否給你提供電就行了,也就是只

    要知道can or not而不是how and why.所有的程序是由一定的屬性和行為對象組成的,不同的對象的訪問通過函數調用來完成,對象間所有

    的交流都是通過方法調用,通過對封裝對像數據,很大限度上提高複用率。
    2.OOP中最重要的思想是類,類是模板是藍圖,從類中構造一個對象,即創建了這個類的一個實例(instance)。
    3.封裝:就是把數據和行為結合起在一個包中)並對對象使用者隱藏數據的實現過程,一個對像中的數據叫他的實例字段(instance field)。
    4.通過擴展一個類來獲得一個新類叫繼承(inheritance),而所有的類都是由Object根超類擴展而得,根超類下文會做介紹。
    5.對象的3個主要特性
    behavior—說明這個對象能做什麼.
    state—當對象施加方法時對象的反映.
    identity—與其他相似行為對象的區分標誌.
    每個對像有唯一的indentity而這3者之間相互影響.

    6.類之間的關係:
    use-a :依賴關係
    has-a :聚合關係
    is-a :繼承關係–例:A類繼承了B類,此時A類不僅有了B類的方法,還有其自己的方法.(個性存在於共性中)
    7.構造對象使用構造器:構造器的提出,構造器是一種特殊的方法,構造對象並對其初始化。
    例:Data類的構造器叫Data
    new Data()—構造一個新對象,且初始化當前時間.
    Data happyday=new Data()—把一個對象賦值給一個變量happyday,從而使該對象能夠多次使用,此處要聲明的使變量與對像變量二者是

    不同的.new返回的值是一個引用。
    構造器特點:構造器可以有0個,一個或多個參數
    構造器和類有相同的名字
    一個類可以有多個構造器
    構造器沒有返回值
    構造器總是和new運算符一起使用.

    8.重載:當多個方法具有相同的名字而含有不同的參數時,便發生重載.編譯器必須挑選出調用哪個方法。
    9.包(package)Java允許把一個或多個類收集在一起成為一組,稱作包,以便於組織任務,標準Java庫分為許多包.java.lang java.util

    java,net等,包是分層次的所有的java包都在java和javax包層次內。
    10.繼承思想:允許在已經存在的類的基礎上構建新的類,當你繼承一個已經存在的類時,那麼你就復用了這個類的方法和字段,同時你可以

    在新類中添加新的方法和字段。
    11.擴展類:擴展類充分體現了is-a的繼承關係.形式為:class (子類) extends (基類)。
    12.多態:在java中,對像變量是多態的.而java中不支持多重繼承。
    13.動態綁定:調用對象方法的機制。
    (1)編譯器檢查對象聲明的類型和方法名。
    (2)編譯器檢查方法調用的參數類型。
    (3)靜態綁定:若方法類型為priavte static final編譯器會準確知道該調用哪個方法。
    (4)當程序運行並且使用動態綁定來調用一個方法時,那麼虛擬機必須調用x所指向的對象的實際類型相匹配的方法版本。
    (5)動態綁定:是很重要的特性,它能使程序變得可擴展而不需要重編譯已存代碼。
    14.final類:為防止他人從你的類上派生新類,此類是不可擴展的。
    15.動態調用比靜態調用花費的時間要長。
    16.抽像類:規定一個或多個抽象方法的類本身必須定義為abstract。
    例: public abstract string getDescripition
    17.Java中的每一個類都是從Object類擴展而來的。
    18.object類中的equal和toString方法。
    equal用於測試一個對像是否同另一個對象相等。
    toString返回一個代表該對象的字符串,幾乎每一個類都會重載該方法,以便返回當前狀態的正確表示.
    (toString方法是一個很重要的方法)
    19.通用編程:任何類類型的所有值都可以同object類性的變量來代替。
    20.數組列表:ArrayList動態數組列表,是一個類庫,定義在java.uitl包中,可自動調節數組的大小。
    21.class類object類中的getclass方法返回ckass類型的一個實例,程序啟動時包含在main方法的類會被加載,虛擬機要加載他需要的所有

    類,每一個加載的類都要加載它需要的類。
    22.class類為編寫可動態操縱java代碼的程序提供了強大的功能反射,這項功能為JavaBeans特別有用,使用反射Java能支持VB程序員習慣

    使用的工具。
    能夠分析類能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射機制十分強大.
    1.在運行時分析類的能力。
    2.在運行時探察類的對象。
    3.實現通用數組操縱代碼。
    4.提供方法對象。

    而此機制主要針對是工具者而不是應用及程序。
    反射機制中的最重要的部分是允許你檢查類的結構.用到的API有:
    java.lang.reflect.Field返回字段.
    java.reflect.Method返回方法.
    java.lang.reflect.Constructor返回參數.
    方法指針:java沒有方法指針,把一個方法的地址傳給另一個方法,可以在後面調用它,而接口是更好的解決方案。
    23.接口(Interface)說明類該做什麼而不指定如何去做,一個類可以實現一個或多個interface。
    24.接口不是一個類,而是對符合接口要求的類的一套規範。
    若實現一個接口需要2個步驟:
    1.聲明類需要實現的指定接口。
    2.提供接口中的所有方法的定義。
    聲明一個類實現一個接口需要使用implements關鍵字
    class actionB implements Comparable其actionb需要提供CompareTo方法,接口不是類,不能用new實例化一個接口.
    25.一個類只有一個超類,但一個類能實現多個接口。 Java中的一個重要接口:Cloneable sc-
    26.接口和回調.編程一個常用的模式是回調模式,在這種模式中你可以指定當一個特定時間發生時回調對像上的方法。
    例:ActionListener接口監聽. 
    類似的API有:java.swing.JOptionPane
    java.swing.Timer
    java.awt.Tookit
    27.對象clone:clone方法是object一個保護方法,這意味著你的代碼不能簡單的調用它。
    28.內部類:一個內部類的定義是定義在另一個內部的類。
    原因是:
    1.一個內部類的對象能夠訪問創建它的對象的實現,包括私有數據。
    2.對於同一個包中的其他類來說,內部類能夠隱藏起來。
    3.匿名內部類可以很方便的定義回調。
    4.使用內部類可以非常方便的編寫事件驅動程序。
    29.代理類(proxy):
    1.指定接口要求所有代碼
    2.object類定義的所有的方法(toString equals)
    30.數據類型:Java是強調類型的語言,每個變量都必須先申明它都類型,java中總共有8個基本類型.4種是整型,2種是浮點型,一種是字符型,被用於Unicode編碼中的字符,布爾型

  • Java基礎知識J2EE初學者需要注意的問題

    J2EE體系結構簡單介紹

    一、J2EE提出的背景

    1、企業級應用框架的需求

    在許多企業級應用中,例如數據庫連接、郵件服務、事務處理等都是一些通用企業需求模塊,這些模塊如果每次再開發中都由開發人員來完

    成的話,將會造成開發週期長和代碼可靠性差等問題。於是許多大公司開發了自己的通用模塊服務。這些服務性的軟件系列同陳為中間件。

    2、為了通用必須要提出規範,不然無法達到通用

    在上面的需求基礎之上,許多公司都開發了自己的中間件,但其與用戶的溝通都各有不同,從而導致用戶無法將各個公司不同的中間件組裝

    在一塊為自己服務。從而產生瓶頸。於是提出標準的概念。其實J2EE就是基於JAVA技術的一系列標準。

    注:中間件的解釋中間件處在操作系統和更高一級應用程序之間。他充當的功能是:將應用程序運行環境與操作系統隔離,從而實現應用程

    序開發者不必為更多系統問題憂慮,而直接關注該應用程序在解決問題上的能力。我們後面說到的容器的概念就是中間件的一種。

    二、相關名詞解釋

    容器:充當中間件的角色

    WEB容器:給處於其中的應用程序組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接更容器中的環境變量接口交互,不必關注其它系

    統問題。主要有WEB服務器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵守J2EE規範中的WEB APPLICATION標準

    。我們把遵守以上標準的WEB服務器就叫做J2EE中的WEB容器。

    EJB容器:Enterprise java bean容器。更具有行業領域特色。他提供給運行在其中的組件EJB各種管理功能。只要滿足J2EE規範的EJB放入

    該容器,馬上就會被容器進行高效率的管理。並且可以通過現成的接口來獲得系統級別的服務。例如郵件服務、事務管理。

    WEB容器和EJB容器在原理上是大體相同的,更多的區別是被隔離的外界環境。 WEB容器更多的是跟基於HTTP的請求打交道。而EJB容器不是

    。它是更多的跟數據庫、其它服務打交道。但他們都是把與外界的交互實現從而減輕應用程序的負擔。例如SERVLET不用關心HTTP的細節,

    直接引用環境變量session,request,response就行、EJB不用關心數據庫連接速度、各種事務控制,直接由容器來完成。

    RMI/IIOP:遠程方法調用/internet對象請求中介協議,他們主要用於通過遠程調用服務。例如,遠程有一台計算機上運行一個程序,它提供

    股票分析服務,我們可以在本地計算機上實現對其直接調用。當然這是要通過一定的規範才能在異構的系統之間進行通信。 RMI是JAVA特有

    的。

    JNDI:JAVA命名目錄服務。主要提供的功能是:提供一個目錄系統,讓其它各地的應用程序在其上面留下自己的索引,從而滿足快速查找和

    定位分佈式應用程序的功能。

    JMS:JAVA消息服務。主要實現各個應用程序之間的通訊。包括點對點和廣播。

    JAVAMAIL:JAVA郵件服務。提供郵件的存儲、傳輸功能。他是JAVA編程中實現郵件功能的核心。相當MS中的EXCHANGE開發包。

    JTA:JAVA事務服務。提供各種分佈式事務服務。應用程序只需調用其提供的接口即可。

    JAF:JAVA安全認證框架。提供一些安全控制方面的框架。讓開發者通過各種部署和自定義實現自己的個性安全控制策略。

    EAI:企業應用集成。是一種概念,從而牽涉到好多技術。 J2EE技術是一種很好的集成實現。

    三、J2EE的優越性

    1、基於JAVA技術,平台無關性表現突出

    2、開放的標準,許多大型公司已經實現了對該規範支持的應用服務器。如BEA ,IBM,ORACLE等。

    3、提供相當專業的通用軟件服務。

    4、提供了一個優秀的企業級應用程序框架,對快速高質量開發打下基礎

    四、現狀

    J2EE是由SUN公司開發的一套企業級應用規範。現在最高版本是1.4。支持J2EE的應用服務器有IBM WEBSPHERE APPLICATION SERVER,BEA

    WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER等。

  • SCJD認證介紹

    Sun推出的專業認證包括下列三種:

      ◆ JAVA認證考試   

      對於JAVA程序設計員,Sun推出兩項認證:
      Sun Certified JAVA Programmer (SCJP)
      Sun Certified JAVA Developer (SCJD)

      SCJP測驗JAVA程序設計概念及能力,內容偏重於JAVA語法及JDK的內容;SCJD則進一步測試用JAVA 開發應用程序的能力,考試者必須先完成一個程序的設計方案,再回答與此方案相關的一些問題。

     
     ◆ Solaris系統管理認證考試
      
      對Solaris/Sun OS系統管理員,Sun推出Certified Solaris Administrator(CSA)。CSA分別為兩個等級( Part I 和 Part II ),測試對Solaris 系統管理的了解程度。

      ◆ Solaris網絡管理認證考試
     
      為了測試使用者對於Solaris網絡管理能力,Sun推出Certified Network Administrator(CNA)。內容包括基本網絡概念、Routing and Subnet、Security、Performance、DNS、NIS+等。  

      Sun Java認證是業界唯一經Sun授權Java認證培訓。Sun認證Java開發員考試內容包括完整的Java應用程序開發,涉及數據庫、圖形用戶界面、網 絡通信、平臺移植等各方面內容,要求學員已通過Java程序員認證。學習結束後,可參加全球連網考試。考試合格則由Sun公司頒發國際通用的Java開發 員證書。

    java開發員認證Sun Certified JAVA Deverloper(SCJD),認證考試以Sun指定的javaSL-285為教材,機考部分的考試號為310-027。預備知識:1.具有使用Java編程經驗;2.了解怎樣實現接口和處理Java異常;3.應用面向對象技術;4.了解用戶界面設計;5.了解基本的TCP/IP通信;6.掌握Socket或流編程。

    該認證將證明您具備以下能力:1.分析、設計、實現和測試“自底而上”的intranet的商業應用;2.理解JDBC和編寫與SQL數據庫連接的程序;3.解釋軟件開發周期,每階段的目標,可使用適當的Java程序類型,了解API設計的基本元素,根據項目中的功能需求確定程序組件;4.描述關系數據庫的設計及其設計原則;5.了解JDBC及其使用;6.使用良好的GUI設計原則設計用戶界面;7.可以使用Socket連接以適當格式傳輸數據,並將其集成到應用程序中;8.描述一層,兩層及多層數據庫結構及相關問題,創建一個多層Java小程序或應用程序;9.了解在Solaris和Windows平臺之間的移植問題。

  • JAVA認證基礎:隨機整數的生成過程

    使用Java 2 SDK基礎類庫產生隨機數的方法很多。但是如果你跟不上這些類庫的更新腳步,你有可能正在使用的是一種低效的隨機數生成機制,更糟糕的是:你有可能得到的不是均勻分布的隨機數。本文將向你展示一種較為可靠的隨機數生成方法,同時與其他方法進行比較。
    自從JDK最初版本發布起,我們就可以使用java.util.Random類產生隨機數了。在JDK1.2中,Random類有了一個名為nextInt()的方法:public int nextInt(int n)給定一個參數n,nextInt(n)將返回一個大於等於0小於n的隨機數,即:0 <= nextInt(n) < n。你所要做的就是先聲明一個Random的對象,在調用其nextInt(n)函數以返回隨機值。這裏有個示例,下面的代碼段將生成很多隨機數並輸出它們的平均值:

    以下是引用片段:
      int count = 1000000;
      int range = Integer.MAX_VALUE / 3 * 2;
      double sum = 0;
      Random rand = new Random();
      for (int i=0; i<count; i++) {
      sum += rand.nextInt(range);
      }
      System.out.println(sum/count);

    執行了1000000次循環之後,得到的平均值基本上就處於隨機數範圍的中點(midpoint)。

      到目前為止,事情還並不復雜,但是我們會問為什麽要使用nextInt(n)?考慮一下的隨機數生成方法:
      (1)使用老的方法nextInt(),沒有制定數值範圍
      (2)用Math.abs()靜態函數得到(1)中產生值的絕對值
      (3)對(2)的結果進行取模運算(%),得到期望範圍類的值

      我們說nextInt(n)要比上述方法更好,為什麽呢?參考以下的代碼段:

    以下是引用片段:
      sum = 0;
      for (int i=0; i<count; i++) {
      sum += Math.abs(rand.nextInt()) % range;
      }
      System.out.println(sum/count);
      不難發現,每次循環都多出了幾步運算。事實上,這種隨機數生成的方法存在著以下三個問題:

      首先,nextInt()返回的值是趨於均勻分布在Integer.MIN_VALUE 和 Integer.MAX_VALUE之間的。如果你取Integer.MIN_VALUE的絕對值,得到的仍然不是一個正數。事實上,Math.abs(Integer.MIN_VALUE)等於Integer.MIN_VALUE。因此,存在著這樣一種情況(雖然很少見):rand.nextInt()=Integer.MIN_VALUE,經過取絕對值Math.abs(rand.nextInt())之後,得到是一個負數。這種幾率為 1/(2^31),在我們的測試中不太可能發生——循環次數只有1000000次。
      其次,當你對nextInt()取模時,你使結果的隨機性大打折扣。隨機數中較小的值出現的幾率更大一些。這就是眾所周知的偽隨機數生成,因此我們不是用取模的方法。
      最後,也可能是最糟糕的:隨機數不是均勻分布。如果你執行了上述的兩段代碼,第一段代碼的結果將會大於715,000,000,考慮到數值範圍的中點(midpoint)715,827,882,所以這是一個可以接受的結果。然而,你會吃驚的發現第二段代碼得到的平均值肯定不會超過600,000,000。

      為何第二段代碼的結果會如此的偏差?糾其本質,問題出在數值分布的不均勻。當你進行取模運算時,你將過大的數轉換成了較小的。這使得較小的數更容易產生。

      使用nextInt(range)將會解決上述的三個問題。還有一種隨機數生成方法——使用Math.random()。這個方法的效果如何?

    以下是引用片段:
      sum = 0;
      for (int i=0; i<count; i++) {
      sum += (int)(Math.random() * range);
      }
      System.out.println(sum/count);
    很好,使用random()不會碰到nextInt()的麻煩。你不會得到負數返回值,沒有使用取模運算,值分布也是均勻的。還有什麽問題嗎?你有沒有考慮到Math.random()使用了浮點運算,而nextInt()和nextInt(range)只有整數操作?Math.random()可能會慢上四倍。再加上從浮點到整數的類型轉換,整個運算將會更慢。好了,經過一番比較,我們發現使用nextInt(range)生成隨機數更為有效,因為它避免了其他方法的種種弊端。最後再給出一段代碼,通過測試可以比較本文提到的幾種隨機數生成方法。

  • SCJP認證信息

    Sun Java。考試內容涉及所有Java相關知識、編程概念及applet開發技巧。Sun 認證Java程序員考試旨在觀察您通過應用軟件分配進行復雜編程的能力。之後還要測試您完成編程所需的知識。
      
    認證要求:
    學員掌握如何使用標準Java Development kit,V1.2 (JDK)或V1.4(JDK)開發應用程序和applets。學會Java語言的語法;如何使用Java來創建圖形用戶接口(GUI),事件處理機制,例外處理,通過設計與開發各種Java程序來獲得實際的編程經驗;您也將學到文件輸入/輸出(I/O);多線程和網絡的知識。
      
    通過認證將證明您能夠:認證是業界唯一經Sun授權的Java認證

    1.使用Java編程語言創建Java應用程序和applets
    2.定義和描述垃圾搜集,安全性和Java虛擬機(JVM)
    3.描述和使用Java語言面向對象的特點
    4.開發圖形用戶接口(GUI)。利用Java支持的多種布局管理
    5.描述和使用Java 1.2的事件處理模式
    6.使用Java語言的鼠標輸入,文本,窗口和菜單窗口部件
    7.使用Java的例外處理來控制程序執行和定義用戶自己的例外事件
    8.使用Java語言的先進的面向對象特點,包括方法重載,方法覆蓋,抽象類,接口,final,static和訪問控制
    9.實現文件的輸入/輸出(I/O)
    10.使用Java語言內在的線程模式來控制多線程