当前位置: 首页 > news >正文

Java语法糖

Java语法糖

Switch支持String与枚举

Java的switch自身支持int和char进行,int进行数值比较,char是比较ascii码。在Java7中支持String ,是通过switch 是通过equals()hashCode()方法来实现的,它比较的是哈希值,通过equals进行安全检查,会发生碰撞

泛型

参数类型用其左边界类型替换,移除所有的参数类型

泛型类型参数在编译时会被擦除,泛型类没有自己的List.class类对象,只有List.class

可变长参数

可变长参数在被使用时,其实是创建一个数组,数组的长度就是调用该方法的参数个数,再把参数放进数组中进行传递

枚举

使用enum来定义一个枚举类型,编译器会创建一个final类型继承Enum,该类是继承Enum类,同时final类修饰不能被继承

内部类

一旦编译成功,是两个不同的class文件

条件编译

在代码中,根据if判断条件真假,编译器直接将else代码块抹除

断言

public class AssertTest {public static void main(String args[]) {int a = 1;int b = 1;assert a == b;System.out.println("公众号:Hollis");assert a != b : "Hollis";System.out.println("博客:www.hollischuang.com");}
}

断言底层就是if语言,结果为true就什么都不做,为false就是抛出 AssertError 来打断程序的执行

数值字面量

在 java 7 中,数值字面量,不管是整数还是浮点数,都允许在数字之间插入任意多个下划线

反编译后就是把_删除了。也就是说 编译器并不认识在数字字面量中的_,需要在编译阶段把他去掉

public class Test {public static void main(String... args) {int i = 10_000;System.out.println(i);}
}

For-each

内部使用了普通的for循环和迭代器

try-with-resource

在finally中关闭资源的操作,编译器帮我们做了

可能遇到的坑

泛型

1.泛型遇到重载
public class GenericTypes {public static void method(List<String> list) {System.out.println("invoke method(List<String> list)");}public static void method(List<Integer> list) {System.out.println("invoke method(List<Integer> list)");}
}

编译是通过不了的,因为编译时泛型擦除,导致两个List集合参数

2.泛型遇到catch

因为泛型擦除的原因,JVM 是无法区分两个异常类型MyException<String>MyException<Integer>的,所以不能再catch块中使用泛型

3.泛型内包含静态变量
public class StaticTest{public static void main(String[] args){GT<Integer> gti = new GT<Integer>();gti.var=1;GT<String> gts = new GT<String>();gts.var=2;System.out.println(gti.var);}
}
class GT<T>{public static int var=0;public void nothing(T x){}
}

输出是2,经过泛型擦除后,对应到一份class文件gti.var和gts.var是一个变量

自动装箱和拆箱

public static void main(String[] args) {Integer a = 1000;Integer b = 1000;Integer c = 100;Integer d = 100;System.out.println("a == b is " + (a == b));System.out.println(("c == d is " + (c == d)));
}
a == b is false
c == d is true

==在比较引用类型,比较的是地址,但是有常量池,在-128~127之间的引用是相同的

增强for

for (Student stu : students) {if (stu.getId() == 2)students.remove(stu);
}
会抛出ConcurrentModificationException异常。

内部只能使用迭代器本身的方法进行修改不然会报错


http://www.mrgr.cn/news/25796.html

相关文章:

  • 【网络安全】-ssrf服务器请求伪造攻击-burp
  • 智汇云舟斩获创客北京2024鲲鹏应用创新大赛北京区总决赛一等奖
  • 帮领导、客户代买火车票,公司报销怎么开发票?
  • Zookeeper工作机制、特点、数据结构、应用场景、配置参数解读
  • 便宜好用的无人机集群组网技术详解
  • 稀有 Punk 10E 到手?「捡漏」的背后是一个已停止运营的 NFT 碎片化协议
  • Unity3D 实现水体交互详解
  • Java 17 LTS-增强的 switch 表达式
  • 18 C语言实现深度优先搜索
  • 介绍 Apache Spark 的基本概念和在大数据分析中的应用。
  • OpenAI发布最强推理模型o1,它真的会思考,但API比4o贵好几倍
  • VMware替换需重点关注这件事,可能直接影响迁移的成败
  • AI图像篡改检测:如何识破Deepfake的虚假伪装?
  • 自己掏耳朵怎么弄干净?可视挖耳勺排行榜!
  • linux入门到实操-4 linux系统网络配置、连接测试、网络连接模式、修改静态IP、配置主机名
  • 惠海升压恒流芯片ICH6901B支持2.7V3.7V升12V24V36V48V60V100V调光无频闪 300W大功率应急灯
  • 家庭期待与学业重压:青少年心理健康的双重挑战
  • ️ 保护您的 JavaScript:安全和隐私的最佳实践
  • 稀土长余辉发光剂能让玩具发光吗?
  • 揭秘!守护大脑健康,远离帕金森的七大黄金法则