由于微信中对代码排版不是很友好,你需要点击页尾左下角的“阅读原文”,才能有更好的阅读体验。

我在公众号里发表的这篇文章《Java 11 更新了 String 字符串 API,你得重新认识它》被人评论说我 JavaScript 写多了,var 变量都出来。然后我给他解释,这是 java 10 的新特性,不是我 js 代码写多了。目前看来关于 java 10 中 var 这个关键词还有很多人没有使用过。所以今天我们一起就来抽个时间学习学习它!

Java 10 是在2018年3月20号正式发布的,其中的新特性之一就是 var 关键字。它将我们常常在JS里面使用的var 变量引入到语言特性中,把我们从那些冗长的变量声明中解放出来。以后我们在声明变量时,可以采用下面的方式:

1var xttblog = new ArrayList<Xttblog>();

大家都知道 java 是一门强类型语言。也就是要显式声明各个变量的确切类型,稍有不慎编译器就会报错。例如我们创建一个对象,输入两次类型,一次是引用类型声明,另一次是构造函数。如下面的用法:

1String xttblog = new String("业余草:www.xttblog.com");

再比如,一个方法的返回类型是 Xttblog,那我们必须使用 Xttblog 类型来接受这个返回值。比如下面的代码:

1Xttblog xttblog = XttblogCom.getXttblog();

讨厌 java 的人,经常吐槽 java 的强类型语言。它太麻烦了,让人头大。现在有了 java 10 的 var 关键字,一切都变的那么简单。

var 类型推断机制

程序在处理 var 类型时,编译器先是查看表达式右边部分,也就是所谓的构造器,并将它作为变量的类型,然后将该类型写入字节码当中。

那么这么说,是不是我以后只用 var 类型,其他类型都可以不用呢?

当然不行,如果这样的话,其他基本数据类型还有存在的必要吗?而且我上面说了,编译器在处理时,会自动的判断右侧是什么类型,并将它作为变量类型。常见的类似,下面的使用就不被允许:

var foo; foo = "Foo";var ints = {0, 1, 2};var appendSpace = a -> a + " ";private var getFoo(){}

java 官方强调了,var 只能用于带有构造器的局部变量,唯一例外的是 for 循环:

var numbers = List.of("a", "b", "c");for (var nr : numbers)System.out.print(nr + " ");for (var i = 0; i < numbers.size(); i++)System.out.print(numbers.get(i) + " ");

JEP 286’的标题是“局部变量类型推断”, 看名称就可以知道使用范围:局部变量。更加确切的说法是:具有初始化器的局部类型变量声明。所以你们不要把它想的太强大,太无敌了。

var foo;foo = "www.xttblog.com";// 错误用法var foo = "xttblog.com";// 正确用法

通过上面的举例,我们得出一个结论。字段、方法签名、catch子句仍然需要显示类型声明。

还有 var 类型一旦确定具体的变量类型后,就不能再变更类型了。比如下面的这些用法,都是错误的:

var users = new ArrayList<User>();users = new LinkedList<>();var id = 123;if (id < 100) {    id = "业余草:www.xttblog.com";} else {    // 业余草:www.xttblog.com}

根据 java 的官方调查得知,var 类型的推出,74% 的用户都是支持的,12% 的中度支持。反正我也是支持的,就算你想拒绝也是拒绝无效!

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847,QQ3群:187424846。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

转发就是对我最大的支持!

©著作权归作者所有:来自51CTO博客作者mob604756f06ed8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 这样使用 ThreadLocal 对吗?
  2. 随机森林(R语言)
  3. C/C++判断数据类型与顶层const与底层const的区分
  4. 深度学习框架浅析
  5. 浅谈Java:Volatile浅析
  6. 2021年如何快速上手PHP8.0
  7. JavaScript中的预解析(变量提升)介绍!
  8. Go语言学习笔记2
  9. C语言中static 试题

随机推荐

  1. 2013.12.03 ——— android onPrepareOpt
  2. “android studio 运行程序提示Applicati
  3. android 开源项目推荐
  4. Android 导入多个外部静态链接库, 进行动
  5. 小知识:android
  6. Android Wear Preview- 创建通知(Creating
  7. Could not find com.android.tools.build
  8. Android实现CoverFlow效果
  9. Android中的BinderProxy.finalize()或Pla
  10. Android 学习资源