04JVM_语法糖

一、编译期处理

语法糖java编译器把*.java源码编译为*.class字节码的过程中,自动生成和转换的一些代码(添加的class字节码),减轻程序员的负担。

1.默认构造器

默认构造器没有写任何的构造方法,但经过编译器编译成字节码过程中,会加上调用父类Object的无参构造方法。调用java/lang/Object.”<init>”()V

2.自动拆装箱

①在JDK 5之前,基本类型int转换成包装类型Integer需要手动装箱

Integer x = Integer.valueOf(2);

包装类型Integer转换为基本类型int需要手动拆箱

int y = x.intValue();

②在JDK 5 之后,由编译器在编译阶段实现自动拆装箱

补充:

Integer在-128~127会复用对象。地址相同

3.泛型集合取值

1.泛型擦除

JDK5后,java在编译泛型代码后执行泛型擦除的动作,泛型信息都当作Object类型处理。

取值的时候会进行Object强制类型转换。

 

①当调用list.add(10)时,实际调用的是list.add(Object e)这个方法。把泛型信息当成Object处理

②当调用 Integer x = list.get(0),实际调用Object obj = list.get(int index)方法。最后Object类型转换为Integer。Integer x = (Integer)list.get(0)

③如果调用 int x = list.get(0)。类型转换是int x = ((Integer)list.get(0)).intValue();

2.泛型反射

局部变量类型表LocalVariableTable:方法内参数的泛型信息

只有方法参数方法返回值,带的泛型信息才能反射获取到。

 

4.可变参数

可变参数是JDK 5加入的特性,String... args其实是String []

调用foo(实参1,实参2)方法,编译器会根据实参的数量生成一个String数组new String[]{”hello”,”world”}

注意:

如果调用foo()无参方法,那么创建一个空的数组new String[]{},而不是传递null

4.foreach循环

数组循环,JDK 5 加入语法糖,按照下标区遍历的循环结构

①int[] array = {1, 2, 3, 4, 5};编译器转换

int[] array = new int[] {1, 2, 3, 4, 5};

②int e: array 编译器会转换为按照下标区遍历的循环结构。

集合循环

foreach循环被编译器转换为迭代器的调用 list.iterator()

注意:

foreach循环,配合数组和实现了Iterator()接口的集合类一起使用。

5.switch字符串

JDK7开始switch可以用字符串枚举类

switch配合字符串枚举类,变量不为null.编译后的字节码文件如下。

第一遍是根据字符串的hashCode和equals将字符串转换为byte类,第二遍根据byte进行比较。

 

 6.switch枚举

原始代码

 

 

转换后代码

①定义一个合成类,用来映射枚举的ordinal与数组关系

②枚举的ordinal表示枚举对象的序号,从0开始

③MALE的ordinal()=0,FEMALE的ordinal()=1

 

7.枚举类

JDK 7 新增

枚举类本质是class,枚举值是class的一个对象。

 转换后

 8.try-with-resources关闭资源处理

①JDK 7 开始,只要资源对象实现了AutoCloseable接口(文件输入输出流),使用try-with-resources不用写finally语句。编译器在finally会新增正常结束或者抛出异常的方法。

②设计一个addSuppressed(Throwable e)添加被压制异常的方法呢?

为了防止异常信息的丢失。

9.方法重写时的桥接方法

方法重写时返回值有2种情况

①子类的返回值跟父类一致

②子类的返回值是父类返回值的子类

对于子类的返回值是父类返回值的子类。编译器会自动生成一个重写父类的方法,采用桥接的方式

public synthetic bridge Number m()调用子类的方法,同时符合重写的规则。

10.匿名内部类

源代码 

转换后的代码

①生成一个额外的类Candy11$1实现Runnable接口。

 ②创建匿名内部类Candy11$1的对象

注意:

匿名内部类引用局部变量时,局部变量必须是final不可变的。因为编译器在创建匿名对象时,将复制给匿名对象的value属性,x就不能发生变化了,值固定住了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/130308.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark2x原理剖析(二)

一、概述 基于社区已有的JDBCServer基础上&#xff0c;采用多主实例模式实现了其高可用性方案。集群中支持同时共存多个JDBCServer服务&#xff0c;通过客户端可以随机连接其中的任意一个服务进行业务操作。即使集群中一个或多个JDBCServer服务停止工作&#xff0c;也不影响用…

Newman+Jenkins实现接口自动化测试

一、是什么Newman Newman就是纽曼手机这个经典牌子&#xff0c;哈哈&#xff0c;开玩笑啦。。。别当真&#xff0c;简单地说Newman就是命令行版的Postman&#xff0c;查看官网地址。 Newman可以使用Postman导出的collection文件直接在命令行运行&#xff0c;把Postman界面化运…

Fourier傅里叶变换的线性性质和位移性质

Fourier傅里叶变换的线性性质和位移性质 为了阐述方便, 假定在这些性质中, 凡是需要求Fourier变换的函数都满足Fourier积分定理中的条件。在证明这些性质时, 不再重述这些条件。 一、线性性质 设 F 1 ( ω ) F [ f 1 ( t ) ] {F_1}(\omega ) {\mathscr F}[{f_1}(t)] F1​(…

2024苹果手机软件备份软件工具iMazing

很多人都会忘记备份iOS 资料&#xff0c;或者因为设置备份时间、位置等不到位&#xff0c;导致需要用的时候找不到备份。接下来&#xff0c;小编就来教大家iMazing软件备份功能的几个设置小技巧&#xff0c;都在软件界面的“选项”内调整&#xff0c;减少备份过程中的出错。 图…

OpenHarmony社区运营报告(2023年8月)

本月快讯 2023年8月3日&#xff0c;OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;发布了Beta2版本。OpenHarmony 4.0 Beta2在系统能力、应用框架、分布式通信、媒体功能、安全性等方面进行了全面升级。其中&#xff0c;ArkUI增强了界面组件能力&#x…

Docker Swarm

Docker Swarm提供 Docker 容器集群服务&#xff0c;是 Docker 官方对容器云生态进行支持的核心方案。将多个 Docker 主机封装为单个大型的虚拟 Docker 主机&#xff0c;快速打造一套容器云平台。 Swarm mode内置 kv 存储功能&#xff0c;提供了众多的新特性&#xff0c;比如&a…

报错ssh: Could not resolve hostname

…按照网上好多教程试了一下&#xff1a; 新建密钥&#xff0c;添加到gitee&#xff0c;重新测试。修改host&#xff0c;加入gitee的ip地址到里面去。修改.gifconfig配置文件&#xff0c;配置成ssh的仓库链接。 这上面的方法都不行&#xff0c;后面发现一篇文章&#xff1a;SS…

c语言flag的使用

flag在c语言中标识某种状态或记录某种信息&#xff0c;可以通过修改flag中来控制程序流程,判断某种状态是否存在或记录某种信息 操作:(1)初始化 (2)赋值 (3)判断 (4)修改 (5)去初始化 #include <stdlib.h>int power_state_check;int main() {int i 0;power_state_check…

GC 算法与种类

对于垃圾收集&#xff08;GC&#xff09;, 我们需要考虑三件事情&#xff1a;哪些内存需要回收&#xff1f;如何判断是垃圾对象&#xff1f;垃圾回收算法有哪些&#xff1f; 一、GC的工作区域 1、不是GC的工作区域 (1)程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的&…

计算机视觉领域经典模型汇总(2023.09.08

一、RCNN系列 1、RCNN RCNN是用于目标检测的经典方法&#xff0c;其核心思想是将目标检测任务分解为两个主要步骤&#xff1a;候选区域生成和目标分类。 候选区域生成&#xff1a;RCNN的第一步是生成可能包含目标的候选区域&#xff0c;RCNN使用传统的计算机视觉技术&#x…

1905. 统计子岛屿

给你两个 m x n 的二进制矩阵 grid1 和 grid2 &#xff0c;它们只包含 0 &#xff08;表示水域&#xff09;和 1 &#xff08;表示陆地&#xff09;。一个 岛屿 是由 四个方向 &#xff08;水平或者竖直&#xff09;上相邻的 1 组成的区域。任何矩阵以外的区域都视为水域。 如…

记录第一次带后端团队

在过去的一个半月里我第一次作为后端开发组长角色参与公司项目从0到1的开发&#xff0c;记录这一次开发的经历。 1、背景介绍 首先说明一下背景。我所在的公司是做智慧社区相关业务&#xff0c;开发的项目是系统升级工具&#xff0c;方便公司实施同事安装和升级系统。 参与后…

借助ChatGPT使用Pandas实现Excel数据汇总

一、问题的提出 现在有如下一个Excel表&#xff1a; 上述Excel表中8万多条数据&#xff0c;记录的都是三年以来花菜类的销量&#xff0c;现在要求按月汇总实现统计每个月花菜类的销量总和&#xff0c;如果使用Python的话要给出代码。 二、问题的解决 1.首先可以用透视表的方…

冒泡排序、选择排序、插入排序、希尔排序

冒泡排序 基本思想 代码实现 # 冒泡排序 def bubble_sort(arr):length len(arr) - 1for i in range(length):flag Truefor j in range(length - i):if arr[j] > arr[j 1]:temp arr[j]arr[j] arr[j 1]arr[j 1] tempflag Falseprint(f第{i 1}趟的排序结果为&#…

ElasticSearch入门

一、基本命令_cat 1、查看节点信息 http://192.168.101.132:9200/_cat/nodes2、查看健康状况 http://192.168.101.132:9200/_cat/health3、查看主节点的信息 http://192.168.101.132:9200/_cat/master4、查看所有索引 http://192.168.101.132:9200/_cat/indices二、索引一…

思科的简易配置

vlan 划分配置 1. 拓扑连接 2. 终端设备配置&#xff0c;vlan(v2, v3)配置&#xff0c;模式设置 然后设置交换机 fa 0/5 口为 trunk 模式&#xff0c;使得不同交换机同一 vlan 下 PC 可以互连 3.测试配置结果 用 ip 地址为 192.168.1.1 的主机(PC0)向同一 vlan(v2)下的 192.…

PN结解释

基本原理 PN结由P和N组成 硅掺杂硼&#xff0c;缺少电子&#xff0c;显正电&#xff0c;就是P&#xff08;Positive&#xff09; 硅掺杂磷&#xff0c;多出电子&#xff0c;显负电&#xff0c;就是N&#xff08;Negative&#xff09; 将P和N拼接 左边代表游离的电子&#xf…

想要精通算法和SQL的成长之路 - 课程表II

想要精通算法和SQL的成长之路 - 课程表 前言一. 课程表II &#xff08;拓扑排序&#xff09;1.1 拓扑排序1.2 题解 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 课程表II &#xff08;拓扑排序&#xff09; 原题链接 1.1 拓扑排序 核心知识&#xff1a; 拓扑排序是专…

AI是风口还是泡沫?

KlipC报道&#xff1a;狂热的人工智能追捧潮有所冷静&#xff0c;投资者在“上头”的追涨之后&#xff0c;开始回归到对基本面的关注。 KlipC的合伙人Andi D表示&#xff1a;“近日&#xff0c;有关英伟达二季度“破纪录”财报涉嫌造假的话题正在社交媒体和投资者论坛中甚嚣尘上…

XShell7 + Xftp7 + IDEA 打包MapReduce程序到集群运行

参考博客 【MapReduce打包成jar上传到集群运行】http://t.csdn.cn/2gK1d 【Xshell7/Xftp7 解决强制更新问题】http://t.csdn.cn/rxiBG IDEA打包MapReduce程序 这里的打包是打包整个项目&#xff0c;后期等学会怎么打包单个指定的mapreduce程序再来更新博客。 1、编译打包 …