黑马程序员技术交流社区

标题: java的注解有什么作用,什么时候会用到注解 [打印本页]

作者: 世界公民    时间: 2013-6-20 07:40
标题: java的注解有什么作用,什么时候会用到注解
本帖最后由 Super_Class 于 2013-6-20 23:56 编辑

java的注解有什么作用,什么时候会用到注解。
在实际的项目开发中会经常用到注解吗??
作者: 王磊    时间: 2013-6-20 07:50
楼主要问的应该是注释吧。。
注释的作用可以说是对代码的一些标注,不影响代码的运行。
要说作用吧,主要就是对一些代码的说明,便于日后查阅代码时,可以很清楚的了解到代码的含义,以及最开始写代码时候的意图。
开发中的作用比较大,一就是便于日后查阅,再有就是方便代码编写后的调试。有个写注释的习惯还是很好的。

注释里的一个比较有用的功能就是/** */这个文档注释了。它可以根据写的注释,生成说明文档,也就是代码实现功能的说明书,就跟我们用到的API是一样的。
作者: 姚飞    时间: 2013-6-20 08:01
楼主这问题问的不太好,不过我也来回答一下。除了二楼的兄弟说的之外我在补充一下,注释还有一个作用就是调试代码。
当代码很复杂的时候,出问题了,就可以通过注释一部分来看其他代码快有没有问题,一直找到问题为止。

作者: 姚飞    时间: 2013-6-20 08:02
。。。。。。刚没注意二楼的兄弟说的,失误 啊。
二楼说的还是比较全面了。
作者: 段旭东    时间: 2013-6-20 08:51
无图无真相 洒家送你图片 然你感受下 这就是实际项目开发的注释!

QQ图片20130620085050.jpg (78.58 KB, 下载次数: 0)

QQ图片20130620085050.jpg

QQ图片20130620085113.jpg (237.76 KB, 下载次数: 0)

QQ图片20130620085113.jpg

作者: 娄田田    时间: 2013-6-20 10:09
楼主说的应该是对的就是注解吧,注解是java1.5提供的新特性,注解相当于一种标记,加了注解就等于打上了某种标记,标记可以加在包、类、字段、方法、方法的参数以及局部变量上。例如当写List list = new ArrayList();由于没有加泛型编译器上就会有警告,这时在代码上或者方法上加上@SuppressWarnings("rawtypes"),警告就会消失了,这就是注解加了一个标记告诉编译器取消警告,还有复写方法的上面都有一行@Override,这也是注解,标记这个方法是对父类方法的重写,@Deprecated来标记一个方法已经过时了,java中就有一些过时的方法,当我们调用那些方法的时候就会有提醒建议不使用过时的方法,而java中对这些方法正是加了@Deprecated这个标记。
作者: 17660431    时间: 2013-6-20 11:19
对于我们新人来说,注释的作用却是很大,它可以快速提高我们对代码的认识,同样标注注释也可以在以后工作中快速的读懂代码,还有就是调试程序,也就是说,当程序出现错误的时候可以用注释来查看是哪一行代码出了问题,毕老师的视频中有很详细的提到
作者: 月时微    时间: 2013-6-20 12:32
java 注解,从名字上看是注释,解释。但功能却不仅仅是注释那么简单。注解(Annotation)为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解析注解来使用这些数据),常见的作用有以下几种:
1.生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等;
2.跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量;
3.在编译时进行格式检查。如@Override放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出;


包 java.lang.annotation 中包含所有定义自定义注解所需用到的原注解和接口。如接口 java.lang.annotation.Annotation 是所有注解继承的接口,并且是自动继承,不需要定义时指定,类似于所有类都自动继承Object。


该包同时定义了四个元注解,Documented,Inherited,Target(作用范围,方法,属性,构造方法等),Retention(生命范围,源代码,class,runtime)。下面将在实例中逐个讲解他们的作用,及使用方法。


Inherited : 在您定义注解后并使用于程序代码上时,预设上父类别中的注解并不会被继承至子类别中,您可以在定义注解时加上java.lang.annotation.Inherited 限定的Annotation,这让您定义的Annotation型别被继承下来。注意注解继承只针对class 级别注解有效(这段建议看完全文后在来回顾)。多说无益,下面就一步步从零开始建一个我们自己的注解。


建立第一个注解
package com.tmser.annotation;
public @interface TestA {
//这里定义了一个空的注解,它能干什么呢。我也不知道,但他能用。
}


在下面这个程序中使用它:


package com.tmser.annotation;

import java.util.HashMap;
import java.util.Map;

@TestA    //使用了类注解
public class UserAnnotation {
   
    @TestA //使用了类成员注解
    private Integer age;
   
    @TestA //使用了构造方法注解
    public UserAnnotation(){
        
    }
    @TestA //使用了类方法注解
    public void a(){
        @TestA //使用了局部变量注解
        Map m = new HashMap(0);
    }
   
    public void b(@TestA Integer a){ //使用了方法参数注解
        
    }
}
编译没有报错,ok,一个注解实验完成。这个注解也太简单了吧,好像什么信息也不能传递。别急下面就来一步步完善它,也该四位元注解依次开始上场了。
四个元注解分别是:@Target,@Retention,@Documented,@Inherited ,再次强调下元注解是java API提供,是专门用来定义注解的注解,其作用分别如下:
      @Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,包括:
          ElemenetType.CONSTRUCTOR----------------------------构造器声明
          ElemenetType.FIELD --------------------------------------域声明(包括 enum 实例)
          ElemenetType.LOCAL_VARIABLE------------------------- 局部变量声明
          ElemenetType.METHOD ----------------------------------方法声明
          ElemenetType.PACKAGE --------------------------------- 包声明
          ElemenetType.PARAMETER ------------------------------参数声明
          ElemenetType.TYPE--------------------------------------- 类,接口(包括注解类型)或enum声明
           
     @Retention 表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中,包括:
          RetentionPolicy.SOURCE ---------------------------------注解将被编译器丢弃
          RetentionPolicy.CLASS -----------------------------------注解在class文件中可用,但会被VM丢弃
          RetentionPolicy.RUNTIME VM-------将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
           
      @Documented 将此注解包含在 javadoc 中,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。
      
      @Inherited 允许子类继承父类中的注解。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2