一、类型包装器
二、自动装/拆箱
装箱:
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:它指定一个或者多个可由编译器发布并将被处理的警告。