为什么在逻辑块内初始化局部变量(如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输出。
答案 0 :(得分:1)
您的代码中的问题在于,对于空的参数列表,x
在执行System.out.print(x)
之前不会被初始化。
与成员变量相反,局部变量未使用默认值初始化;在x = 10
之前,其值未定义,您无法访问该变量。您可以将其声明为int x = 0
,自己给它一个默认值。