??xml version="1.0" encoding="utf-8" standalone="yes"?>久久免费高清视频,最近中文字幕免费mv2018在线,午夜成人影视http://www.aygfsteel.com/shenjingta/暂无zh-cnThu, 19 Jun 2025 15:35:12 GMTThu, 19 Jun 2025 15:35:12 GMT60unbuntu 命o汇?/title><link>http://www.aygfsteel.com/shenjingta/archive/2008/04/24/195457.html</link><dc:creator>rail</dc:creator><author>rail</author><pubDate>Thu, 24 Apr 2008 03:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/shenjingta/archive/2008/04/24/195457.html</guid><wfw:comment>http://www.aygfsteel.com/shenjingta/comments/195457.html</wfw:comment><comments>http://www.aygfsteel.com/shenjingta/archive/2008/04/24/195457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/shenjingta/comments/commentRss/195457.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/shenjingta/services/trackbacks/195457.html</trackback:ping><description><![CDATA[<p>W一部分 软g安装<br /> ?U:二进制Ş式的软g分发包、源代码形式的Y件包<br /> <br /> 二进制包Q事先编译好Q优Ҏ操作ҎQ缺Ҏ不灵z?br /> 1Q?.rpm格式的Y件包Qrpm(redhat package manager)Q一般命令ؓQ?<br /> 安装Qrpm -ivh *.rpmQi 安装Qv 校验Qh 用散列符昄安装q度<br /> 卸蝲Qrpm -e packagenameQe 卸蝲<br /> 2Q?.tar.gz/*.tgz?.bz2形式的二q制软g?br /> 安装Qtar -zxvf *.tar.gz ?nbsp; tar -jxvf *.bz2<br /> 卸蝲Q手工操?br /> *.tar.gz/bz2文g是用tar工具打包、用gzip/bzip2压羃Q安装时直接解压~即可,可用tar ztvf *.tar.gz ?tar jtvf *.bz2获取安装清单Qtar的参数z是调用gzip解压Qx是解包,v是校验,f是显C结果,y是调用bzip2解压Qt是列出包的文件清单,更多命o请参照man tar<br /> <br /> 源代码格式的分发包:<br /> 提供了程序源代码的发布Ş式,需用户自己~译成ؓ二进制代码ƈ安装Q用灵z,可用于多gQ操作^収ͼ~译环境<br /> 1Q?.src.rpm格式<br /> 安装Q?rpm -rebuild *.src.rpmQ将源代码编译ƈ?usr/src/dist/RPMS下生成二q制的rpm?br /> cd /usr/src/dist/RPMS<br /> rpm -ivh *.rpm<br /> 卸蝲Q同二进制格?br /> 2Q?.tar.gz/*.tgz?.bz2格式<br /> 安装Qtar -zxvf *.tar.gz ?tar -jxvf *.tar.bz2 先解压,然后q入解压后的目录Q?br /> ./configure 配置<br /> make ~译<br /> make install 安装<br /> 卸蝲Qmake uninstall ?手动删除<br /> 有些软g包的源代码在~译安装后可以用make install命o来进行卸载,如果不提供此功能Q则软g的卸载必L动删除。由于Y件可能将文g分散地安装在pȝ的多个目录中Q往往很难把它删除q净Q?那你应该在编译前q行配置Q指定Y件将要安装到目标路径Q?/configure --prefix=目录名,q样可以使用“rm -rf 软g目录?#8221;命o来进行干净d的卸载?br /> <br /> W二部分 linux常用命oQ直接粘_<br /> 参照Qhttp://hi.baidu.com/hmos/blog/item/53db9f82a26c90be6c81195f.html<br /> </p> <div> <div><font color="#000000"><strong>一. 启动,x,d,d相关命o</strong><br /> <login> d<br /> <logout> d<br /> <exit> d<br /> <shutdown> 停止pȝ<br /> <halt> 停止pȝ<br /> <reboot> 重启?br /> <poweroff> 切断甉|<br /> <sync> 把内存里的内容写入磁?br /> <lilo> 安装lilo启动理E序<br /> <grub> 安装lilo启动理E序</font></div> <br /> <br /> <div><font color="#000000"><strong>? Shell相关命o</strong><br /> <chsh> 切换Shell<br /> <history> 昄命o履历<br /> <alias> 讄命o别名<br /> <unalias> 取消命o别名<br /> <which> 昄命o所在位|?br /> <type> 查询命oU类<br /> <echo> 昄字符串或者变量内?br /> <set> 讄/昄Shell变量<br /> <printenv> 昄环境变量<br /> <export> 讄环境变量<br /> <env> 讄临时环境变量<br /> <unset> 释放环境变量<br /> <setenv> 讄环境变量<br /> <unsetenv> 释放环境变量<br /> <source> 执行文g当中的命?br /> <man> 查询命o手册<br /> <info> 查询文本命令手?br /> <whatis> 昄命o?br /> <apropos> 通过关键字查询手?/font></div> <br /> <br /> <div><font color="#000000"><strong>? 用户理相关命o</strong><br /> <su> 切换到其他用?br /> <useradd> q加用户<br /> <adduser> q加用户<br /> <userdel> 删除用户<br /> <usermod> 修改用户讄 <br /> <chfn> 修改用户Uh信息 <br /> <groupadd> q加l?br /> <groupdel> 删除l?br /> <groupmod> 修改l设|?br /> <passwd> 更改密码<br /> <whoami> 昄用户?br /> <logname> 昄d用户帐号<br /> <users> 昄所有登录用户信?br /> <who> 查询d用户信息<br /> <w> 查询d用户信息<br /> <id> 昄指定用户的ID信息<br /> <groups> 昄指定用户的所属组<br /> <finger> 昄指定用户的个Z?br /> <mesg> 开关与他h收发消息<br /> <write> l其他用户发消息<br /> <wall> l所有用户发消息<br /> <talk> 和其他用戯?/font></div> <br /> <br /> <div><font color="#000000"><strong>? pȝ消息相关命o</strong><br /> <date> 昄/讄当前旉<br /> <uptime> 昄pȝq行旉<br /> <arch> 昄机器的核心构Ӟ如i386Q?br /> <uname> 昄操作pȝ信息<br /> <tty> 昄l端?br /> <last> 昄d/d在?br /> <lastb> 昄非法d信息<br /> <dumpkeys> 昄当前键盘配置<br /> <loadkeys> 变更键盘配置<br /> <df> 查询盘使用信息<br /> <du> 查询盘使用信息<br /> <dmesg> 昄pȝ启动消息<br /> <script> 保存输入输出到文?/font></div> <br /> <br /> <div><font color="#000000"><strong>? 文g操作相关命o</strong><br /> <ls> 昄文g列表<br /> <tree> 昄目录?<br /> <pwd> 昄当前路径<br /> <cd> 更改当前路径<br /> <pushd> q加路径到目录堆?br /> <popd> 从目录堆栈删除\?br /> <dirs> 昄目录堆栈的内?br /> <mkdir> 创徏路径<br /> <rmdir> 删除路径<br /> <cp> 复制文g/目录<br /> <rm> 删除文g/目录<br /> <mv> Ud文g/目录Q修Ҏ件名<br /> <chown> 更改文g/目录的所有?br /> <chgrp> 修改文g/目录的所有组<br /> <chmod> 修改文g/目录的权?br /> <touch> 更改文g旉<br /> <ln> 建立文g/目录链接<br /> <find> 查找文g<br /> <whereis> 昄文g存在的\径名<br /> <file> 查询文gU类<br /> <size> 查询文g大小</font></div> <br /> <br /> <div><font color="#000000"><strong>? 文g~辑相关命o</strong><br /> <cat> 昄文g内容<br /> <tee> 输出到文件和屏幕<br /> <more> 分屏昄文g内容<br /> <less> 分屏昄文g内容<br /> <head> 昄文g头部内容<br /> <tail> 昄文gN内容<br /> <fold> 折叠昄长行<br /> <sort> 排列文g的行<br /> <cmp> 比较文g内容<br /> <diff> 昄文g差异<br /> <nkf> 更改日语文g~码<br /> <dd> 变更文g之后复制<br /> <wc> l计文本单词敎ͼ文g大小{?br /> <split> 分割文g<br /> <paste> 以行q接文g<br /> <join> 以字D连接文?br /> <grep> 查询文字<br /> <uniq> qo重复部分昄文g内容<br /> <tr> 替换文字<br /> <sed> 替换文字</font></div> <br /> <br /> <div><font color="#000000"><strong>? 压羃/解压~相兛_?/strong><br /> <ar> 压羃/解压~文?br /> <tar> 压羃/解压~文?br /> <compress> 压羃/解压~文?br /> <uncompress> 解压~?br /> <gzip> 压羃/解压~文?br /> <gunzip> 解压~?br /> <zcat> 昄压羃文g的内?br /> <lha> 压羃/解压~文?br /> <uuencode> 把二q制文g~码为文本文?br /> <uudecode> 把经q编码的文本文gq原Zq制文g</font></div> <br /> <br /> <div><font color="#000000"><strong>? MS-DOS工具集[mtools]命o</strong><br /> <mdir> 昄文g列表<br /> <mcd> 改变当前目录<br /> <mmd> 新徏目录<br /> <mrd> 删除目录<br /> <mdeltree> 删除目录?br /> <mcopy> 复制文g<br /> <mdel> 删除文g<br /> <mmove> Ud文g<br /> <mren> 更改文g或目录名<br /> <mattrib> 修改文g属?br /> <mtype> 昄文g内容<br /> <mdu> 查询文g或目录大?br /> <minfo> 昄盘信息<br /> <mformat> 以MS-DOS方式格式化磁?br /> <mlabel> 讄盘标签</font></div> <br /> <br /> <div><font color="#000000"><strong>? 控制外部讑֤相关命o</strong><br /> <mount> mount上设?br /> <umount> 解除已经mount上的讑֤<br /> <eject> 弹出QCD/DVD{)<br /> <fdformat> 格式化Y?br /> <fdisk> 配置/昄盘分区<br /> <mkfs> 格式化磁盘分?br /> <fsck> ?修复盘错误<br /> <lpr> 打印到打印机<br /> <lprm> 中断打印d<br /> <lpq> 昄打印d的状?br /> <lpc> 理/控制打印d<br /> <ifconfig> 昄/讑֮NIC配置</font></div> <br /> <br /> <div><font color="#000000"><strong>? q程及Q务管理相兛_?/strong><br /> <ps> 昄正在q行的进E?br /> <jobs> 昄后台q行d<br /> <fg> 把Q务切换到前台<br /> <bg> 把Q务切换到后台<br /> <kill> 中止q程或Q?br /> <killall> 中止q程或Q?br /> <wait> {待q程或Q务的l束<br /> <at> 讄定时执行d<br /> <atq> 昄未执行的Q?br /> <atrm> 删除定时执行d<br /> <batch> 在系l负荷减ȝ时候执行Q?br /> <nice> 改变优先度ƈ执行d<br /> <nohup> 在后台执行Q务,Logout之后也不退?br /> <sleep> 休眠一定的旉</font></div> <br /> <br /> <div><font color="#000000"><strong>十一. |络理相关命o</strong><br /> <netstat> 昄当前|络q接状况<br /> <route> 昄/讄路由<br /> <host> 昄|络L情况<br /> <hostname> 昄/讄当前L的名?br /> <ping> 认和远E机器的q接情况<br /> <traceroute> 昄路由信息<br /> <rwho> 查询|上机器的登陆用?br /> <ruptime> 查询|上机器的系l运行时?br /> <rlogin> 登陆到远E机?br /> <telnet> 用telnet登陆到远E机?br /> <rsh> l远E机器发送命?br /> <rcp> 在远E机器之间复制文?br /> <mail> 收取邮g<br /> <sendmail> 发送邮?br /> <mailq> 认邮g队列<br /> <ftp> 用ftp传输文g</font></div> <br /> <br /> <div><font color="#000000"><strong>十二. 其他命o</strong><br /> <cal> 昄日历<br /> <clear> 清屏<br /> <gcc> ~译C语言代码<br /> <as> 汇编<br /> <bc> 计算<br /> <rpm> Redhat的包理<br /> <dpkg> Debian的包理<br /> <installpkg> Slackware的包安装Q删除命令则是removepkgQ?br /> <XF86Setup,turboxfg,Xconfigurator> 配置 X 服务?br /> <startx> 启动 X-Window pȝ</font></div> <br /> <div><font color="#000000">附:l合命o<br /> 重定向,?br /> $ ls -l /bin > ls-output<br /> $ more ls-output</font></div> <br /> <div><font color="#000000">道命oQ如<br /> $ cat file1 file2 | sort | uniq<br /> 道命oq接着一个命令的标准输出和另一个命令的标准输入</font></div> <br /> <div><font color="#000000">l常被用于管道的命o<br /> awk, fold, grep, head, nnkf, pr, sed, sort, tail, tee, tr, uniq, wc<br /> <br /> W三部分 linux shell<br /> <br /> W四部分 ubuntu文g?br /> <br /> W五部分 ubuntu内核介绍</font></div> </div> <img src ="http://www.aygfsteel.com/shenjingta/aggbug/195457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/shenjingta/" target="_blank">rail</a> 2008-04-24 11:02 <a href="http://www.aygfsteel.com/shenjingta/archive/2008/04/24/195457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu中deb文g包介l?软g安装)http://www.aygfsteel.com/shenjingta/archive/2008/04/24/195443.htmlrailrailThu, 24 Apr 2008 02:46:00 GMThttp://www.aygfsteel.com/shenjingta/archive/2008/04/24/195443.htmlhttp://www.aygfsteel.com/shenjingta/comments/195443.htmlhttp://www.aygfsteel.com/shenjingta/archive/2008/04/24/195443.html#Feedback0http://www.aygfsteel.com/shenjingta/comments/commentRss/195443.htmlhttp://www.aygfsteel.com/shenjingta/services/trackbacks/195443.html http://blog.csdn.net/domando/archive/2008/03/07/2157269.aspx

Linuxpȝ中,软g通常以源代码或者预~译包的形式提供?br /> 软g源代码需要您亲自~译Zq制的机器代码才能够使用Q安装比较耗时Q不q您可以自行调节~译选项Q决定您需要的功能或组Ӟ或者针Ҏ的硬件^CZ化?br /> 预编译的软g包,通常是由软g的发布者进行编译,您只要将软g拯到系l中可以了。考虑到预~译软g包的适用性,预编译Y件包通常不会针对某种gq_优化。它所包含的功能和lg也是通用的组合?br />
Ubuntupȝ中,软g通常?#8220;deb”格式的包文g发布Q它是一U预~译软g包。deb包中除了包含已编译的软gQ通常q包括Y件的拯路径、对其它软g包的依赖关系U录、一个比较通用的配|文件以及Y件的描述、版本、作者、类别、占用空间等信息?br />
deb软g包命令遵行如下约定:
soft_ver-rev_arch.deb
softY件包名称QverY件版本号Qrev为Ubuntu修订版本Parch为目标架构名U?br /> 例如Qazureus_2.4.0.2-0ubuntu2_all.deb

您需要?#8220;dpkg”命o来管理deb软g包:
dpkg -i | --install xxx.deb 安装deb软g?br /> dpkg -r | --remove xxx.deb 删除软g?br /> dpkg -r -P | --purge xxx.deb q同配置文g一起删?br /> dpkg -I | -info xxx.deb 查看软g包信?br /> dpkg -L xxx.deb 查看文g拯详情
dpkg -l 查看pȝ中已安装软g包信?br /> dpkg-reconfigure xxx 重新配置软g?br />
有些时候,您?#8220;dpkg”安装一个Y件包Q系l会提示您该软g包依赖其它Y件包。这Ӟ您先安装其它软g包,直到满依赖关系为止。或者同时安装多个Y件包
dpkg -i aaa.deb bbb.deb ccc.deb


APT
===
如果一个Y件依赖关p过于复杂,使用“dpkg”来安装它Qƈ不是一个明智的选择Q这个时候您需要用到APT软g包管理系l。APT可以自动的检查依赖关p,通过您预讄方式来获得相兌Y件包Qƈ自动安装配置它。事实上Q在多数情况下,我们推荐您用APT软g包管理系l?br /> APTpȝ需要一个Y件信息数据库和至一个存攄大量deb包的软g仓库Q我们称之ؓ“?#8221;?#8220;?#8221;可以是网l服务器Q安装CD或者本地Y件仓库。您需要修?#8220;/etc/apt/sources.list”文gQAPTpȝ能够q接?#8220;?#8221;?br /> 您可以在以下面中获得网l安装源的列表,q且Ҏ您的|络环境Q选择速度较快的源?br /> http://wiki.ubuntu.org.cn/%E5%BF%AB%E9%80%9F%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97/DapperDrake

APTpȝ主要包括“apt-get”?#8220;apt-cache”{命令。它们通常都是复合命oQ包含若q个子命令?br /> apt-get install xxx 安装xxx
   -d 仅下?br />    -f 强制安装
apt-get remove xxx 卸蝲xxx
apt-get update 更新软g信息数据?br /> apt-get upgrade q行pȝ升
apt-cache search 搜烦软g?br />         
TipsQ徏议您l常使用“apt-get update”命o来更新您的Y件信息数据库

源码?br /> ======
对于l大多数软gQ我们徏议您使用APTpȝ来安装它。在数情况下,例如某Y件没有以deb包的格式发布Q或者您需要定刉合自己的YӞ您可以通过~译源代码的方式安装它?br />
首先您需要下载Y件的源码包,q且它解包Z些源代码文g。ƈ了便于管理,我们您将下蝲的源码包Ud?#8220;/usr/local/src/”目录下,q在q里解包?br /> sudo mv xxx.tar.gz /usr/local/src Ud源码?br /> cd /usr/local/src       q入“/usr/local/src/”目录
sudo tar -xzvf xxx.tar.gz    解包源码
cd xxx_ver/          q行解包后的源码目录

源码目录中通常有一?#8220;configure”脚本Q用来配|即开始的~译q程。您可以执行?br /> sudo ./configure [--prefix=/usr/loca/xxx ......]
它会自动Y件的~译环境和依赖关p,q且生成“Makefile”文g?br />    您可以用带参数的命?#8220;./configure --help”Q或者阅?#8220;INSTALL”文gQ查看该脚本允许的参数。例如?#8220;--prefix=/usr/local/xxx”参数Q将软g的安装目录设定ؓ“/usr/local/xxx/”。(如果您一定要Y件安装在一个目录下Q我们徏议您安装在这里)

现在执行“make”命oQ系l会Ҏ“Makefile”文g中的讑֮Q通过“make”工具调用~译器和所需资源文gQ将源代码文件编译成目标文g?br /> sudo make

执行“make install”命oQ?#8220;make”工具会自动将q接目标文gQ将最l生成的文g拯?#8220;Makefile”文g讑֮的\径中Qƈ且完成更Ҏ件的属性,删除D留文g{活动?br /> sudo make install

现在Q您的编译安装已l完成,Z更方便的使用它,需要给E序的可执行文g作一个符号链接?br /> sudo ln -sf /usr/local/xxx/exe /usr/local/bin/exe

---------------------------------------------------------------------------------------------------
LINUX软g包的一般安装方?br /> 在LINUX的世界里QY件的安装主要的是有两U方式,一U是rpm包,q有一U就是tar包。对于这两种包,一般的安装Ҏ是这LQ?br /> 1Qrpm包的安装
安装rpm包时需要一个参数就?i.也就是就是可以用q样的命令来安装Q?br /> rpm -i *.rpm
但是我们在安装时L希望能看C些信息,q时可以用q样的命令:
rpm -ivh *.rpm
q时׃昄Y件包的安装进度以及安装中的信息等?br /> 如果惌安装的Y件包pȝ中已l存在而只需要升U安装一下的话可以这h做:
rpm -U *.rpm
q样׃升pȝ中已l存在Y件包了?br /> 而M载一个已安装的Y件包的命令是q样的:
rpm -e packagename
要想列出pȝ已经安装的rpm包的清单可以输入下面的命令:
rpm -qa
但是此时列出的清单会是很长的Q而我们所需要的只是其中的一个,q时我们可以用下列的命o来达到我们的目的Q?br /> rpm -qa |grep -i 'name'
在Y件包的安装过E中我们有可能用到的参数如下Q?br /> --force 安装
-v 用符?#8220;#”来显C安装进?br /> --percent 用百分比来显C安装进?br /> -nodeps 忽视已丢q依赖性文件强行进行安?br /> -test q个参数q不q行实际的安装,而只是检查Y件包能否成功安装
-v 告诉RPM报告每一步的情况
2)tar?br /> tar包有两种格式Q一U是.tar.gz,另一U就是tar.bz2.q两U包的安装方法一般是q样的:
解压Q这两种包要有用两个不同的命令来解包Q分别是Q?br /> tar -xzvf *.tar.gz
tar -xvjf *.tar.bz2
解压以后q入解压出来的目录,看一下里面的东西Q一般而言q样的包里会有README文g的,打开看一下的他的安装Ҏ。一般来说这L包安装一般是下面的步骤:
make
make install
q样׃Y件包安装上了?br /> 3Q除了这L安装ҎQ还有的软g是以可执行的二进制的文g的Ş式给出的。这时只要执行这个二q制文g可以将q个软g安装上的?br /> 4Q在Debian中采用的软g包管理机制是与众不同的,在这里可以用世界各地的镜像站点q行软g包安装和更新Q方法一般来说是q样的:
配置镜像站点Qvi /etc/apt/source.list
在这个文仉加入你所使用的镜像站炏V然后执行apt-get updateQ这样就会连接站点读取Y件包的信息,然后执行apt-get upgradeQ这样就可以q行升了。或者是执行apt-get install pakeagenameQ这样就可以安装你想要的软g包了?

rail 2008-04-24 10:46 发表评论
]]>
个h对java异常的一些探?javaeye)(2008q??5?http://www.aygfsteel.com/shenjingta/archive/2008/04/15/193192.htmlrailrailTue, 15 Apr 2008 11:00:00 GMThttp://www.aygfsteel.com/shenjingta/archive/2008/04/15/193192.htmlhttp://www.aygfsteel.com/shenjingta/comments/193192.htmlhttp://www.aygfsteel.com/shenjingta/archive/2008/04/15/193192.html#Feedback0http://www.aygfsteel.com/shenjingta/comments/commentRss/193192.htmlhttp://www.aygfsteel.com/shenjingta/services/trackbacks/193192.html

首先Qjava的异常是什么?抛去官方冗长的定义,我觉得异常或者说exceptionQ其实可以理解ؓq样一句话Q?#8220;wow!!q可不是我期待的状?#8221;?


如果q样理解异常Q那么对于何时用异怹再清楚不过了。那是Q只有当出现了不在正常流E之中的某种状态,q个时候就应该使用异常了。比如连接超时、传入的参数为null或者数据无法插入到数据库?


那么Qؓ什么我们要使用异常呢?理由其实很简单,Z更加z的代码或者说ZOO。如果java没有异常,我们会怎么处理呢?
if(aMethod() == -1 )
{
//do someting
}
else
{
//do someting
}
有了异常以后Q我们怎么做呢Q?
try
{
aMethod();
}catch(MyException e){
//do someting
}
或?
public anotherMethod() throws MyException
{
aMethod();
}
q里只列举了一个最单的例子。如果aMethod()q个Ҏ到处都需要调用,q种好处׃更显著了?


至于我们需要不需要用异常呢Q答案必然是肯定的。但是网上也有一些声韌Q异常是一U耗费性能的操作,应该或者尽量不ѝ我认ؓQ这跟没有很好的理解如何使用异常有关pR?


下面我就来说_最重要的一点,也就是howQ如何用异常?


首先Q我们来看看Q当发生异常的时候,JVM做了什么?



Z抛出异常QJVM 发出 athrow 字节码指令?athrow 指o引v JVM 异常对象弹出执行堆栈。然?JVM 搜烦当前执行堆栈帧来LW一?catch 子句Q这个子句可以处理该cȝ一个异常或者其类的一个异常。如果在当前的堆栈里没有找?catch block Q那么当前堆栈ឮp释放Q异常在下一个堆栈的上下文中被重新抛出Q如此这般,直到扑ֈ包含匚w?catch 子句的堆栈Q或者是C执行堆栈的底部。最后,如果没找到适当?catch 块,所有的堆栈帧都会被释放Q线E在 ThreadGroup 对象有了处理异常的机会后被终止(参?ThreadGroup.uncaughtException Q。如果找C适当?catch 块,E序计数器会重置到那一

块代码的W一行?(注:1)



从上面的描述可以看出Q抛出异常是一U代价很高的操作。有的h可能要问了,如果只是Zz的代码或者OOQ这U代价值得吗?我的回答是,不值得!!!q点和我上面说的q不冲突。如果有一点经学的知识,一定会知道辚w量这个概念,说白了就是我多花一个单位的成本Q是否可以带q我多于一单位的收益。将q点用到~程上也是通用的?
我们可以考虑q样一D代?
for(int i=0;i<list.size();i++)
{
AClass myClass = list.get(i);
if(myClass.aValue!=null && !"".equals(myClass.aValue))
{
//do something
}
}


q段代码很好的处理了参数不正常的情况。但有一个问?每次循环E序都需要判断参数是否正常。假设我们知道大部分的参数都是正常的Q那么这些操作就昑־有些费了。如果改?
for(int i=0;i<list.size();i++)
{
AClass myClass = list.get(i);
try
{
//do something
}catch(Exception e){}
}
q样只有当很几率发生错误的时候,我们可以节省一些操作。这也就是经学上说的边际收益大于边际成本的时候,只有q个状态,我们才应该这样。反观另外一个状态,如果我们不能定参数是否大部分ؓ正常或者我们确定大部分参数都不会ؓ正常Q那么就应该使用W一U方法。MQ这Ҏ需要灵zL握的?


另外一个值得注意的地方就是,不要异常用于流E蟩转,异常是指异常的状态,而不是控制语句。如果你能注意这点,你就已经避免?0%的错误异常应用。D个例子。inputStream#read大家一定都用过Qؓ什么readҎ要返?1作ؓd到文件尾的状态,而不是用异常Q就是这个道理?



关于如何使用异常的另外一点就是,我们如何catch异常。这一点其实也很简单,ȝZ句话是Q如果你不知道如何处理这个异常,那么׃要catchq个异常?


我们l常会遇见这样一U情景:我们调用了某个接口,q个接口抛出了一个checkedexception。这个时候就是考验你的时候了Qcatchq是throw q是个问题。我的经验是Q如果你觉得q个异常是一个可恢复的异常,比如参数错误Q那么你需要catchq个

exceptionQ然后告诉用户重新输入。如果这个exception是一个不可恢复的exceptionQ比如SQLExceptionQ那么你q脆׃要处理它Q把它留l底层去处理Q让底层定向到统一的异帔R面。当Ӟq种操作q不是严格的Q你也可以catchq个exceptionQ然后返回到你自q异常面?


最值得注意的是Q永q不要没有理qU吞exception。比?
try
{



}catch(Exception e){
//do nothing
}
如果你确定可以这U做Q那么没有关pR但是如果你不能Q千万一定不要这么做Q如果你q么做了Q很有可能导致无法定位异常,把自己或者别人搞到死?



关于如何使用异常的最后一个问题就是runtimeexception 或?checkedexception,q是个问?


很长一D|_我也曑֛惑于q个问题Q记得以前看q一本书Q好像是java夜未眠,C清楚了。里面说Q要量使用runtimexceptionQ但是当我这样做的时候,问题来了,调用我接口的Z知道我的Ҏ会抛Z么异常,也就无从处理?q样导致了E序的不健壮。其实这个问题需要根据你的业务进行判断,没有什么尽量或者最好。一个简单的原则是如果希望客L序员有意识地采取措施Q那么抛出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()
}
}


看出点什么了吗?你肯定很奇怪ؓ什么都是参C正确Q第一个方法抛出的是一个RuntimeException而第二个是一个CheckedException。因为s为null是一个我们非期待的参敎ͼ而这U状态可能ƈ不是l常出现的,属于一U非业务错误或者不可恢复异常,我们不需要明的通知客户E序员?



而第二个不同Q第二个异常代表用户输入了某U错误的参数Q而这个异帔R要客L序员去通知用户。所以要求客L序员去catchq样exception?


以上是我对异常的一些理解,如果大家有不同意见可以进行讨?


参考资?
1.x性能: 异常的异常:http://www-128.ibm.com/developerworks/cn/java/j-perf02104/index.html
2.异常设计----何用异常的原则 http://www.cnblogs.com/javaVillage/articles/384483.html

rail 2008-04-15 19:00 发表评论
]]>
վ֩ģ壺 | ȳ| | ɽ| ȫ| | | | | | Ͷ| | ذ| ¡| | ͨ| ߴ| | | Դ| ½| ɽ| | | | | | | | | ½| ȳ| | | | ɳ| | ͭ| Ͻ| Ҷ| Ϫ|