黑马程序员技术交流社区
标题:
异常代码与return位置问题
[打印本页]
作者:
小黑马
时间:
2012-9-18 10:53
标题:
异常代码与return位置问题
public static Object test1(Object obj,String propertyName){
try {
PropertyDescriptor pd = new PropertyDescriptor(propertyName, obj.getClass());
Method met = pd.getReadMethod();
Object retValue = met.invoke(obj, propertyName);
return retValue; //位置1
} catch (Exception e) {
throw new RuntimeException(e);
}
//位置2
}
复制代码
代码1
public static Object getProperty(Object obj,String propertyName)
try {
PropertyDescriptor pd = new PropertyDescriptor(propertyName, obj.getClass());
Method met = pd.getReadMethod();
Object retValue = met.invoke(obj, propertyName);
return retValue; //位置1
} catch (Exception e) {
e.printStackTrace();
}
return obj; //位置2
}
复制代码
代码2
问题一: 代码1 当catch语句中抛出 RuntimeException()这个异常后,位置2处不用写return语句,而代码2中,打印异常的话,能在位置1和位置2都能写返回值.
问题二: 代码2中, 如果写了两个return, 最后返回的是哪一个?
问题三: 代码1中, return 是写在 那个位置上好,为什么?
作者:
彭润生
时间:
2012-9-18 11:06
本帖最后由 彭润生 于 2012-9-18 11:19 编辑
第一个 你抛出RuntimeException程序就停止了,所以后面可以没返回值。
第二个
public static Object getProperty(Object obj,String propertyName)
try {
PropertyDescriptor pd = new PropertyDescriptor(propertyName, obj.getClass());
Method met = pd.getReadMethod();
Object retValue = met.invoke(obj, propertyName);//
如果上面任何一个抛出异常,他下面的代码不执行了,直接catch捕获。
return retValue; //位置1
} catch (Exception e) {
e.printStackTrace();
} //
捕获之后接着执行下面的return
return obj; //位置2
}
第三个,两个位置写在那儿都行,你抛出的是Runtime有异常那么就程序停止,没有异常则返回值
作者:
李宁
时间:
2012-9-18 11:25
问题一:一个两个都不影响他正常运行
问题二:第一种情况,如果运行try语句出现异常会跳转出去第一个return就无法运行,会运行第二个return,返回的是第二个return;
第二种情况,如果不出现异常第一个return运行就返回第一个return,这时候程序结束运行,第二个return就运行不到。
问题三:写在位置二上好,这样保证不管有没有,一定有返回值。
作者:
梁志冰
时间:
2012-9-18 11:40
public static Object test1(Object obj,String propertyName){
try {
PropertyDescriptor pd = new PropertyDescriptor(propertyName, obj.getClass());
Method met = pd.getReadMethod();
Object retValue = met.invoke(obj, propertyName);
return retValue; //位置1
} catch (Exception e) {
throw new RuntimeException(e);
}
//位置2
}
代码1
public static Object getProperty(Object obj,String propertyName)
try {
PropertyDescriptor pd = new PropertyDescriptor(propertyName, obj.getClass());
Method met = pd.getReadMethod();
Object retValue = met.invoke(obj, propertyName);
return retValue; //位置1
} catch (Exception e) {
e.printStackTrace();
}
return obj; //位置2
}
代码2
问题一: 代码1 当catch语句中抛出 RuntimeException()这个异常后,位置2处不用写return语句,而代码2中,打印异常的话,能在位置1和位置2都能写返回值.
答:代码1中的RuntimeException()是运行时异常,一但抛出该异常,程序就会结束,那么
//位置2
中的语句此时是执行不到的,除非将它放到finally中。
代码2中因为抛的是 e.printStackTrace();打印异常,程序不会停止,所以会继续执行
return obj; //位置2
语句,而
try
如果异常,直接捕获,不会执行
return retValue; //位置1
。所以位置1
和位置
2都能写返回值。
问题二: 代码2中, 如果写了两个return, 最后返回的是哪一个?
答:代码2中,如果没有异常发生,
return retValue; //位置1,
程序结束。如果发生异常,捕获打印异常后,执行
return obj; //位置2
问题三: 代码1中, return 是写在 那个位置上好,为什么?
答:代码1中,如果是
return retValue;
那么就只能写在
//位置1
中,因为retValue是try中的局部变量。而且一但发生异常,//位置2是执行不到的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2