「java注解由来」Java注解是什么

博主:adminadmin 2023-01-07 17:06:07 1174

今天给各位分享java注解由来的知识,其中也会对Java注解是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java为什么有注解annotation

Annotation注解是Java内置的注解,它是JAVA底层编译器要用到,它的主要作用是指示Java编译器如何指定保留策略,在什么时候丢弃注解。它有如下几个常量值:

1)RUNTIME:在编译时注解被存储在.class字节码文件,并且在Java运行时可通过JVM获取这些注解的键/值对信息。

2)SOURCE:只保留在Java源代码文件里,编译时被Java编译器丢弃。

3)CLASS:在编译时注解被存储在.class字节码文件,但是在Java运行时不可以通过JVM获取这些注解的键/值对信息。

java注解是怎么实现的

注解的使用一般是与java的反射一起使用,下面是一个例子

注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。

自定义注解及其应用

1)、定义一个最简单的注解

public @interface MyAnnotation {

//......

}

2)、把注解加在某个类上:

@MyAnnotation

public class AnnotationTest{

//......

}

以下为模拟案例

自定义注解@MyAnnotation

1 package com.ljq.test;

2

3 import java.lang.annotation.ElementType;

4 import java.lang.annotation.Retention;

5 import java.lang.annotation.RetentionPolicy;

6 import java.lang.annotation.Target;

7

8 /**

9 * 定义一个注解

10 *

11 *

12 * @author jiqinlin

13 *

14 */

15 //Java中提供了四种元注解,专门负责注解其他的注解,分别如下

16

17 //@Retention元注解,表示需要在什么级别保存该注释信息(生命周期)。可选的RetentionPoicy参数包括:

18 //RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉

19 //RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认)

20 //RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息

21

22 //@Target元注解,默认值为任何元素,表示该注解用于什么地方。可用的ElementType参数包括

23 //ElementType.CONSTRUCTOR: 构造器声明

24 //ElementType.FIELD: 成员变量、对象、属性(包括enum实例)

25 //ElementType.LOCAL_VARIABLE: 局部变量声明

26 //ElementType.METHOD: 方法声明

27 //ElementType.PACKAGE: 包声明

28 //ElementType.PARAMETER: 参数声明

29 //ElementType.TYPE: 类、接口(包括注解类型)或enum声明

30

31 //@Documented将注解包含在JavaDoc中

32

33 //@Inheried允许子类继承父类中的注解

34

35

36 @Retention(RetentionPolicy.RUNTIME)

37 @Target({ElementType.METHOD, ElementType.TYPE})

38 public @interface MyAnnotation {

39 //为注解添加属性

40 String color();

41 String value() default "我是林计钦"; //为属性提供默认值

42 int[] array() default {1, 2, 3};

43 Gender gender() default Gender.MAN; //添加一个枚举

44 MetaAnnotation metaAnnotation() default @MetaAnnotation(birthday="我的出身日期为1988-2-18");

45 //添加枚举属性

46

47 }

注解测试类AnnotationTest

1 package com.ljq.test;

2

3 /**

4 * 注解测试类

5 *

6 *

7 * @author jiqinlin

8 *

9 */

10 //调用注解并赋值

11 @MyAnnotation(metaAnnotation=@MetaAnnotation(birthday = "我的出身日期为1988-2-18"),color="red", array={23, 26})

12 public class AnnotationTest {

13

14 public static void main(String[] args) {

15 //检查类AnnotationTest是否含有@MyAnnotation注解

16 if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){

17 //若存在就获取注解

18 MyAnnotation annotation=(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);

19 System.out.println(annotation);

20 //获取注解属性

21 System.out.println(annotation.color());

22 System.out.println(annotation.value());

23 //数组

24 int[] arrs=annotation.array();

25 for(int arr:arrs){

26 System.out.println(arr);

27 }

28 //枚举

29 Gender gender=annotation.gender();

30 System.out.println("性别为:"+gender);

31 //获取注解属性

32 MetaAnnotation meta=annotation.metaAnnotation();

33 System.out.println(meta.birthday());

34 }

35 }

36 }

枚举类Gender,模拟注解中添加枚举属性

1 package com.ljq.test;

2 /**

3 * 枚举,模拟注解中添加枚举属性

4 *

5 * @author jiqinlin

6 *

7 */

8 public enum Gender {

9 MAN{

10 public String getName(){return "男";}

11 },

12 WOMEN{

13 public String getName(){return "女";}

14 }; //记得有“;”

15 public abstract String getName();

16 }

注解类MetaAnnotation,模拟注解中添加注解属性

1 package com.ljq.test;

2

3 /**

4 * 定义一个注解,模拟注解中添加注解属性

5 *

6 * @author jiqinlin

7 *

8 */

9 public @interface MetaAnnotation {

10 String birthday();

11 }

Java的来源

1.Java名字的由来,实际上是一个有趣的故事;

2.我们所见到的Java标志,总是一杯热咖啡,这杯热咖啡你很难与计算机编程联想到一起。这杯热咖啡、Java这个名字的由来,是Java创始人员团队中其中一名成员由于灵感想到的;

3.想起自己在Java岛(爪哇岛)上曾喝过一种美味的咖啡,于是这种计算机编程语言就命名为Java,与此同时它的标起来是我们最熟悉不过的一杯热咖啡。

延展阅读

Java的特点:

1.java的风格类似C++,从某种意义上讲,java是C++的一个变种;

2.java摒弃了C、C++中的容易引发错误和难以理解的指针,结构,以及内存管理等;

3.java提供了丰富的类库,很方便开发程序;

4.java是完全面向对象的语言,支持 继承,重载,多态等面向对象的特性;

5.C++是面向对象和面向过程的混合语言, C是纯面向过程的语言;

6.java是一种强类型的语言,比C/C++检查还要严格,java区分大小写字母;

7.java提供了自动垃圾回收机制gc,有效避免了C、C++的内存泄漏问题;

8.java禁止非法访问内存,因为java没有指针,内存的申请和释放;

9.跨平台,java的源代码编译成结构中立的中间格式,这种格式与机器无关,只要在安装有JVM(java虚拟机)的电脑上,都能运行这种与机器无关的中间文件;java一次编译,到处运行;

10.对于不同的操作系统,会有不同的java虚拟机,这也就决定了java的可移植性;

11.java支持多线程,简单理解,如果是单核CPU,那么会通过时间片轮转的方式,多线程执行程序,如果是多核CPU,那么就可以理解为,两个或多个线程同时运行。

Java注解的出现 Java的注解是从何开始的

我不知道知道谁发明了注解,但是可以告诉你,java不同版本间的功能定义是不同的。这个功能的定义不是个人决定的,而是一个叫做JCP的组织, 这个组织云集了众多的资深专家,包括顶级开发团队中的精英。从java5开始出现了注解这个概念。定义注解的标准是JSR-250。注解从一定程度上分担了xml配置的一些任务(配套的标准如:JPA)。甚至可以在项目中用纯注解来配置。几乎所有的主流框架(除了struts1)都有自己的一套注解。追溯注解的源头,我个人认为,注解的前身就是我们看到的注释文档。标准的注释文档中有包括@author等的标注。在注解之前我们可以用Xdoclet来进行项目的配置。可惜这一方法几乎没有得到应用。但是注解的出现改变了这一现状。注解易于定义,包括本身就是java,提供了很好的编译器支持。我们可以用注解配置对象。这个是xml文件无法做到的。因为注解的易配置性和强灵活性,还有对代码的执行并不产生影响。注解得到了广泛的应用。现在,新的项目开发都开始倾向于注解这种新的开发方式,在开发的效率和纠错性上面。他已经远远优于xml配置。加上主流框架的支持及其它的易于实现性。相信他会走的更好。

Java 什么是注解及注解原理详细介绍

1、注解是针对Java编译器的说明。

可以给Java包、类型(类、接口、枚举)、构造器、方法、域、参数和局部变量进行注解。Java编译器可以根据指令来解释注解和放弃注解,或者将注解放到编译后的生成的class文件中,运行时可用。

2、注解和注解类型

注解类型是一种特殊的接口类型,注解是注解注解类型的一个实例。

注解类型也有名称和成员,注解中包含的信息采用键值对形式,可以有0个或多个。

3、Java中定义的一些注解:

@Override 告诉编译器这个方法要覆盖一个超类方法,防止程序员覆盖出错。

@Deprecated 这个标识方法或类(接口等类型)过期,警告用户不建议使用。

@SafeVarargs JDK7新增,避免可变参数在使用泛型化时候警告”执行时期无法具体确认参数类型“,当然,也可以用@SuppressWarnings来避免检查,显然后者的抑制的范围更大。

@SuppressWarnings(value={"unchecked"}) 抑制编译警告,应用于类型、构造器、方法、域、参数以及局部变量。 value是类型数组,有效取值为:

all, to suppress all warnings

boxing, to suppress warnings relative to boxing/unboxing operations

cast, to suppress warnings relative to cast operations

dep-ann, to suppress warnings relative to deprecated annotation

deprecation, to suppress warnings relative to deprecation

fallthrough, to suppress warnings relative to missing breaks in switch statements

finally, to suppress warnings relative to finally block that don't return

hiding, to suppress warnings relative to locals that hide variable

incomplete-switch, to suppress warnings relative to missing entries in a switch statement (enum case)

javadoc, to suppress warnings relative to javadoc warnings

nls, to suppress warnings relative to non-nls string literals

null, to suppress warnings relative to null analysis

rawtypes, to suppress warnings relative to usage of raw types

restriction, to suppress warnings relative to usage of discouraged or forbidden references

serial, to suppress warnings relative to missing serialVersionUID field for a serializable class

static-access, to suppress warnings relative to incorrect static access

static-method, to suppress warnings relative to methods that could be declared as static

super, to suppress warnings relative to overriding a method without super invocations

synthetic-access, to suppress warnings relative to unoptimized access from inner classes

unchecked, to suppress warnings relative to unchecked operations

unqualified-field-access, to suppress warnings relative to field access unqualified

unused, to suppress warnings relative to unused code and dead code

4、注解的定义

使用 @interface 关键字声明一个注解

public @interface MyAnnotation1

注解中可以定义属性

String name default “defval”;

value是注解中的特殊属性

注解中定义的属性如果名称为 value, 此属性在使用时可以省写属性名

例如,声明一个注解:

@Retention(RetentionPolicy.RUNTIME)

public @interface MyAnno1 {

String msg();

int value();

}

Java 的注解是什么原理

Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件中出现。

元数据的作用

如果要对于元数据的作用进行分类,大致可分为三类:

编写文档:通过代码里标识的元数据生成文档。

代码分析:通过代码里标识的元数据对代码进行分析。

编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查

java注解由来的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java注解是什么、java注解由来的信息别忘了在本站进行查找喔。