类型包装器

来源:互联网 发布:数据相似度算法 编辑:程序博客网 时间:2024/04/29 22:05

一、类型包装器 
二、自动装/拆箱
   
  装箱:
     Integer  iob = new  Integer(100);
  拆箱:
     int i = iob.intValue();

     但是,很多程序员抱怨这样太麻烦,从JDK1.5之后就引入了自动装箱和拆箱。

     自动装箱/拆箱
     例子:
          public  class  demoAutoBox_1{
              public static int unboxing(Integer o){
                   return  o;//返回值是int类型,自动拆箱
              } 
              public static void main(String args[]){
                   int k;
                   Integer iob;
                   k = unboxing(100);//实际参数是一个int值,自动装箱
                   iob = k;//自动装箱
                   System.out.println("iob = "+iob); 
              }
          } 
        
        表达式中的自动装/拆箱
        public class demoAutoBox_2{
            public static void main(String args[]){
                int i;
                Integer iob1,iob2;
                //自动装箱
                iob = 101;
                //拆箱之后再装箱
                ++iob1;
                //拆箱运算完毕在装箱赋值
                iob2 = iob1 + (iob1/3);
                //拆箱运算
                i = iob1 + (iob1/3); 
                System.out.println("iob1="+iob1+" iob2="+iob2+" i="+i);    
            }
        }


     布尔型和字符型包装器的自动装/拆箱
      public class demoAutoBox_3{
           public static void main(String args[]){
                Boolean b = ture;//布尔型自动装箱
                if(b)//自动拆箱
                  System.out.println("b is ture.");
                else
                  System.out.println("b is false. ");
                Character ch1 = 'x';//字符型自动装箱
                char ch2 = ch1;//自动拆箱
                System.out.println("ch2 is: "+ch2);

           }
      }   

三、元数据

    元数据就是关于数据的数据。也可以成为:程序注释工具。
  
   1、 注释的基础知识
    例子:
        @interface MyAnno{
            String str();
            int val();   
        }
         在关键字interface之前有一个@,他告诉编译器正在声明一个注释类型。注释里有两个成员方法。
    所有的的注释都只有成员方法,而且不需要提供这些方法的实现,java会实现这些方法。
   public class demoAnno{
    @MyAnno(str="simple example ",val= 10)
    public static void doSomething (){
      System.out.println("dsdfsdfsdfsdfd");
    }
  }
     这个例子中使用注释的时候给注释的成员赋了值。记住在MyAnno中并没有定义任何成员属性,都是成员方法,
  但是他们的行为与成员属性是一样。

   2、指定一个保留策略
       一个保留策略决定在哪个点上删除一个注释。java有三种:
       *适用SOURCE保留策略的注释只在源文件中保留,在编译期间删除。
       *适用CLASS保留策略的注释,在编译期间储存在.class文件中,但在运行时不能通过JVM来获得。
       *适用RUNTIME保留策略的注释,在编译期间存储在.class文件中,且运行时可以通过JVM来获得。
   例子:import java.lang.annotation.*;
         @Retention(RetentionPolicy.RUNTIME)
         @interface MyAnno{
             String str();
             int val();
         }
          注意:在程序最前面要使用import引入包。那么修改保留策略之后,用MyAnno注释的程序可
     以在运行期间获得注释信息。
   3、使用反射在运行时获得注释
       不说啦!
   4、使用默认值
      如果在使用注释时,没有为注释的成员指定值,可以让他们使用默认值。
      使用默认值的方法是通过在一个成员声明中增加一个default子句。
      一般形式: type member () default value;
      其中,value必须与type指定的类型一致。
   5、标记注释
      是一种不包括成员的特殊注释,它唯一的目的是为了标记一个声明。
      确定是否存在标记注释的最佳途径是使用方法isAnnotationPresent(),它由AnnotatedElement。
   6、单成员注释
      只有一个成员的注释。它的作用与普通注释相同。不过,如果这个成员命名为value,那么
      可以在为成员指定值时使用简化格式---不必指定成员的名字。
   7、内置注释
      *@Retention:它只能作为另一个注释的注释。用来指定本章前面所描述的保留策略。
      *@Documented:它是一个标记注释,它告诉工具,一个注释将被文档化。它只能用作对一个注释声明的注释。
      *@Target:指定一个注释可以运用的声明的类型。它只能作为另一个注释的注释。它可以带有一个参数,该参数
               是ElementType枚举类型的一个常量。用这个常量指定注释可以运用的声明的类型。
      *@Inherited:它是一个标记,只能用于另外一个注释声明,而且他只影响使用类声明的注释。它使得父类的注释
                   能被子类所继承。因此,当对子类查询特定的注释时,如果该注释不在子类中,则会检查它的父类
                   中,而且使用了@Inherited注释,那么该注释将被返回。
      *@Override:他是一个标记注释,只适用于方法。使用@Override注释的方法必须覆盖父类中的同一个方法,否则
                  会发生编译错误。它用来确保一个父类中的方法是被覆盖的,而非重载。
      *@Deprecated:他是一个标记注释,表示一个声明已经过时,已经被一个新格式的声明所替代。
      *@SuppressWarnings:它指定一个或者多个可由编译器发布并将被处理的警告。