不了解这个java方法,需要解释

时间:2015-04-23 07:51:47

标签: java android

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;"?

会有什么不同?

3 个答案:

答案 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是一个布尔表达式,其值为truefalse。然后将结果分配给qOpened。表达式周围的括号()严格来说不是必需的,但是为了清楚起见。

需要

boolean qOpened = false来防止有关未初始化变量的编译时错误。

答案 2 :(得分:0)

qOpened = false;

并不意味着qOpened等于false,这意味着 qOpened设为false

它是赋值语句而不是相等。

因此,在您已粘贴的代码中,它最初设置为false,假设调用Camera.open()不会导致异常(如果是是的,try块的其余部分不会被执行),它返回一个有效值,它将被设置为true