首页 / JAVA / Java10类型推导
Java10类型推导
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java10类型推导,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3586字,纯文字阅读大概需要6分钟。
内容图文
Java10类型推导
引言
? 2018年3月20日,大家期待已久的Java 10发布了,Java 10推出很多新的特性,比如局部变量类型推导、应用类数据共享、并行全垃圾回收器 G1等等,其中和我们开发者息息相关的就是局部变量类型推导,今天我们就来聊一聊Java 10的局部变量类型推导。
概念
? 所谓的局部变量类型推导其实就是通过增强java语言特性将类型推断扩展到局部变量,它引入了其他语言中很常见的“var”,其表现形式也类似于JavaScript的中的"var",只要编译器可以推断此种类型,你就不再需要专门声明一个局部变量的类型。
应用场景
java 10的局部变量类型推导不是在所有的地方都可以使用的,java10规定:
- 局部变量类型仅限于如下使用场景:
- 局部变量初始化
- for循环内部索引变量
- 传统的for循环声明变量
- 局部变量类型推导它不能用于以下几个地方:
- 方法参数
- 构造函数参数
- 方法返回类型
- ?类的字段
示例代码
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("\u8FD9\u662F\u7B2C"))
.append(number)
.append("\u4E2A\u6D88\u606F:")
.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时,编译器先是查看表达式右边部分,并将它作为变量的类型,然后将该类型写入字节码当中,但是局部变量类型推导现在还不完善,只能在特定的场景下才能使用,不能兼容所有的场景,虽然如此,但是它避免了信息冗余,而且对齐了变量名,更容易阅读。
内容总结
以上是互联网集市为您收集整理的Java10类型推导全部内容,希望文章能够帮你解决Java10类型推导所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。