在运行时在逻辑块内部初始化的局部变量的执行?

时间:2018-10-26 06:25:40

标签: java variables local-variables

为什么在逻辑块内初始化局部变量(如if-else)可能会在Java运行时执行,也可能不会执行?例如,请参见以下代码:

func requestWith<T>(method: HTTPMethod, action: String,  params: Parameters?, for type: T.Type, success: @escaping (AnyObject) -> Void, failure: @escaping (AnyObject) -> Void) where T: Codable {


//do your stuff..your logic goes here..see below example

     guard let serverData = response.data else {
           return
        }

   do {
     let decoder = JSONDecoder()
     let responseData = try decoder.decode(type, from: serverData)
       success(responseData as AnyObject)
    } catch {
      print("Error = \(error.localizedDescription)")
       failure(error.localizedDescription as AnyObject)
   }

}

如果我只是使用 javac Test.java 进行编译,它将显示编译时错误,并在传递任何命令行参数时将输出10输出。

1 个答案:

答案 0 :(得分:1)

您的代码中的问题在于,对于空的参数列表,x在执行System.out.print(x)之前不会被初始化。

与成员变量相反,局部变量未使用默认值初始化;在x = 10之前,其值未定义,您无法访问该变量。您可以将其声明为int x = 0,自己给它一个默认值。