private boolean safeCameraOpen(int id) {
boolean qOpened = false;
try {
releaseCameraAndPreview();
mCamera = Camera.open(id);
qOpened = (mCamera != null);
} catch (Exception e) {
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}
return qOpened;
}
在这里...... qOpened等于false。
但稍后在这里,qOpened等于(mCamera!= null)
是等于false还是等于(mCamera!= null)?
为什么我们需要声明" boolean qOpened = false;"?我们不能把它留给" boolean qOpened;"?
会有什么不同?
答案 0 :(得分:1)
mCamera != null
本身返回一个布尔结果。它是一个布尔比较,代码行本身是一个替代:
if (mCamera != null)
qOpened = true;
else
qOpened = false;
关于您的问题:
为什么我们需要声明" boolean qOpened = false;" ??我们不能 只是保持" boolean qOpened;" ???
如果没有try/catch
条款,可以像
boolean qOpened;
但是,因为try/catch
可能会在初始化qOpened
之前触发(就像在releaseCameraAndPreview();
中一样)Java不知道在方法结束时要返回什么
return qOpened;
答案 1 :(得分:1)
mCamera != null
是一个布尔表达式,其值为true
或false
。然后将结果分配给qOpened
。表达式周围的括号()
严格来说不是必需的,但是为了清楚起见。
boolean qOpened = false
来防止有关未初始化变量的编译时错误。
答案 2 :(得分:0)
qOpened = false;
并不意味着qOpened
等于false
,这意味着将 qOpened
设为false
。
它是赋值语句而不是相等。
因此,在您已粘贴的代码中,它最初设置为false
,假设调用Camera.open()
不会导致异常(如果是是的,try
块的其余部分不会被执行),和它返回一个有效值,它将被设置为true
。