小编典典

var 两种语言在概念上都有某种相似的目的,但有一些重要的区别。

JavaScript是一种动态类型化的语言。变量没有类型信息。它对其包含的内容没有任何限制。它只是一个值的持有人,该值可以是任何类型。

Java是一种静态类型的语言,而对于所有这些语句而言,情况恰恰相反。程序员必须预先说出他们的变量可以容纳什么类型。它们可能像Object(每个类都Object隐式地扩展)一样宽容,或者像一样具体FieldTagTestsVisitorComparator。

Object objectVariable = "hello";

FieldTagTestsVisitorComparator enterpriseVariable = new FieldTagTestsVisitorComparator();

在JavaScript中,我可以非常简洁地编写

var age = 10;

并且我有一个地方可以存储一个值,以后可以读取或操作。

如果稍后我在代码中决定要对该变量重新分配其他内容,则可以这样做。

age = {years: 10, months: 4, days: 5};

您可以清楚地看到哪些声明更适合使用。人们经常抱怨Java的冗长。在上面的示例中,我FieldTagTestsVisitorComparator在同一行上声明了两次。那增加了什么价值?我刚才重复了我自己。

varJava中的Java试图减少重复声明的数量。像之前的Diamond运算符一样,语言设计人员正在尝试改进Java编译器,以使其足够聪明地推断出程序员的意图。如果某些内容可以隐式显示,为什么还要显示呢?

实际上,这意味着从左侧 推导 赋值左侧的变量类型。

如果我用Java写以下内容

var foo = new StringBuilder();

那么Java 10+编译器就足够聪明,可以识别右侧的字符串生成器并自动为变量提供foo适当的类型。

这与JavaScript根本不同,因为尽管我没有指定类型,但类型 仍然存在 。随后,我无法将我喜欢的任何东西分配给它:

foo = 3; // fails to compile, foo is of type StringBuilder

var仅在编译时使用。编译器会计算出类型,然后进行替换,其字节码与从未使用过的相同。两者之间没有功能上的区别

var foo = new StringBuilder();

StringBuilder foo = new StringBuilder();

纯粹是外观上的差异,使语言更具表现力。

关于var的状态的注释

Java语言设计人员在添加新功能时始终非常小心,以免破坏向后兼容性,因此var具有特殊的地位。它不是关键字,因为具有关键字状态会过于严格。关键字不能用作标识符,例如;我不能调用一个方法,if因为它if是一个关键字。

var如您的报价所述,是“保留类型名称”。乍一看听起来很复杂,但实际上是对var状态的描述。它是Java保留的类型的名称。您不能命名类型-类,接口,枚举-

var,因为那样会引起歧义。

您仍然可以在其他所有上下文中自由使用“ var”一词-方法名称,变量标识符等。

通过具有此状态,设计人员可以最大程度地向后兼容(根本不添加任何功能!)。除非您有一个名为小写的类var-首先,您要如何选择这些可怕的名称,其次,您为什么不至少遵循命名约定并调用它Var?-那么您就可以免受任何重大更改的影响。

好的功能,对不对?绝对是重要的,但重要的是不要仅仅因为可以就开始在任何地方使用它。JDK开发人员之一Stuart

Marks有一些出色的样式指南,建议您阅读。

我的经验法则是,如果未在同一行上指定类型(如上述示例中所示),则不使用var。编译器足够聪明,可以从任何有效表达式的结果推断出类型,因此以下内容完全有效:

var foo = bar();

但是,如果不查看方法签名,就无法立即推断出变量的类型是什么。编译器没有歧义,但是对于阅读它的人来说并不清楚。在这种情况下,为了简洁起见,我们牺牲了可读性。

2020-12-03

java中var是什么意思_Java 10中的var是什么?相关推荐

  1. java中无法推断类型参数_Java 10中的本地类型推断,或者如果它像鸭子一样嘎嘎叫...

    java中无法推断类型参数 最近,Oracle采用了一种新策略,即每六个月发布一次新的语言版本. 该策略假定只有每个第3版都将提供长期支持或LTS. 快速说明: 具有LTS的当前版本是Java 8: ...

  2. java私有属性和私有方法_Java 9中什么是私有的?

    java私有属性和私有方法 在进行面试时,我发现大多数应聘者都不知道Java中的private修饰符真正意味着什么. 他们对此有所了解,足以应付日常编码,但还远远不够. 这不成问题. 足够了解就足够了 ...

  3. java方法带参数返回值_Java方法中的参数太多,第6部分:方法返回

    java方法带参数返回值 在当前的系列文章中,我正在致力于减少调用Java方法和构造函数所需的参数数量,到目前为止,我一直专注于直接影响参数本身的方法( 自定义类型 , 参数对象 , 构建器模式 , ...

  4. java什么是反射 代码说明_java编程中,常提到的反射代码指的是什么?

    展开全部 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态e5a48de588b662616964757a686964616f31333335326232或行 ...

  5. java组合与继承始示例_Java示例中的组合

    java组合与继承始示例 Composition in java is the design technique to implement has-a relationship in classes. ...

  6. java 中aop 博客园_Java 10.Spring--AOP编程

    1.创建web项目 2.引入jar包 在原有的jar包加上AOP的jar包 3.日志 4.准备目标对象 先创建接口 在创建实现类 package com.Spring.aop.service; pub ...

  7. java开发用怎么软件开发_Java 9中的5个功能将改变您开发软件的方式(还有2个不会)...

    java开发用怎么软件开发 有望在Java 9中发布的最令人兴奋的功能是什么? 近期不要对Java 9相对沉默而分心.JDK提交者正在努力准备下一个版本,预计在2015年12月才完成功能的下一个版本. ...

  8. java泛型类指定多个泛型_Java泛型中的多态

    java泛型类指定多个泛型 从作为Java程序员的早期开始,我们都知道如何实例化和使用Collection对象. 实例化为具体类的List接口将如下所示. List myArrayList = new ...

  9. java 异常的分类并举例_Java异常处理中的一些特殊情况举例

    只使用try和finally不使用catch的原因和场景JDK并发工具包中,很多异常处理都使用了如下的结构,如AbstractExecutorService,即只有try和finally没有catch ...

  10. java中的23种设计模式_Java开发中的23种设计模式详解

    所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. [J ...

最新文章

  1. 并发编程——线程——锁
  2. 【转】Android 4.4前后版本读取图库图片和拍照完美解决方案
  3. javascript --- Object.assign()浅复制解决方法
  4. java 中 if与while的区别
  5. Hibernate如何存储二级缓存条目
  6. java redis rpush_Redis Rpush 命令
  7. gssh推送 Warning: Permanently added 'gitee.com’to the list of known hosts.
  8. java 解析 cim e 模型 架包,基于JAVA平台的CIM模型潮流数据转换方法及装置与流程...
  9. java tlv协议_看懂通信协议:自定义通信协议设计之TLV编码应用
  10. [转载] python实现三角形面积计算
  11. 【机器学习】概率神经网络(PNN)的python实现
  12. 未能解决并且期待解决的第二个诡异事件----HashMap相关方法
  13. meo学习笔记1:编译是什么——程序的执行过程概述
  14. 代码统计工具实测点评
  15. 华为数通笔记-PPP
  16. 计算机科学湖北的大学排行,2015年湖北省大学最佳专业排行榜
  17. 寒假大一2.15考试
  18. 几十元维修Dreasourcelab的DSLogic Pro 逻辑分析仪?
  19. Wootrade 评级报告:B,展望稳定 | TokenInsight
  20. 班主任工作总结中职计算机网络,中职学校班主任工作总结

热门文章

  1. 2018.8.2课堂笔记
  2. tushare获取上证50成分股与权重写入mysql
  3. android 基站信息说明,安卓android手机查看基站信息
  4. linux下nginx重启命令
  5. 物联网学什么编程语言_物联网开发用什么语言
  6. 面经_黑盒测试与白盒测试
  7. 如何快速win10下安装win7双系统
  8. 繁体字生僻字数据库报错处理
  9. php中拼音转汉字,php 汉字拼音如何转换
  10. java excel下拉框_Java设置Excel下拉列表