java关于有返回值有try/catch块的方法的问题
疑问:下面是一个文件流输入流与字节数组输出流的结合方法在try块中return返回了一个字节数组,但是在try块外也要有return否则方法会报错,可为什么要返回null...
疑问:下面是一个文件流输入流与字节数组输出流的结合方法 在try块中return 返回了 一个字节数组,但是在try块外也要有return 否则方法会报错,可为什么要返回null 这样不就接到null了吗。
public static byte[] fileToByteArray(String path) {
File src=new File(path);
byte[] dest=null;
InputStream is=null;
ByteArrayOutputStream baos=null;
try {
is=new FileInputStream(src);
baos=new ByteArrayOutputStream();
int temp=-1;
byte[] flush=new byte[1024];
while((temp=is.read(flush))!=-1) {
baos.write(flush,0,temp);
}
baos.flush();
return baos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(is!=null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
} 展开
public static byte[] fileToByteArray(String path) {
File src=new File(path);
byte[] dest=null;
InputStream is=null;
ByteArrayOutputStream baos=null;
try {
is=new FileInputStream(src);
baos=new ByteArrayOutputStream();
int temp=-1;
byte[] flush=new byte[1024];
while((temp=is.read(flush))!=-1) {
baos.write(flush,0,temp);
}
baos.flush();
return baos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(is!=null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
} 展开
2个回答
展开全部
你要先理解你调用的方法可能会出现某些异常
我们程序为了处理这异常所以需要try/catch块
你在try块里面return只是程序正常的时候的返回值
程序也有可能会出现异常,就走不到对应的正常返回值
所以需要在外面再return一个null
后面调用这方法的时候可以判断返回值,如果是null就说明程序出错了
我们程序为了处理这异常所以需要try/catch块
你在try块里面return只是程序正常的时候的返回值
程序也有可能会出现异常,就走不到对应的正常返回值
所以需要在外面再return一个null
后面调用这方法的时候可以判断返回值,如果是null就说明程序出错了
更多追问追答
追问
如果不发生错误就不会执行 try/catch之外的return语句了是吧
追答
return之后就相当于方法已经结束了
展开全部
1、finally语句块中的代码是一定会执行的,而catch块中的代码只有发生异常时才会执行。
2、 函数执行完try块中的return语句后不会终止,还会继续执行catch(仅在抛出异常时执行)、finally语句块。
3、函数必须确保有唯一返回值
说明: try中如果包含return语句则catch块和finally块中必须至少有一个含有return语句。或者try中通过throw new Exception();抛出异常,则catch与finally中至少有一个return语句。因为try块会假定其中发生异常,且try块中的代码要么顺利执行,要么抛出异常。如果只在try块中包含return语句不能保证函数有返回值(如try抛出时,return语句不会执行)。所以为了保证函数具有返回值,java强制要求原则。
4、return语句的优先级是finally最大,且try与catch块中只有两者之一的return语句会被执行。为保证函数只有一个返回值则返回优先级最大的值。
2、 函数执行完try块中的return语句后不会终止,还会继续执行catch(仅在抛出异常时执行)、finally语句块。
3、函数必须确保有唯一返回值
说明: try中如果包含return语句则catch块和finally块中必须至少有一个含有return语句。或者try中通过throw new Exception();抛出异常,则catch与finally中至少有一个return语句。因为try块会假定其中发生异常,且try块中的代码要么顺利执行,要么抛出异常。如果只在try块中包含return语句不能保证函数有返回值(如try抛出时,return语句不会执行)。所以为了保证函数具有返回值,java强制要求原则。
4、return语句的优先级是finally最大,且try与catch块中只有两者之一的return语句会被执行。为保证函数只有一个返回值则返回优先级最大的值。
追问
‘’
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询