黑马程序员-枚举和注解

来源:互联网 发布:win10软件注册表 编辑:程序博客网 时间:2024/06/05 04:14

---------------------- android培训、java培训、期待与您交流! ----------------------

自动装箱拆箱:直接将一个int型数据赋给Integer对象的引用。直接将Integer对象引用赋给int型变量,其中涉及到享元设计模式:将经常用到的小对象,将相同的属性封装为一个对象,他们不同的属性作为参数传进来。

枚举:

    a)枚举是一个类。枚举中的成员为public  static final

    b)当给枚举类的对象赋值是只能是枚举类中预先定义好的元素。否则编译不通过。

    c)可通过枚举类的静态方法valueOf(String name),得到对应枚举类的元素对象

    d)枚举类自动实现了toString方法,

书写规则:

    1.元素列表必须位于枚举类的第一行,如果没有其他的方法,列表最后不加“;

    2.枚举类中的构造方法必须为private,因为枚举类的对象固定,不能在外部进行初始化。

    3.指定构造函数,在元素后面加(n)或(),n代表构造函数的编号

    4.当有抽象方法时,此时只能用枚举类的子类建立对象。方式:元素(){实现枚举类中的抽象方法},元素(){实现枚举类中的抽象方法}

注解:(java.lang.annotatoin)java.lang包下常用的系统注解:

    @Override@Deprecated@SuppressWarnings

    注解相当于一种标记,加了注解就等于加了某种标记,没加则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以通过反射来了解你的类或元素上是否有某种标记,从而去干相应的事。标记可以加在包、类、字段、方法、方法的参数以及局部变量上。

      注解是使用类实现的,每个注解就是一个对象

      1)  注解的定义和反射调用:

元注解:加在注解上的注解。不能用作另一种注解类型的成员,无效。

       常见的元注解:RetentionTarget(设置注解的范围:类(Type)、方法(Method))

声明注解的生命周期:

      通过Retention设置。三种取值为枚举(RetentionProlicy)的常量:

       Retention.SOURCERetention.CLASSRetention.RUNTIME

       分别对应源文件、编译后的.class文件、内存中的字节码。

指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention注释,则保留策略默认为 RetentionPolicy.CLASS

应用:自定义注解及通过反射得到在类和方法等上的注解。

      2)   注解的属性:

如:public@interface Myannotation{ String color();}为注解设置了一个String类型的color属性,默认是public abstract的。在对color赋值时要传入一个String类型的参数。@Myannotation(color = “red”)

定义基本类型的属性和引用类型的属性:

用反射方式获得注解对应的实例对象后,在通过该对象调用属性对应的方法访问属性:

指定属性缺省值:Stringcolor() default “red”;

Value属性:当注解中有value属性时,可以直接传入value属性的值不用写“value=”但是其他属性必须设置default值。

枚举 练习:

//创建星期的枚举
enum Week {
 Mon("Mon") {
  public Week nextD() {
   return Sun;
  }
 },
 Sun() {
  public Week nextD() {
   return Wed;
  }
 },
 Wed() {
  public Week nextD() {
   return Tut;
  }
 },
 Tut() {
  public Week nextD() {
   return Thu;
  }
 },
 Thu() {
  public Week nextD() {
   return Fri;
  }
 },
 Fri() {
  public Week nextD() {
   return Sat;
  }
 },
 Sat() {
  public Week nextD() {
   return Mon;
  }
 };
 private Week() {
  System.out.println("kong");
 }

 private Week(String str) {
  System.out.println(str);
 }
 public abstract Week nextD();
}

注解练习:

package org.cc.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)//设置该注解保留到运行时,默认为编译后的.class文件
@Target({ElementType.TYPE,ElementType.METHOD})//设置该注解作用的范围,默认为任何范围
public @interface MyAnnotation2 {
 String name() default "chench";//为属性设置默认值

 String value() ;

 int[] arr() default {2,3};
 MyAnnotation my() default @MyAnnotation;//属性为另一个注解
}

---------------------- android培训、java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima