暫無

          暫無
          posts - 3, comments - 0, trackbacks - 0, articles - 0

          2008年4月15日

          第一部分 軟件安裝
          分2種:二進制形式的軟件分發包、源代碼形式的軟件包

          二進制包:事先編譯好,優點是操作容易,缺點是不靈活
          1:*.rpm格式的軟件包,rpm(redhat package manager),一般命令為:
          安裝:rpm -ivh *.rpm,i 安裝,v 校驗,h 用散列符顯示安裝進度
          卸載:rpm -e packagename,e 卸載
          2:*.tar.gz/*.tgz、*.bz2形式的二進制軟件包
          安裝:tar -zxvf *.tar.gz 或  tar -jxvf *.bz2
          卸載:手工操作
          *.tar.gz/bz2文件是用tar工具打包、用gzip/bzip2壓縮,安裝時直接解壓縮即可,可用tar ztvf *.tar.gz 或 tar jtvf *.bz2獲取安裝清單,tar的參數z是調用gzip解壓,x是解包,v是校驗,f是顯示結果,y是調用bzip2解壓,t是列出包的文件清單,更多命令請參照man tar

          源代碼格式的分發包:
          提供了程序源代碼的發布形式,需用戶自己編譯成為二進制代碼并安裝,使用靈活,可用于多硬件/操作平臺/編譯環境
          1:*.src.rpm格式
          安裝: rpm -rebuild *.src.rpm,將源代碼編譯并在/usr/src/dist/RPMS下生成二進制的rpm包
          cd /usr/src/dist/RPMS
          rpm -ivh *.rpm
          卸載:同二進制格式
          2:*.tar.gz/*.tgz、*.bz2格式
          安裝:tar -zxvf *.tar.gz 或 tar -jxvf *.tar.bz2 先解壓,然后進入解壓后的目錄:
          ./configure 配置
          make 編譯
          make install 安裝
          卸載:make uninstall 或 手動刪除
          有些軟件包的源代碼在編譯安裝后可以用make install命令來進行卸載,如果不提供此功能,則軟件的卸載必須手動刪除。由于軟件可能將文件分散地安裝在系統的多個目錄中,往往很難把它刪除干凈, 那你應該在編譯前進行配置,指定軟件將要安裝到目標路徑:./configure --prefix=目錄名,這樣可以使用“rm -rf 軟件目錄名”命令來進行干凈徹底的卸載。

          第二部分 linux常用命令(直接粘貼)
          參照:http://hi.baidu.com/hmos/blog/item/53db9f82a26c90be6c81195f.html

          一. 啟動,關機,登入,登出相關命令
          <login> 登錄
          <logout> 登出
          <exit> 登出
          <shutdown> 停止系統
          <halt> 停止系統
          <reboot> 重啟動
          <poweroff> 切斷電源
          <sync> 把內存里的內容寫入磁盤
          <lilo> 安裝lilo啟動管理程序
          <grub> 安裝lilo啟動管理程序


          二. Shell相關命令
          <chsh> 切換Shell
          <history> 顯示命令履歷
          <alias> 設置命令別名
          <unalias> 取消命令別名
          <which> 顯示命令所在位置
          <type> 查詢命令種類
          <echo> 顯示字符串或者變量內容
          <set> 設置/顯示Shell變量
          <printenv> 顯示環境變量
          <export> 設置環境變量
          <env> 設置臨時環境變量
          <unset> 釋放環境變量
          <setenv> 設置環境變量
          <unsetenv> 釋放環境變量
          <source> 執行文件當中的命令
          <man> 查詢命令手冊
          <info> 查詢超文本命令手冊
          <whatis> 顯示命令簡介
          <apropos> 通過關鍵字查詢手冊


          三. 用戶管理相關命令
          <su> 切換到其他用戶
          <useradd> 追加用戶
          <adduser> 追加用戶
          <userdel> 刪除用戶
          <usermod> 修改用戶設置
          <chfn> 修改用戶私人信息
          <groupadd> 追加組
          <groupdel> 刪除組
          <groupmod> 修改組設置
          <passwd> 更改密碼
          <whoami> 顯示用戶名
          <logname> 顯示登錄用戶帳號
          <users> 顯示所有登錄用戶信息
          <who> 查詢登錄用戶信息
          <w> 查詢登錄用戶信息
          <id> 顯示指定用戶的ID信息
          <groups> 顯示指定用戶的所屬組
          <finger> 顯示指定用戶的個人信息
          <mesg> 開關與他人收發消息
          <write> 給其他用戶發消息
          <wall> 給所有用戶發消息
          <talk> 和其他用戶聊天


          四. 系統消息相關命令
          <date> 顯示/設置當前時間
          <uptime> 顯示系統運行時間
          <arch> 顯示機器的核心構架(如i386)
          <uname> 顯示操作系統信息
          <tty> 顯示終端名
          <last> 顯示登錄/登出在履歷
          <lastb> 顯示非法登錄信息
          <dumpkeys> 顯示當前鍵盤配置
          <loadkeys> 變更鍵盤配置
          <df> 查詢磁盤使用信息
          <du> 查詢磁盤使用信息
          <dmesg> 顯示系統啟動消息
          <script> 保存輸入輸出到文件


          五. 文件操作相關命令
          <ls> 顯示文件列表
          <tree> 顯示目錄樹
          <pwd> 顯示當前路徑
          <cd> 更改當前路徑
          <pushd> 追加路徑到目錄堆棧
          <popd> 從目錄堆棧刪除路徑
          <dirs> 顯示目錄堆棧的內容
          <mkdir> 創建路徑
          <rmdir> 刪除路徑
          <cp> 復制文件/目錄
          <rm> 刪除文件/目錄
          <mv> 移動文件/目錄,修改文件名
          <chown> 更改文件/目錄的所有者
          <chgrp> 修改文件/目錄的所有組
          <chmod> 修改文件/目錄的權限
          <touch> 更改文件時間
          <ln> 建立文件/目錄鏈接
          <find> 查找文件
          <whereis> 顯示文件存在的路徑名
          <file> 查詢文件種類
          <size> 查詢文件大小


          六. 文件編輯相關命令
          <cat> 顯示文件內容
          <tee> 輸出到文件和屏幕
          <more> 分屏顯示文件內容
          <less> 分屏顯示文件內容
          <head> 顯示文件頭部內容
          <tail> 顯示文件尾部內容
          <fold> 折疊顯示長行
          <sort> 排列文件的行
          <cmp> 比較文件內容
          <diff> 顯示文件差異
          <nkf> 更改日語文件編碼
          <dd> 變更文件之后復制
          <wc> 統計文本單詞數,文件大小等
          <split> 分割文件
          <paste> 以行連接文件
          <join> 以字段連接文件
          <grep> 查詢文字
          <uniq> 過濾重復部分顯示文件內容
          <tr> 替換文字
          <sed> 替換文字


          七. 壓縮/解壓縮相關命令
          <ar> 壓縮/解壓縮文件
          <tar> 壓縮/解壓縮文件
          <compress> 壓縮/解壓縮文件
          <uncompress> 解壓縮
          <gzip> 壓縮/解壓縮文件
          <gunzip> 解壓縮
          <zcat> 顯示壓縮文件的內容
          <lha> 壓縮/解壓縮文件
          <uuencode> 把二進制文件編碼為文本文件
          <uudecode> 把經過編碼的文本文件還原為二進制文件


          八. MS-DOS工具集[mtools]命令
          <mdir> 顯示文件列表
          <mcd> 改變當前目錄
          <mmd> 新建目錄
          <mrd> 刪除目錄
          <mdeltree> 刪除目錄樹
          <mcopy> 復制文件
          <mdel> 刪除文件
          <mmove> 移動文件
          <mren> 更改文件或目錄名
          <mattrib> 修改文件屬性
          <mtype> 顯示文件內容
          <mdu> 查詢文件或目錄大小
          <minfo> 顯示磁盤信息
          <mformat> 以MS-DOS方式格式化磁盤
          <mlabel> 設置磁盤標簽


          九. 控制外部設備相關命令
          <mount> mount上設備
          <umount> 解除已經mount上的設備
          <eject> 彈出(CD/DVD等)
          <fdformat> 格式化軟盤
          <fdisk> 配置/顯示硬盤分區
          <mkfs> 格式化磁盤分區
          <fsck> 檢查/修復磁盤錯誤
          <lpr> 打印到打印機
          <lprm> 中斷打印任務
          <lpq> 顯示打印任務的狀態
          <lpc> 管理/控制打印任務
          <ifconfig> 顯示/設定NIC配置


          十. 進程及任務管理相關命令
          <ps> 顯示正在運行的進程
          <jobs> 顯示后臺運行任務
          <fg> 把任務切換到前臺
          <bg> 把任務切換到后臺
          <kill> 中止進程或任務
          <killall> 中止進程或任務
          <wait> 等待進程或任務的結束
          <at> 設置定時執行任務
          <atq> 顯示尚未執行的任務
          <atrm> 刪除定時執行任務
          <batch> 在系統負荷減輕的時候執行任務
          <nice> 改變優先度并執行任務
          <nohup> 在后臺執行任務,Logout之后也不退出
          <sleep> 休眠一定的時間


          十一. 網絡管理相關命令
          <netstat> 顯示當前網絡連接狀況
          <route> 顯示/設置路由
          <host> 顯示網絡主機情況
          <hostname> 顯示/設置當前主機的名字
          <ping> 確認和遠程機器的連接情況
          <traceroute> 顯示路由信息
          <rwho> 查詢網上機器的登陸用戶
          <ruptime> 查詢網上機器的系統運行時間
          <rlogin> 登陸到遠程機器
          <telnet> 用telnet登陸到遠程機器
          <rsh> 給遠程機器發送命令
          <rcp> 在遠程機器之間復制文件
          <mail> 收取郵件
          <sendmail> 發送郵件
          <mailq> 確認郵件隊列
          <ftp> 用ftp傳輸文件


          十二. 其他命令
          <cal> 顯示日歷
          <clear> 清屏
          <gcc> 編譯C語言代碼
          <as> 匯編
          <bc> 計算
          <rpm> Redhat的包管理
          <dpkg> Debian的包管理
          <installpkg> Slackware的包安裝(刪除命令則是removepkg)
          <XF86Setup,turboxfg,Xconfigurator> 配置 X 服務器
          <startx> 啟動 X-Window 系統

          附:組合命令
          重定向,如
          $ ls -l /bin > ls-output
          $ more ls-output

          管道命令,如
          $ cat file1 file2 | sort | uniq
          管道命令連接著一個命令的標準輸出和另一個命令的標準輸入

          經常被用于管道的命令
          awk, fold, grep, head, nnkf, pr, sed, sort, tail, tee, tr, uniq, wc

          第三部分 linux shell

          第四部分 ubuntu文件簡介

          第五部分 ubuntu內核介紹

          posted @ 2008-04-24 11:02 rail 閱讀(2132) | 評論 (0)編輯 收藏

          文章來源:http://tb.blog.csdn.net/TrackBack.aspx?PostId=368920
          http://blog.csdn.net/domando/archive/2008/03/07/2157269.aspx

          Linux系統中,軟件通常以源代碼或者預編譯包的形式提供。
          軟件源代碼需要您親自編譯為二進制的機器代碼才能夠使用,安裝比較耗時,不過您可以自行調節編譯選項,決定您需要的功能或組件,或者針對您的硬件平臺作出優化。
          預編譯的軟件包,通常是由軟件的發布者進行編譯,您只要將軟件拷貝到系統中就可以了。考慮到預編譯軟件包的適用性,預編譯軟件包通常不會針對某種硬件平臺優化。它所包含的功能和組件也是通用的組合。

          Ubuntu系統中,軟件通常以“deb”格式的包文件發布,它是一種預編譯軟件包。deb包中除了包含已編譯的軟件,通常還包括軟件的拷貝路徑、對其它軟件包的依賴關系紀錄、一個比較通用的配置文件以及軟件的描述、版本、作者、類別、占用空間等信息。

          deb軟件包命令遵行如下約定:
          soft_ver-rev_arch.deb
          soft為軟件包名稱,ver為軟件版本號,rev為Ubuntu修訂版本號,arch為目標架構名稱
          例如:azureus_2.4.0.2-0ubuntu2_all.deb

          您需要使用“dpkg”命令來管理deb軟件包:
          dpkg -i | --install xxx.deb 安裝deb軟件包
          dpkg -r | --remove xxx.deb 刪除軟件包
          dpkg -r -P | --purge xxx.deb 連同配置文件一起刪除
          dpkg -I | -info xxx.deb 查看軟件包信息
          dpkg -L xxx.deb 查看文件拷貝詳情
          dpkg -l 查看系統中已安裝軟件包信息
          dpkg-reconfigure xxx 重新配置軟件包

          有些時候,您使用“dpkg”安裝一個軟件包,系統會提示您該軟件包依賴其它軟件包。這時,您先安裝其它軟件包,直到滿足依賴關系為止。或者同時安裝多個軟件包
          dpkg -i aaa.deb bbb.deb ccc.deb


          APT
          ===
          如果一個軟件依賴關系過于復雜,使用“dpkg”來安裝它,并不是一個明智的選擇,這個時候您就需要用到APT軟件包管理系統。APT可以自動的檢查依賴關系,通過您預設的方式來獲得相關軟件包,并自動安裝配置它。事實上,在多數情況下,我們推薦您使用APT軟件包管理系統。
          APT系統需要一個軟件信息數據庫和至少一個存放著大量deb包的軟件倉庫,我們稱之為“源”。“源”可以是網絡服務器,安裝CD或者本地軟件倉庫。您需要修改“/etc/apt/sources.list”文件,使APT系統能夠連接到“源”。
          您可以在以下頁面中獲得網絡安裝源的列表,并且根據您的網絡環境,選擇速度較快的源。
          http://wiki.ubuntu.org.cn/%E5%BF%AB%E9%80%9F%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97/DapperDrake

          APT系統主要包括“apt-get”和“apt-cache”等命令。它們通常都是復合命令,包含若干個子命令。
          apt-get install xxx 安裝xxx
             -d 僅下載
             -f 強制安裝
          apt-get remove xxx 卸載xxx
          apt-get update 更新軟件信息數據庫
          apt-get upgrade 進行系統升級
          apt-cache search 搜索軟件包
                  
          Tips:建議您經常使用“apt-get update”命令來更新您的軟件信息數據庫

          源碼包
          ======
          對于絕大多數軟件,我們建議您使用APT系統來安裝它。在少數情況下,例如某軟件沒有以deb包的格式發布,或者您需要定制適合自己的軟件,您可以通過編譯源代碼的方式安裝它。

          首先您需要下載軟件的源碼包,并且將它解包為一些源代碼文件。并了便于管理,我們建議您將下載的源碼包移動到“/usr/local/src/”目錄下,并在這里解包。
          sudo mv xxx.tar.gz /usr/local/src 移動源碼包
          cd /usr/local/src       進入“/usr/local/src/”目錄
          sudo tar -xzvf xxx.tar.gz    解包源碼
          cd xxx_ver/          進行解包后的源碼目錄

          源碼目錄中通常有一個“configure”腳本,用來配置即將開始的編譯過程。您可以執行它
          sudo ./configure [--prefix=/usr/loca/xxx ......]
          它會自動檢測軟件的編譯環境和依賴關系,并且生成“Makefile”文件。
             您可以使用帶參數的命令“./configure --help”,或者閱讀“INSTALL”文件,查看該腳本允許的參數。例如使用“--prefix=/usr/local/xxx”參數,將軟件的安裝目錄設定為“/usr/local/xxx/”。(如果您一定要將軟件安裝在一個目錄下,我們建議您安裝在這里)

          現在執行“make”命令,系統會根據“Makefile”文件中的設定,通過“make”工具調用編譯器和所需資源文件,將源代碼文件編譯成目標文件。
          sudo make

          執行“make install”命令,“make”工具會自動將連接目標文件,將最終生成的文件拷貝到“Makefile”文件設定的路徑中,并且完成更改文件的屬性,刪除殘留文件等活動。
          sudo make install

          現在,您的編譯安裝已經完成,為了更方便的使用它,需要給程序的可執行文件作一個符號鏈接。
          sudo ln -sf /usr/local/xxx/exe /usr/local/bin/exe

          ---------------------------------------------------------------------------------------------------
          LINUX軟件包的一般安裝方法
          在LINUX的世界里,軟件的安裝主要的是有兩種方式,一種是rpm包,還有一種就是tar包。對于這兩種包,一般的安裝方法是這樣的:
          1)rpm包的安裝
          安裝rpm包時需要一個參數就是-i.也就是就是可以用這樣的命令來安裝:
          rpm -i *.rpm
          但是我們在安裝時總是希望能看到一些信息,這時就可以用這樣的命令:
          rpm -ivh *.rpm
          這時就會顯示出軟件包的安裝進度以及安裝中的信息等。
          如果想要安裝的軟件包系統中已經存在而只需要升級安裝一下的話可以這樣來做:
          rpm -U *.rpm
          這樣就會升級系統中已經存在軟件包了。
          而御載一個已安裝的軟件包的命令是這樣的:
          rpm -e packagename
          要想列出系統已經安裝的rpm包的清單可以輸入下面的命令:
          rpm -qa
          但是此時列出的清單會是很長的,而我們所需要的只是其中的一個,這時我們可以用下列的命令來達到我們的目的:
          rpm -qa |grep -i 'name'
          在軟件包的安裝過程中我們有可能用到的參數如下:
          --force 強行安裝
          -v 用符號“#”來顯示安裝進度
          --percent 用百分比來顯示安裝進度
          -nodeps 忽視已丟失的依賴性文件強行進行安裝
          -test 這個參數并不進行實際的安裝,而只是檢查軟件包能否成功安裝
          -v 告訴RPM報告每一步的情況
          2)tar包
          tar包有兩種格式,一種是.tar.gz,另一種就是tar.bz2.這兩種包的安裝方法一般是這樣的:
          解壓:這兩種包要有用兩個不同的命令來解包,分別是:
          tar -xzvf *.tar.gz
          tar -xvjf *.tar.bz2
          解壓以后進入解壓出來的目錄,看一下里面的東西,一般而言這樣的包里會有README文件的,打開看一下的他的安裝方法。一般來說這樣的包安裝一般是下面的步驟:
          make
          make install
          這樣就會將軟件包安裝上了。
          3)除了這樣的安裝方法,還有的軟件是以可執行的二進制的文件的形式給出的。這時只要執行這個二進制文件就可以將這個軟件安裝上的。
          4)在Debian中采用的軟件包管理機制是與眾不同的,在這里可以使用世界各地的鏡像站點進行軟件包安裝和更新,方法一般來說是這樣的:
          配置鏡像站點:vi /etc/apt/source.list
          在這個文件里加入你所使用的鏡像站點。然后執行apt-get update,這樣就會連接站點讀取軟件包的信息,然后執行apt-get upgrade,這樣就可以進行升級了。或者是執行apt-get install pakeagename,這樣就可以安裝你想要的軟件包了。

          posted @ 2008-04-24 10:46 rail 閱讀(8805) | 評論 (0)編輯 收藏

          很多事情都可以總結為WWWH問題。也就是What When Why & How。java異常恰巧是其中之一。


          首先,java的異常是什么?拋去官方冗長的定義,我覺得異常或者說exception,其實可以理解為這樣一句話:“wow!!這可不是我期待的狀態”。


          如果這樣理解異常,那么對于何時使用異常也就再清楚不過了。那就是,只有當出現了不在正常流程之中的某種狀態,這個時候就應該使用異常了。比如連接超時、傳入的參數為null或者數據無法插入到數據庫。


          那么,為什么我們要使用異常呢?理由其實很簡單,為了更加簡潔的代碼或者說為了OO。如果java沒有異常,我們會怎么處理呢?
          if(aMethod() == -1 )
          {
          //do someting
          }
          else
          {
          //do someting
          }
          有了異常以后,我們怎么做呢?
          try
          {
          aMethod();
          }catch(MyException e){
          //do someting
          }
          或者
          public anotherMethod() throws MyException
          {
          aMethod();
          }
          這里只列舉了一個最簡單的例子。如果aMethod()這個方法到處都需要調用,這種好處就會更顯著了。


          至于我們需要不需要使用異常呢?答案必然是肯定的。但是網上也有一些聲音說,異常是一種耗費性能的操作,應該少使或者盡量不使。我認為,這跟沒有很好的理解如何使用異常有關系。


          下面我就來說說,最重要的一點,也就是how,如何使用異常。


          首先,我們來看看,當發生異常的時候,JVM做了什么?



          為了拋出異常,JVM 發出 athrow 字節碼指令。 athrow 指令引起 JVM 將異常對象彈出執行堆棧。然后 JVM 搜索當前執行堆棧幀來尋找第一個 catch 子句,這個子句可以處理該類的一個異常或者其超類的一個異常。如果在當前的堆棧幀里沒有找到 catch block ,那么當前堆棧幀就被釋放,異常在下一個堆棧幀的上下文中被重新拋出,如此這般,直到找到包含匹配的 catch 子句的堆棧幀,或者是到了執行堆棧的底部。最后,如果沒找到適當的 catch 塊,所有的堆棧幀都會被釋放,線程在 ThreadGroup 對象有了處理異常的機會后被終止(參考 ThreadGroup.uncaughtException )。如果找到了適當的 catch 塊,程序計數器會重置到那一

          塊代碼的第一行。 (注:1)



          從上面的描述可以看出,拋出異常是一種代價很高的操作。有的人可能要問了,如果只是為了簡潔的代碼或者OO,這種代價值得嗎?我的回答是,不值得!!!這點和我上面說的并不沖突。如果有一點經濟學的知識,一定會知道邊際量這個概念,說白了就是我多花一個單位的成本,是否可以帶過我多于一單位的收益。將這點用到編程上也是通用的。
          我們可以考慮這樣一段代碼
          for(int i=0;i<list.size();i++)
          {
          AClass myClass = list.get(i);
          if(myClass.aValue!=null && !"".equals(myClass.aValue))
          {
          //do something
          }
          }


          這段代碼很好的處理了參數不正常的情況。但有一個問題,每次循環程序都需要判斷參數是否正常。假設我們知道大部分的參數都是正常的,那么這些操作就顯得有些浪費了。如果改成
          for(int i=0;i<list.size();i++)
          {
          AClass myClass = list.get(i);
          try
          {
          //do something
          }catch(Exception e){}
          }
          這樣只有當很小幾率發生錯誤的時候,我們就可以節省一些操作。這也就是經濟學上說的邊際收益大于邊際成本的時候,只有這個狀態,我們才應該這樣使。反觀另外一個狀態,如果我們不能確定參數是否大部分為正常或者我們確定大部分參數都不會為正常,那么就應該使用第一種方法。總之,這點是需要靈活掌握的。


          另外一個值得注意的地方就是,不要將異常用于流程跳轉,異常就是指異常的狀態,而不是控制語句。如果你能注意這點,你就已經避免了90%的錯誤異常應用。舉個例子。inputStream#read大家一定都用過,為什么read方法要返回-1作為讀取到文件尾的狀態,而不是用異常,就是這個道理。



          關于如何使用異常的另外一點就是,我們如何catch異常。這一點其實也很簡單,總結為一句話就是,如果你不知道如何處理這個異常,那么就不要catch這個異常。


          我們經常會遇見這樣一種情景:我們調用了某個接口,這個接口拋出了一個checkedexception。這個時候就是考驗你的時候了,catch還是throw 這是個問題。我的經驗是,如果你覺得這個異常是一個可恢復的異常,比如參數錯誤,那么你就需要catch這個

          exception,然后告訴用戶重新輸入。如果這個exception是一個不可恢復的exception,比如SQLException,那么你干脆就不要處理它,把它留給底層去處理,讓底層定向到統一的異常頁面。當然,這種操作并不是嚴格的,你也可以catch這個exception,然后返回到你自己的異常頁面。


          最值得注意的是,永遠不要沒有理由的私吞exception。比如
          try
          {



          }catch(Exception e){
          //do nothing
          }
          如果你確定可以這種做,那么沒有關系。但是如果你不能,千萬一定不要這么做,如果你這么做了,很有可能導致無法定位異常,把自己或者別人搞到死。



          關于如何使用異常的最后一個問題就是runtimeexception 或者 checkedexception,這是個問題!


          很長一段時間,我也曾困惑于這個問題,記得以前看過一本書,好像是java夜未眠,記不清楚了。里面說,要盡量使用runtimexception,但是當我這樣做的時候,問題就來了,調用我接口的人不知道我的方法會拋出什么異常,也就無從處理了,這樣就導致了程序的不健壯。其實這個問題需要根據你的業務進行判斷,沒有什么盡量或者最好。一個簡單的原則是如果希望客戶程序員有意識地采取措施,那么拋出checkedexception.舉兩個例子
          public void aMethod(String s)
          {
          if(s==null) throw new Runtimeexception();
          }
          public void otherMethod(String uri) throws NoSuchFileException
          {
          try
          {
          File file = new File(uri)
          }catch(IOException e)
          {
          throw new NoSuchFileException()
          }
          }


          看出點什么了嗎?你肯定很奇怪為什么都是參數不正確,第一個方法拋出的是一個RuntimeException而第二個是一個CheckedException。因為s為null是一個我們非期待的參數,而這種狀態可能并不是經常出現的,屬于一種非業務錯誤或者不可恢復異常,我們不需要明確的通知客戶程序員。



          而第二個不同,第二個異常代表用戶輸入了某種錯誤的參數,而這個異常需要客戶程序員去通知用戶。所以要求客戶程序員去catch這樣exception。


          以上是我對異常的一些理解,如果大家有不同意見可以進行討論


          參考資料
          1.關注性能: 異常的異常:http://www-128.ibm.com/developerworks/cn/java/j-perf02104/index.html
          2.異常設計----何使用異常的原則 http://www.cnblogs.com/javaVillage/articles/384483.html

          posted @ 2008-04-15 19:00 rail 閱讀(325) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 岗巴县| 那曲县| 丹寨县| 安图县| 神池县| 金川县| 建瓯市| 麻江县| 淳安县| 枝江市| 江达县| 象山县| 宁都县| 叙永县| 同仁县| 温宿县| 泽普县| 黑山县| 静海县| 迁安市| 哈巴河县| 房产| 扬州市| 铁力市| 平遥县| 彩票| 太白县| 长葛市| 盖州市| 江安县| 泰州市| 万山特区| 潍坊市| 疏勒县| 通州市| 西华县| 宁陕县| 台东市| 阳原县| 辉南县| 桐庐县|