Java方法中的final变量
可能重复:Java方法中的final变量,java,final,Java,Final,可能重复: 我在检查一些Java代码,我不擅长Java,至少对final有一些了解,比如密封类、只读字段和不可重写的方法,但这看起来很奇怪,在方法中声明了一个变量final: private static void queryGoogleBooks(JsonFactory jsonFactory, String query) throws Exception { // Set up Books client. final Books books = Books.builder(
我在检查一些Java代码,我不擅长Java,至少对final有一些了解,比如密封类、只读字段和不可重写的方法,但这看起来很奇怪,在方法中声明了一个变量
final
:
private static void queryGoogleBooks(JsonFactory jsonFactory, String query) throws Exception {
// Set up Books client.
final Books books = Books.builder(new NetHttpTransport(), jsonFactory)
.setApplicationName("Google-BooksSample/1.0")
.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
@Override
public void initialize(JsonHttpRequest request) {
BooksRequest booksRequest = (BooksRequest) request;
booksRequest.setKey(ClientCredentials.KEY);
}
})
.build();
你能告诉我在这种情况下,final
是什么意思吗
以下是完整的代码:
它只是使局部变量
books
不可变。这意味着它将始终是对正在创建和构建的同一书籍
对象的引用,并且不能更改为引用另一个对象,也不能为null
从访问器调用序列可以看出,
Book
对象本身仍然是可变的。只有对它的引用是不正确的。我很确定这意味着,在以后的方法中,除了可变的书籍之外,没有什么东西是不能被覆盖的 这同样使变量引用为只读。通常,这是为了防止代码意外修改不能更改的变量。在这种情况下,final Books Books
仅意味着必须为Books
指定一个值,且该值必须只指定一次
我喜欢像这样使用final
关键字,因为它显示了变量的意图,在查看代码时,我发现这是有价值的信息,因为它从情况中删除了另一个变量……可以这么说
如果我没有将一个变量标记为final
,那么它就非常值得关注,因为它很快就会改变值。例如,在调试器中单步执行代码或重构和移动代码时,此信息非常有用
- 有关所有内容的进一步阅读
:最终版
书中所指的对象是可变的,这难道一文不值吗?@Doug:是的,我刚刚在我的答案中添加了这一点。谢谢。+1(不过是沧海一粟)
final
在这方面意味着更多。+1对于链接,非常好的解释final
在这个上下文中意味着更多。匿名类没有对变量books的引用。如果是,则会出现编译错误,因为匿名类是在初始化变量之前创建的。