再起风云:关于java错误处理try, catch的疑惑.小弟刚从汇编,c/c++转过android
再起风云:关于java异常处理try, catch的疑惑....小弟刚从汇编,c/c++转过android
网上很多人关于java异常的讨论,支持,反对都各有主见..
我的疑惑是,怎么样将java代码写得很优美....
------------------------------------------------------------------------------------
对于c/c++,一般在返回值里体现正确以及错误的情形..
对于java,返回值只表示正确的情形;错误的情形则用异常表示...
因而,java的api定义了一大串的异常类,经常一个函数就抛出好几个异常
-------------------------------------------------------------------------------------
比如,有个功能:从/res/raw目录下打开某个文件,写入到一个特定的目录下......
有人说,java写起来更加优美,那针对这2份代码.我怎么觉得代码A有点长啊,还增加了阅读的难度...
还是说我写的方式不对...那我想问,java代码应该怎么写呢?比如上面的代码A,应该怎么去优化才能看起来更优美呢.....
其实很简单的一件事,打开2个文件...从一个里面读出来,写到另一个里面去..完了,关闭这2个文件....
我总觉得代码A让人,咋一看,咦怎么逻辑那么复杂啊.......
------解决思路----------------------
感谢lz回复,我大概扫了一下文章,可能理解的略有偏颇,望指正。
从我本人而言,我对于Exception的理解还是文中所谓的“初级阶段”或者说“误解”,即我的编程喜欢只喜欢把系统级异常使用Exception处理,而业务、逻辑级(比如密码错误)更倾向于lz所说的返回值处理,其中一个原因就是异常定义过于繁杂编程的时候工作量……比如某一个稍复杂的信息录入方法,我调用的时候需要处理30种异常……甚至异常本身的管理都会出现问题。当然也有可能是本人经验的确有限,还没学习过更为科学华丽的异常管理结构。
另,对于lz所说的代码A的优化,首先相同异常且相同处理的语句可以合并,例如:
其次,我大概梳理修改了一下,时间有限没有细作推敲,希望lz指正
网上很多人关于java异常的讨论,支持,反对都各有主见..
我的疑惑是,怎么样将java代码写得很优美....
------------------------------------------------------------------------------------
对于c/c++,一般在返回值里体现正确以及错误的情形..
对于java,返回值只表示正确的情形;错误的情形则用异常表示...
因而,java的api定义了一大串的异常类,经常一个函数就抛出好几个异常
-------------------------------------------------------------------------------------
比如,有个功能:从/res/raw目录下打开某个文件,写入到一个特定的目录下......
//代码A:使用异常的情形:
//InputStream,OutputStream这2个类open,read,write,close这4个函数都有异常.
public static void ReinstallLibrary2(String dst, int raw) {
InputStream is = Global.mainContext.getResources().openRawResource(raw);
if(is == null)
return;
OutputStream os = null;
try {
os = new FileOutputStream(dst);
}
catch(FileNotFoundException e) {
try {
is.close();
}
catch(IOException e1) {
}
return;
}
byte[] buf = new byte[1024];
while(true) {
int len = 0;
try {
len = is.read(buf);
if(len <= 0)
break;
}
catch(IOException e) {
break;
}
try {
os.write(buf, 0, len);
}
catch(IOException e) {
break;
}
}
try {
is.close();
}
catch(IOException e) {
}
try {
os.close();
}
catch(IOException e) {
}
}
//代码B:不使用异常,假如错误在返回值里表示.
public static void ReinstallLibrary(String dst, int raw) {
InputStream is = Global.mainContext.getResources().openRawResource(raw);
if(is == null)
return;
OutputStream os = new FileOutputStream(dst);
if(os == null) {
is.close();
return;
}
byte[] buf = new byte[1024];
while(true) {
int len = is.read(buf);
if(len <= 0)
break;
os.write(buf, 0, len);
}
is.close();
os.close();
}
有人说,java写起来更加优美,那针对这2份代码.我怎么觉得代码A有点长啊,还增加了阅读的难度...
还是说我写的方式不对...那我想问,java代码应该怎么写呢?比如上面的代码A,应该怎么去优化才能看起来更优美呢.....
其实很简单的一件事,打开2个文件...从一个里面读出来,写到另一个里面去..完了,关闭这2个文件....
我总觉得代码A让人,咋一看,咦怎么逻辑那么复杂啊.......
------解决思路----------------------
感谢lz回复,我大概扫了一下文章,可能理解的略有偏颇,望指正。
从我本人而言,我对于Exception的理解还是文中所谓的“初级阶段”或者说“误解”,即我的编程喜欢只喜欢把系统级异常使用Exception处理,而业务、逻辑级(比如密码错误)更倾向于lz所说的返回值处理,其中一个原因就是异常定义过于繁杂编程的时候工作量……比如某一个稍复杂的信息录入方法,我调用的时候需要处理30种异常……甚至异常本身的管理都会出现问题。当然也有可能是本人经验的确有限,还没学习过更为科学华丽的异常管理结构。
另,对于lz所说的代码A的优化,首先相同异常且相同处理的语句可以合并,例如:
try {
is.close();
os.close();
catch(IOException e) {
//TODO...
}
其次,我大概梳理修改了一下,时间有限没有细作推敲,希望lz指正
public static void ReinstallLibrary2(String dst, int raw) {
InputStream is = Global.mainContext.getResources().openRawResource(raw);
if (is == null)
return;
OutputStream os = null;
try {
os = new FileOutputStream(dst);
byte[] buf = new byte[1024];
while (true) {
int len = 0;
len = is.read(buf);
if (len <= 0)
break;
os.write(buf, 0, len);
}
is.close();
os.close();
} catch (FileNotFoundException e) {
//TODO...
} catch (IOException e){
//TODO...
}
}