注解

注解:一种模式。1.5之后的新特性。
(1)利用cmd运行System.runFinalizeOnExit(true)
一种写法
<c:\Document and Setting\IBM>set path=C:\java\jdk1.6.0_03\bin;%path%;
<c:\Document and Setting\IBM>cd E:\workspace3\javaenhance\src\cn\itcast\day2
<c:\Document and Setting\IBM>e:
<E:\workspace3\javaenhance\src\cn\itcast\day2>javac AnnotationTest.java
注意 AnnotationTest.java 使用或者覆盖了已过时的API
注意 要了解详细信息,请使用-xlint:deprecation重新编译(这句话的意思是:javac -Xlint:deprecation AnnotationTest.java)
deprecated过时了。。。单词不会。。
specification 规范。。。单词不会

三个环境变量
JAVE_HOME: JDK的安装路径
PATH: JAVE_HOME\BIN %JAVA_HOME%(表示用JAVA_HOME的值来替换JAVA_HOME这个位置)\BIN 找可执行文件的存放地点
CLASSPATH:.
指示编译器和JVM到哪找所需要的类
(2)用eclipse
告诉编译器或者开发工具一个信息:你怎么怎么的。。。
@SupperssWarning("depretation")//压缩警告 生命周期是在SOURCE 不要让它过时。。。(eclipse不理我。。。cmd理我。。。)

public static void main(String[] args){
    System.runFinalizeOnExit(true);这个方法会被eclipse划一个线
}
一个注解就是一个类。
(3)注解例子
如果我这个方法可能不用的话,我要兼容已经使用我方法的人。告诉新的人不要用这个了。
@Deprecated生命周期在RUNTIME
public static void sayHello(){}

重写hashCode和equals时,会犯很多错误,比如hashCode(Object obj)可能写出hashCode(当前的这个类 obj)造成重载
所以使用
@override生命周期在SOURCE
public int hashCode(Object obj)//对的
@override
public int hashCode(当前类 obj)//错的
(4)注解可以加在包、类、字段、方法、方法的参数、以及局部变量上
@Target(ElementType.METHOD)或者@Target({ElementType.Type,ElementType.Method})
(5)注解的应用
三个概念:注解类、应用了注解类的类、对应用了注解类的类进行反射操作的类。
注解类
@interface A{
}
应用了注解类的类
@A
ClassB{
}
对应用了注解类的类进行反射操作的类
Class C{
}

视图:java视图、eclipse视图。
main方法不一定属于所在类的成员。比如对应用了注解类的类,是否已经应用了注解类。package test;

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

@MyAnnotation
public class AnnotationTest {
    public static void main(String[] args)throws Exception{
        boolean temp = AnnotationTest.class.isAnnotationPresent(MyAnnotation.class);
        System.out.println(temp);
        MyAnnotation annotation = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);
        System.out.println(annotation);
    }
}

//元注解(元数据、元信息在生活中常见)
@Retention(RetentionPolicy.RUNTIME)//一直要保留到运行期间:
//由于编译器可能在在生成Class字节码时,将注解给过滤掉了。
//由于ClassLoader会将Class文件进行处理形成真正的字节码文件(Class文件实际上不是字节码文件)过程中,把你的注解给弄掉了。
@interface MyAnnotation{}
//注解的生命周期:java源文件(RetentionPolicy.SOURCE)、Class文件(Retention.CLASS)、内存的字节码文件(Retention.RUNTIME)
(6)注解的属性
package test;

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

@MyAnnotation(color = "red",value = "abc",arrayAttrbute = 1,annotationAttrubte=@AnnotationAttrbute("MyAnnotationAttrbute"))//只有value属性的时候可以省略=和value变量名 但此时有color属性就不能写成那个样子了
//但可以为color 指定缺省属性 default "green"; @MyAnnotation("abc")就可以了
//赋值数组元素的时候可以写成以上形式。省略大括号
public class AnnotationTest {
    public static void main(String[] args)throws Exception{
        boolean temp = AnnotationTest.class.isAnnotationPresent(MyAnnotation.class);
        System.out.println(temp);
        MyAnnotation annotation = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);
        System.out.println(annotation.color());
        System.out.println(annotation.value());
        System.out.println(annotation.arrayAttrbute().length);
        System.out.println(annotation.wkd());
        System.out.println(annotation.annotationAttrubte());
    }
}

//元注解(元数据、元信息在生活中常见)
@Retention(RetentionPolicy.RUNTIME)//一直要保留到运行期间:
//由于编译器可能在在生成Class字节码时,将注解给过滤掉了。
//由于ClassLoader会将Class文件进行处理形成真正的字节码文件(Class文件实际上不是字节码文件)过程中,把你的注解给弄掉了。
@interface MyAnnotation{
    public String color();
    String value();//默认public 特殊名字的属性
    int[] arrayAttrbute() default {3,4,5};//默认值 数组属性
    WeekDay wkd() default WeekDay.MON;//枚举类型的
    AnnotationAttrbute annotationAttrubte() default @AnnotationAttrbute("AnnotationAttrbute");
    
}

@interface AnnotationAttrbute{
    String value();
}
//注解的生命周期:java源文件(RetentionPolicy.SOURCE)、Class文件(Retention.CLASS)、内存的字节码文件(Retention.RUNTIME)
enum WeekDay{
    SUN,MON,TUS,WED(1);
    private WeekDay(){System.out.println("无参构造");}
    //调用第二个有参构造的方法 表示创建这个元素的时候,调用哪个构造方法。
    private WeekDay(int day){System.out.println("有参构造");}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值