hi, 你好。下面我们一起来学习呢,装箱、枚举和注解。这几个语法要素。 这些语法要素呢,有的呢是从JDK1.5开始的,有的呢是 新的增加的一些语法,那么这些语法呢很多在语法信息呢 它实际上呢在早期的这个语法里面呢就 自动增加了一些语文,它实际上是由编译器呢来自动翻译 这样对我们人来说呢,写程序就更方便一点 所以有人把这种自动增加的这一些翻译的这种语法要素呢 称为呢就Complier Sugar,也就是编译器的糖。 或者说它给我们的糖,那我们用起来很方便就这个意思。 但是呢它底层呢翻译成别的语法要素 那基本的这个我们呢来学一个呢包装类。这个包装类呢 我们知道呢, Java里面的类型呢它比较特殊,它分两大类 一个是基本类型,一个是包装,一个是引用类型 那比如说int整数,它是个基本类型。Interget呢它这一个整数呢 那我们要把它包装成一个对象,因为这个基本类型我们没法当对象来用。 所以呢它Java里面有个机制呢就是把这个基本类型呢 它可以有一种跟它对应的一个object的那就是一个 引用类型的这样的对象,比如说int对应的就是interger 同样的boolean类型也有布尔那种类型 然后byte有byte的类型, 还有short 短整数。Charater就是char类型,然后integet就是int 整数类型,long长整数,float 浮点数,double双精度实数,所以 那么也就是说,它都每一类都有,我们用起来怎么用呢? 就interger然后就这个引用类型等于new一个Integer,那这样 通过这一种方式呢,我们就把一个 int的这个类型包装成呢一个引用对象,因为引用型呢我们在很多时候呢都需要引用型。 那所以这是解决基本类型跟引用类型之间的一个桥梁。 但这样每次这样用呢很麻烦 所以从JDK1.5以后呢,增加了一个概念那叫做装箱,然后拆箱。 装箱呢也就boxing,它就基本上来说咧就是把一个 整数啊就这个基本类型pramitive的这个类型 直接赋值个一个引用类型,直接赋值过去,那这就称为装箱 把这个整数呢装个箱子boxing。那拆箱呢unboxing呢就是相反的,我们把这样- 一个引用类型呢, 跟它赋值到一个整数里面去。这样很显然就是比早期 早期这个呢就方便一点咯。这是JDK1.5以后增减的功能。 那它实际上我们这样写呢,编译器呢分别 把它编译成了一个什么呢?一个是用integer这个类 里面的value of 这个函数,它得到呢就是一个对象 所以它是,实际上它就是调用这个value of 。反过来拆箱呢 它实际上是把这个对象,引用类型的对象调来一个方法叫intValue,就整数值 得了。也就是说我们简单的这样装箱或拆箱的其实编译器自动帮我们 翻译过去。同样的那这种用法呢比如说我们需要一个 object的这个数组,那这个数组呢我们早期写下来很麻烦,现在呢你直接写个1 那它就会自动装箱,但这个字符串呢它本身就是引用类型 它可以当成object,当成对象。这就是装箱或拆箱。 下面一个概念呢 也是..叫作枚举。那这个枚举呢,也是Jave里面增加的一个语法, 实际上也是一个语法糖,呃或者叫编译器suger,编译器糖 在Jave里面呢,那个枚举呢是一种特殊的 class类型,它也是个呢引用类型,是特殊的。 那么在简单的情况下呢,用法与其他的这一个 枚举,其他语言的枚举相似。也比如说我们定一个枚举,然后取个名字, 然后它有几个常量,呃就这样写。然后我们可以用的时候呢,比如说Light它的变量等于 呢这个枚举,那就light点红灯,这个红灯、绿灯、交通灯 所以这一种方式呢使用有点相似,但是 实际上呢它是生成呢一个class Light 它继承了java点lang点枚举 这个类,它是集成了java语言language里面的枚举这个类。我们可以 看一下它这个生成的这个代码了解一下,你看这是我们的程序 ligh然后呢这一个,三个常量。但是实际上它生成的呢, 是什么样子的呢。我们可以呢对它,我们先编译 啊,先编译然后呢 我们再用javaP -c,然后这个名义,然后呢就把它呢 反汇编,我们看看。好,请看。 它生成了一个final的class,那就不会再继承的了, final class 然后light extends, extends呢java点lang点这个 然后它里面呢定义了这几个实体,那就是定义了 static final的这个常量,就是红灯、黄灯、绿灯。 实际上它也是light的一个对象呢这样一个实例,但是这个实例呢 它在... 另外呢它还有一些啊重写的这一个方法,比如value它里面的方法 另外呢valueof,valueof把字符串转成这个 所以它就重现了这个方法,当然它还有一些 还有一些更复杂呢这个操作,使得我们当用这个red的时候 它就能自动地找到这样一个,这样一个final的 这样一个对象。由于这个枚举呢它本身是 class了,它底层呢是class,它跟我们别的语言枚举是整数啊是完全不同的。 它这个枚举呢是class,所以呢它也可以添加字段、方法或 构造方法,比如说我们这个方向这个枚举 那我们就可以加一个东南西北 然后呢还带一些别的信息,那别的信息呢本质上是一个什么呢? 本质上是一个构造方法里面的参数,所以要定义这样的一个 构造方法。那这样的构造方法,我们还有其他的一些方法 所以这样的一个对象呢,实际上我们还可以调用其他的这个方法。那这个就是 自定义枚举。除了这个以外呢,我们稍微说一下注解。注解呢也是JDK1.5以后增加的一- 个功能。 注解叫Annotation,这个注解呢又称为注记, 或者叫标注,或者叫标记,或者呢有人叫注释 这个注释呢但是因为在汉语里面 容易跟comments混淆,所以我们不太用注释这个词。 因为汉语里面注释呢comments也叫注释,我们annotation呢是注解,或- 者我们叫 标注,标记。那么它呢简单来说呢就是在语法 各种语法要素,包括类啊,包括字段啊,包括方法啊等等。 上面添加一点附加信息,附加一点呢信息。 那么这个信息呢供编译器或其他程序使用,所有的这些注解呢 其实它也是呃java.lang.annotation的子类啊。 那都是这个子类。那常用的注解呢,比如说我们以前用到过的,比如说override 表示呢我这个方法呢覆盖了父类的方法,然后呢还有一些注解 比如说deprecated表示过时的方法,也就这个方法呢 就不太用了,编译器.. 你要用这个方法呢,编译器就给你一个警告 说这个方法呢现在不主张用了,你要用别的更好的方法。然后还有 比如说让编译器呢不显示警告,不产生警告。你就可以用这样的 这样的一个标记,这样的注解。 我们甚至还可以自定义注解,那自定义注解呢 那就比较复杂。它的基本的写法呢,我们简单看一下它的样子是这样的。 public一个@(at)然后interface,那这个写法呢其实确实很奇怪啊,- 很奇怪了 这个... 这个@interface 然后呢它里面呢定义了一些方法,那这个方法名呢 呃... 有点像实际上相当一个字段面,那一般 它这个又相当于字段面。所以这个呢写起来呢用起来比较复杂 啊所以呢我们这里就不讲了,如果有兴趣呢你可以 参看一下我们的教材里面对这个呢详细的阐述。 而我们平时用呢确实比较少。