JDK10新特性之本地变量类型var的深入理解

简介

java以面向对象的特性显著于世并得到了蓬勃的发展。在语言的发展过程中,为了让java语言更加简洁和方便使用,JDK也在不断的进行改进。

今天本文将要介绍一下JDK10中引入的本地变量类型var。

为什么我们需要var

类型推断是很多编程语言都具有的特性,编译器可以在我们不指定具体变量类型的情况下推断出该变量的实际类型。

类型推断的出现,可以让程序员的代码更加灵活,利于维护和编写。其实我们一直都有使用到类型推断。

JDK8中引入的lambda表达式就是类型推断的一个非常有用的例子:

int maxWeight = blocks.stream().filter(b -> b.getColor() == BLUE).mapToInt(Block::getWeight)
.max();

上面的例子中blocks是一个Stream<Block>类型,在filter中使用到的b实际上就没有指定其类型,它的类型是从Stream中推断出来的。

再看一个线程池的例子:

ExecutorService executorService= Executors.newSingleThreadExecutor();
Runnable runnable=new Runnable() {
 @Override
 public void run() {
  log.info("inside runnable");
  }
 };
 executorService.submit(runnable);

很多时候,我们从变量的名字就已经知道了这个变量到底是什么类型的,那么上面的例子如果用var来改写就可以像这样:

var executorService= Executors.newSingleThreadExecutor();
var runnable=new Runnable() {
 @Override
 public void run() {
   log.info("inside runnable");
  }
 };
executorService.submit(runnable);

代码更加简洁,程序员写起来也更加方便。

如果上面的例子还不能够提起你使用var的兴趣,那么下面的例子你一定很乐意使用var了。

假如我们有一个非常非常长的类名:

ItIsAVeryLongNameJavaClass itIsAVeryLongNameJavaClass= new ItIsAVeryLongNameJavaClass();

写起来是不是超级麻烦,代码看起也非常冗余,这时候我们就可以将其简化为:

var itIsAVeryLongNameJavaClass= new ItIsAVeryLongNameJavaClass();

var使用在什么地方

首先var代表的是本地变量,所以,只有本地变量才能够使用var。

其次var在定义的时候就必须被初始化:

var a; //Invalid Declaration - - Cannot use 'var' on variable without initializer
var a = 100; //Valid Declaration

var可以用在for loop中:

for ( var element : elementList){
  //do something for element
}

或者这种:

for ( var i = 0 ; i < elementList.size(); i++ ){
  System.out.println( elementList.get(i) );
}

var不能用在什么地方

因为var是本地变量类型,它不能用在类变量的定义中,不能用在方法变量中,不能用在构造函数中,不能用在方法返回中,不能用在catch变量定义中。

public class VarIncorrectUsage {

  //var user;  //Not allowed as class fields

  //public VarIncorrectUsage(var param){  //Not allowed as parameter
  //}

  /*try{

  } catch(var exception){  //Not allowed as catch formal 

  }*/

  /*public var returnMethod(){ //Not allowed in method return type
    return null;
  }*/

  /*public Integer parameterMethod( var input ){ //Not allowed in method parameters
    return null;
  }*/
}

注意,var在JVM无法推断其类型或者可以有很多类型的情况下不能够使用:

var ints = {1, 2, 3};
var lambda = a -> a;
var methodReference = String::concat;

上面例子中数组初始化,lambda表达式和方法引用都是不能用var的。

其他var的特点

var不是关键字,所以我们可以使用var来做变量名字:

var var = 2;  //Valid Declaration

int var = 2;  //Also valid Declaration

因为var是JDK10引入的概念,所以不是向下兼容的。不能够用低版本的编译器来编译var。

var不会影响性能,因为var是在代码编译器进行的类型推断,所以并不会影响到性能。

本文的例子[https://github.com/ddean2009/

learn-java-base-9-to-20](https://github.com/ddean2009/...

总结

var是JDK10中引入的一个新的特性,希望大家可以喜欢。

到此这篇关于JDK10新特性之本地变量类型var的文章就介绍到这了,更多相关JDK10新特性之本地变量类型var内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java JDK1.5、1.6、1.7新特性整理

    一.Java JDK1.5的新特性 1.泛型: List<String> strs = new ArrayList<String>();//给集合指定存入类型,上面这个集合在存入数据的时候必须存入String类型的数据,否则编译器会报错 2.for-each 例如上面这个集合我们可以通过for-each遍历,这样更加简单清晰 for(String s : strs){ System.out.println(s); } 注意:使用for-each遍历集合时,要遍历的集合必须实现了It

  • Windows10系统下JDK1.8的下载安装及环境变量配置的教程

    点击此处:官网下载根据自己的系统 ,下载相应的JDK版本. 1. JDK1.8安装 1.双击下载的安装包(.exe文件),进行安装. 2.点击"下一步" 3.这里可以自行选择安装目录,笔者选择安装在D盘.点击"更改",进入文件夹,在D盘中相应的位置建立与默认文件夹同名的文件夹. 4.稍等片刻. 5.与第3步相同,(第6,7步给出详细步骤). 6.浏览本地文件夹. 7.新建文件夹,名称与默认文件夹名称相同. 8.等待安装完成 9.成功安装,点击"关闭&quo

  • 深入浅析JDK8新特性之Lambda表达式

    第一次是接触Lambda表达式是在TypeScript中(JavaScript的超集中),当时是为了让TypeScript的this方法外而不是本方法内所使用的.使用过后突然想到Lambda不是JDK8的重量级新特性么?于是感觉查阅相关资料并记录下来: 一. 行为参数化 行为参数化简单的说就是函数的主体仅包含模板类通用代码,而一些会随着业务场景而变化的逻辑则以参数的形式传递到函数之中,采用行为参数化可以让程序更加的通用,以应对频繁变更的需求. 考虑一个业务场景,假设我们需要通过程序对苹果进行筛选

  • JDK 14的新特性:文本块Text Blocks的使用

    说起来,Text Blocks是在JDK13中以第一次预览版本引入的.现在在JDK14中是第二次预览版本 JEP 368: Text Blocks. 在我们日常的工作中,有时候需要用到一大段的字符串,这些字符串需要换行,需要排版,需要转义.在一个文本编辑器中,这当然是非常容易的事情.但是在java代码中,就是一个噩梦了. 虽然IDE可以自动帮我们加上换行甚至可以对字符串进行拼接.但在java程序眼中,添加的诸多额外的代码破坏了代码的美感.是任何一个有洁癖的程序员都无法忍受的. 怎么办? Text

  • windows10 JDK安装及配置环境变量与Eclipse安装教程

    Windows10 JDK安装及配置环境变量与Eclipse安装 没有什么技术含量,和大家简单分享一下,能看就好. 一 下载JDK https://www.oracle.com/technetwork/java/javase/overview/index.html 选择版本,系统,下载对应的安装包. 二 安装JDK 选择Windows64位安装包下载,完成后安装. 和平时安装软件一样,点下一步就行,可以自己修改安装位置,下一步之后开始安装,JRE与之相同. 三 环境变量配置安装完成后,我们需要配

  • JDK8新特性之判空遍历写法

    在工作中,经常会处理各种变量,但往往会在使用变量的时候,要进行空判断,不然要报错. Java 8 提供了判空写法: Optional.ofNullable(变量).orElse(默认值): 例1:求字符串 s 的长度( 为空的时候返回0 ). 常规写法: String s = getKey(); if (s == null) { return 0; } else { return s.length(); } Java 8 写法: String s = getKey(); return Optio

  • JDK13.0.1安装与环境变量的配置教程图文详解(Win10平台为例)

    一.下载与安装 Oracle官网下载:https://www.oracle.com/technetwork/java/javase/downloads/index.html,点击右侧下载 接受并下载对应平台文件(Win10为例) 打开安装包,一路安装,记住安装目录即可(安装路径无中文) 我的路径:F:\Java\jdk-13.0.1 下载安装完成 二.配置环境变量 JDK12以后是没有JRE的安装的,JDK本身包含JRE,网上有生成JRE的方法,这里我们直接修改环境变量(后续遇到问题在进行更正)

  • win10 java(jdk安装)环境变量配置和相关问题

    写在前面的话 咱也不喜欢废话,图片和方法我都会特别标注出来的,方法绝对详细,并且会把各个细节标注出来. 刚开始学习java在环境配置上遇到了很多问题,东看看西看看最终还是解决了.感觉自己碰到的问题蛮全的,这里统一写一篇文章,不光是做个纪录也是方便大家互相学习解决. 前置条件(阅读以下内容需要掌握的知识) 有一台装配了win10的电脑,可以连接网络懂得基本的电脑操作即可. 其他的按照本教程来一遍就可以,保证达到最终配置成功的目的. 准备 先了解一下java JVM :英文名称(Java Virtu

  • JDK 7 新特性小结实例代码解析

    1.switch支持String做参数 /*** * switch支持字符串做参数 jdk7 * @author huangjiawei */ public class SwitchTest { public static void switchTest(String arg) { switch (arg) { case "Lisa": System.err.println("我是Lisa!"); break; case "Mike": Syst

  • JDK14的新特性NullPointerExceptions的使用

    JDK 14的新特性:更加好用的NullPointerExceptions 让99%的java程序员都头痛的异常就是NullPointerExceptions了.NullPointerExceptions简称NPE,它是运行时异常的一种,也是java程序中最最容易出现的异常. 出现了NullPointerExceptions之后我们怎么处理呢? 一般情况下就是看日志,看一下到底哪一行出错了.如果这一行只有简单的代码,那么很容易就找到问题所在. 要命的是如果这一行很复杂,那么找出问题就不是那么容易

随机推荐