(1)Python基础
几种常用类型 int float str bool 基本数值操作 绝对值 abs 四舍五入 round 最大值&最小值 知识在于点滴积累
现在 Java 9 被遗弃了直接升级到了 Java 10,之前也发过 Java 10 新特性的文章,现在是开始实战 Java 10 的时候了。
今天要实战的是 Java 10 中最重要的特性:局部变量类型推断,大家都知道是 var 关键字,但具体怎么使用,及要注意什么要点呢?
我们通过几个例子来讲解局部变量类型推断这个新特性!
var javastack = "javastack";
System.out.println(javastack);
大家看出来了,局部变量类型推断就是左边的类型直接使用 var 定义,而不用写具体的类型,编译器能根据右边的表达式自动推断类型,如上面的 String 。
var javastack = "javastack";
就等于:
String javastack = "javastack";
既然叫局部变量类型推断,以只能用在局部变量中,下面给出更多使用示例。
1、字面量定义局部变量
private static void testVar() {
var javastack = "javastack";
System.out.println(javastack);
}
2、接收方法返回值定义局部变量
private static void testMethod() {
var javastack = getJavastack();
System.out.println(javastack);
}
public static String getJavastack() {
return "javastack";
}
3、循环中定义局部变量
private static void testLoop() {
for (var i = 0; i < 3; i++) {
for (var m = 10; m < 15; m++) {
System.out.println(i + m);
}
}
}
4、泛型结合局部变量
private static void testGeneric() {
// 表达式1
List<String> list1 = new ArrayList<>();
list1.add("javastack");
// 表达式2
var list2 = new ArrayList<>();
list2.add(2018);
// 表达式3
var list3 = new ArrayList<String>();
list3.add("javastack");
}
表达式1后面 <> 里面 jdk 1.7+开始是不用带具体类型的,在接口中指明就行了。
表达式2中如果使用 var 的话,<> 里面默认会是 Object 的,所以可以添加任意类型。
表达式3中在 <> 强制使用了 String 来指定泛型。
1、类成员变量类型
// 编译报错
private var javastack = "Java技术栈";
2、方法返回类型
/**
* 编译报错
* @return
*/
public static var getJavastack(){
return "Java技术栈";
}
3、Lambda 表达式
private static void testLambda() {
Runnable runnable = () -> System.out.println("javastack");
// 编译报错
// var runnable = () -> System.out.println("javastack");
}
以上 3 种场景是肯定不能使用 var 的,其他场合有待验证。
优点:简化代码
CopyOnWriteArrayList list1 = new CopyOnWriteArrayList();
ConcurrentModificationException cme1 = new ConcurrentModificationException();
DefaultServiceUnavailableRetryStrategy strategy1 = new
DefaultServiceUnavailableRetryStrategy();
var list2 = new CopyOnWriteArrayList<>();
var cme2 = new ConcurrentModificationException();
var strategy2 = new DefaultServiceUnavailableRetryStrategy();
从以上代码可以看出,很长的定义类型会显得代码很冗长,使用 var 大大简化了代码编写,同时类型统一显得代码很对齐。
缺点:掩盖类型
var token = new JsonParserDelegate(parser).currentToken();
看以上代码,不进去看返回结果类型,谁知道返回的类型是什么?所以这种情况最好别使用 var,而使用具体的抽象类、接口或者实例类型。
var其实就是 Java 10 增加的一种语法糖而已,在编译期间会自动推断实际类型,其编译后的字节码和实际类型一致,如以下例子所示。
private static void testByteCode() {
String javastack1 = "javastack";
var javastack2 = "javastack";
}
编译成字节码后:
private static testByteCode()V
L0
LINENUMBER 22 L0
LDC "javastack"
ASTORE 0
L1
LINENUMBER 23 L1
LDC "javastack"
ASTORE 1
L2
LINENUMBER 24 L2
RETURN
L3
LOCALVARIABLE javastack1 Ljava/lang/String; L1 L3 0
LOCALVARIABLE javastack2 Ljava/lang/String; L2 L3 1
MAXSTACK = 1
MAXLOCALS = 2
可以看出 javastack1 和 javastack2 都是虚拟机所认识的的本地变量类型:java.lang.String,虚拟机并不认识 var, 所以 var 并不神奇。
OK,本次 Java 10 局部变量类型推断实战文章就到这里了,后续带来更多的 Java 10 的实战方面的文章。
教程:史上最强 Spring Boot & Cloud 教程汇总
扫描关注我们的微信公众号,回复 "666" 可获取一套Java并发编程高清视频教程。
微信关注我们
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。
为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。