Java10类型推导
Java10类型推导
引言? 2018年3月20日,大家期待已久的Java 10发布了,Java 10推出很多新的特性,比如局部变量类型推导、应用类数据共享、并行全垃圾回收器 G1等等,其中和我们开发者息息相关的就是局部变量类型推导,今天我们就来聊一聊Java 10的局部变量类型推导。 概念? 所谓的局部变量类型推导其实就是通过增强java语言特性将类型推断扩展到局部变量,它引入了其他语言中很常见的“var”,其表现形式也类似于JavaScript的中的"var",只要编译器可以推断此种类型,你就不再需要专门声明一个局部变量的类型。 应用场景java 10的局部变量类型推导不是在所有的地方都可以使用的,java10规定:
示例代码1.在定义局部变量的时候使用在定义局部变量时,使用var来定义。 package cn.itcast.demo; public class Demo1 { public static void main(String[] args) { var number = 1; var message ="Hello itcast"; System.out.println("这是第"+number+"个消息:"+message); } } 运行效果如下:分析? 由上面的代码我们发现,在定义局部变量的时候我们使用了var来定义变量,并不会出现编译错误,并且执行也没有任何的问题。查看.class文件我们会发现: package cn.itcast.demo; import java.io.PrintStream; public class Demo1 { public Demo1() { } public static void main(String args[]) { int number = 1; String message = "Hello itcast"; System.out.println((new StringBuilder("u8FD9u662Fu7B2C")) .append(number) .append("u4E2Au6D88u606F:") .append(message).toString()); } } 虽然在定义局部变量的时候我们使用了var来定义,但是将java文件转化成.class文件的时候,会根据变量的值的具体类型推导出变量的类型,1是数字所以推导为了int类型,"Hello itcast"是字符串所以推导为了String类型。 小结? 通过上面的示例我们知道在定义局部变量的时候可以像javascript一样使用var来定义,在java文件转化成.class文件的时候会根据变量值的类型推导出变量的类型。 2.for循环内部索引变量和内部设置变量时使用在进行for循环的时候,内部的索引变量可以使用var来定义。 package cn.itcast.demo; public class Demo2 { public static void main(String[] args) { var msgs = new String[]{"itcast","itheima"}; for (var i = 0; i < msgs.length; i++) { var str="你好!"; System.out.println(str+msgs[i]); } } } 运行效果如下:小结? 通过上面的示例我们发现var也可以用在for循环内部定义索引变量时使用,通过也可以在for内部定义局部变量时使用。 3.var不能定义方法的参数的类型在定义方法的时候,var是不能作为方法的参数类型来使用。 package cn.itcast.demo; public class Demo3 { public void show(var message) { System.out.println(message); } } 如上所示,在方法中使用var来定义参数的类型的时候,是直接会报编译错误。 4.var不能定义构造函数的参数的类型package cn.itcast.demo; public class Demo4 { public Demo4(var message) { } } 如上所示,在方法中使用var来定义构造函数的参数的类型的时候,是直接会报编译错误。 5.var不能作为方法的返回值的类型package cn.itcast.demo; public class Demo5 { public var show() { return "Hello itcast"; } } 如上所示,当var作为方法的返回值的类型的时候,是直接会报编译错误。 5.var不能用来定义类的字段的类型package cn.itcast.demo; public class Demo6 { public var id; private var name="张三"; private var password=123456; } 如上所示,当使用var来定义类的字段的类型的时候,是直接会报编译错误。 小结? 通过上面的示例我们发现当使用var作为方法参数、方法返回值类型、声明定义字段等的时候直接会报出编译错误,也就表示var在定义变量的时候并不是万能的。 总结? 局部变量类型推导是java10推出的新特性之一,通过示例我们发现在处理var时,编译器先是查看表达式右边部分,并将它作为变量的类型,然后将该类型写入字节码当中,但是局部变量类型推导现在还不完善,只能在特定的场景下才能使用,不能兼容所有的场景,虽然如此,但是它避免了信息冗余,而且对齐了变量名,更容易阅读。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 编程语言 – 为什么闭包突然对优化程序在多个内核
- java – log4j RollingFileAppender与DailyRolli
- java – 通过maven和spring使用liquibase文件路径
- 微信公众平台开发实战Java版之微信获取用户基本信
- 如何调试Java Web Start应用程序?
- Java Chaos Game噪声游戏实例代码
- rx-java – RxJava中的CompositeDisposable是什么
- java – cobertura vs clover
- 我们如何将com.datastax.driver.core.LocalDate转
- java – 替换string中的重复子字符串