java中的语法糖

本文详细介绍了Java中的语法糖,包括泛型及其类型擦除、泛型与重载的关系、自动装箱和自动拆箱、遍历循环的实现原理,以及条件编译的使用。泛型在编译后变为原始类型,提供类型安全,但存在类型擦除导致的问题。自动装箱和拆箱简化了基本类型与包装类之间的转换,遍历循环利用迭代器实现。条件编译通过if语句在编译阶段决定代码路径。
摘要由CSDN通过智能技术生成

Table of Contents

概述

语法糖:泛型与类型擦出

泛型和重载

自动装箱,自动拆箱,与遍历循环

条件编译


概述

在博客java重要基础知识汇总中,我们提到了内部类是一种java的语法糖。事实上java除了内部类还提供了另外一些语法糖,用于方便程序员的代码开发。但是值得注意的是,语法糖对代码不会带来任何实质性的功能上的变化。他仅仅是编译器做的一些'把戏'.语法糖在各种编程语言中几乎都存在。

语法糖:泛型与类型擦出

泛型是java5开始支持的一项特性。其本质是参数化类型的应用,也就是说要被用于操作的数据类型可以被指定为一个参数。再次重复,将数据类型作为一个参数即为泛型。这样带来的作用就是对于一些代码我们在定义时无需指定类型,在实际调用时才指定类行即可,带来了更大的灵活性。

在java5之前事实上java语言当中存在一种体现方式强制转换的类泛型,以Hashmap的get方法为例:

   public V get(Object key) {
        Node<K,V> e;
        return (e = getNode(hash(key), key)) == null ? null : e.value;
    }

在java8中的get方法定义如上,然而在泛型没有出现之前,这个方法的返回值就是一个Object对象,因为java语言里面的所有类型都是Object的子类。但是在这里返回类型定义的是V,这就是定义fan

java中的泛型只存在于程序源码当中,在编译后的字节码当中就已经不存在。而替换为原来类型Raw Type了,并且在相应的地方插入强制类型转换代码。这也为什么我们通过反编译看到的代码和我们自己写的代码往往在泛型定义上是不一样的原因。因此,对于处于runtime的JAVA语言来说,ArrayList<int>与ArrayList<String>就是同一个类型。java语言中的泛型实现方法称为类型擦除-type-erasure,基于这种方法实现的泛型称为伪泛型。

下面是一个例子程序:

import java.util.HashMap;
import java.util.Map;

public class TestGeneric {
    public static void main(String[] args){
        Map<String,String> map = new HashMap<String, String>();
        map.put("hello","你好");
        map.put("
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值