第一章 java 基础 - 04注解(上)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39923324/article/details/82113235

无意间都到一篇《走心的安卓工程师跳槽经验分享》,发现自己工作几年了,技术方面虽然有了飞跃的进步,可是不知道自己的技术到了什么地步,每个方面我都涉及到了,但都不深,这大概是初级工程师的诟病吧!

即使知道也不知道从何下手,非常感谢《走心的安卓工程师跳槽经验分享》的作者!

感兴趣的朋友和我一起走下去吧!

04注解

什么是注解以及运行时注解的使用。(上)

使用编译时注解简单实现类似 ButterKnife 的效果(下)

定义:
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。(引用)

作用分类:
①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检【Override】

Java 内置的注解:

1.@Override (空注解):
标记覆盖父类方法的方法。


/**
 * 测试Override注解
 * @author Administrator
 */
public class OverrideDemoTest {
    //@Override
    public String tostring() {
        return "测试注解";
    }
}

2 .@Deprecated( 空注解) :
标记代码中包含过时部分。

/**
 * 测试Deprecated注解
 * @author Administrator
 */
public class DeprecatedDemoTest {
    public static void main(String[]args) {
        // 使用DeprecatedClass里声明被过时的方法
        DeprecatedClass.DeprecatedMethod();
    }
}

class DeprecatedClass {
    @Deprecated
    public static void DeprecatedMethod() {
    }
}

3.@SafeVarargs( 空注解) :
标记构造函数和方法,通知编译器,可变参数操作保证安全。

4.@FunctionInterface :
通知编译器,这个类型是 function 接口

5.@SuppressWarning:
通知编辑器,不用警告。

6.@SuppressWarning
支持的参数如下及使用方式见这篇 @SuppressWarning 使用及支持的参数。

7.@Documented:
注解在doc文档可见。

8.@Retention :
注解存储方式,目前只支持三种存储方法。

    **8.1 RetentionPolicy.SOURCE:** 
    注解只保留在源码中,编译时会忽略。
    **8.2 RetentionPolicy.CLASS:** 
    注解保留在源码中且编译时被编译器保留,但是运行时会被JVM忽略
    **8.3 RetentionPolicy.RUNTIME:**
    注解保留在源码中不且编译时被编译器保留,而且运行时也不会被JVM忽略,

9.@Target:
注解修饰什么对象。例如:
1.类、接口、枚举 :ElementType.TYPE
2.域或者属性 :ElementType.FIELD
3.方法 :ElementType.METHOD
4.参数: ElementType.PARAMTER
5.构造函数:ElementType.CONSTRUCTOR
6.本地变量:ElementType.LOCAL_VARIABLE
7.注解:ElementType. ANNOTATION_TYPE
8.包 :ElementType.PACKAGE
9.被继承的父类:@Inherited

想要熟稔注解,需要了解每个注解,不过我就写到这里,或许下次会编写关于每个不同注解的文章。

自定义注解

它类似于创建一个接口文件,但为了区分,我们需要将它声明为@interface。

例:

public @interface NewAnnotation {

}

使用自定义的注解类型。

public class AnnotationTest {
    @NewAnnotation
    public static void main(String[]args) {
    }
}

为注解添加变量。

public @interface NewAnnotation {
    String value();
}

定义一个枚举类型,然后将参数设置为该枚举类型,并赋予默认值

public @interface Greeting {
    public enum FontColor {
        BLUE,
        RED,
        GREEN
    };
    String name();
    FontColor fontColor() default FontColor.RED;
}

为注解赋值。

public class AnnotationTest {
    @NewAnnotation("mainmethod")
    public static void main(String[]args) {
        saying();
        sayHelloWithDefaultFontColor();
        sayHelloWithRedFontColor();
    }

    @NewAnnotation("saymethod")
    public static void saying() {
    }

    // 选择使用该默认值
    @Greeting(name="defaultfontcolor")
    public static void sayHelloWithDefaultFontColor() {
    }

    //重新设置一个值来替换默认值
    @Greeting(name="notdefault", fontColor=Greeting.FontColor.BLUE)
    public static void sayHelloWithRedFontColor() {
    }
}

本节完,下一节讲述《使用编译时注解简单实现类似 ButterKnife 的效果》

代码来源(java 注解 百度百科)

猜你喜欢

转载自blog.csdn.net/weixin_39923324/article/details/82113235