您当前的位置:首页 > 互联网教程

java函数前面有个@是什么意思啊。。麻烦解释清楚点啊。。。

发布时间:2025-05-24 18:52:12    发布人:远客网络

java函数前面有个@是什么意思啊。。麻烦解释清楚点啊。。。

一、java函数前面有个@是什么意思啊。。麻烦解释清楚点啊。。。

这鞋Annotation标记可以在编译、类加载、运行时过程中被读取,然后执行某些处理,但是绝对不会影响源程序的执行顺序。

换句话说就是给某个元数据(属性、方法、类甚至是包、参数、局部变量等等。。。)增加点额外的修饰然后在执行这个程序的时候可以干一些小动作(可以想象跳出来~或者类似“俯览”~),听起来比较抽象哈~~~~

Annotation有接口给我们,可以让我们来自定义我们自己的Annotation,当然,一说元数据操作,肯定是利用反射了~~~更深的就不说了研究太深我也迷糊~

举个例子:java最基本的注释@Override啊@SuppressWarning啊什么的

@Override就是告诉java编译器它修饰的方法是覆盖父方法而来,让java编译器编译的的时候必须确定这个方法是否覆盖了父方法,如果不覆盖则出错。

看着好像没什么用,事实上有些时候确实可以预防错误发生。因为java编译器默认不会检查你这个方法是否是覆盖了父类,只有在你运行时执行这个方法你才会发现没有得到自己想要的结果。

不过我觉得现在的IDE这么强大,貌似这个@override功能作用越来越不明显了。。。。哈

比如很多框架都支持Annotation来实现零配置,举个例子hibernate,它就越来越趋向JPA规范,所谓JPA那个A是啥意思,你懂了吧?嘿嘿嘿以前通过xml来配置,一大坨一大坨的,现在在POJO(普通的java类)上加点Annotation,我靠,不用配xml了~~~

如果还不OK,那就会用就行了~~~~等接触到一定程度,经验越来越丰富你就都OK了。。。

二、Java代码中前面带@是什么意思

Annotation接口的实现类: Documented, Inherited, Retention, Target都是用来定义自己定义的Annotation类的。

1.注解(Annotation)类,以@interface修饰,不能显示(explicit)extends或implements任何类

public@interface DefineAnnotation{

这种没有任何属性的Annotation类,也叫标识Annotation

public String value() default"aaa";

//注解Annotation类不能显示(explicit)extends或implements任何类

//不定义任何属性就叫maket annotation

public@interface DefineAnnotation{

//定义一个属性,有属性的话,必须赋值,除非有默认default

public String value() default"aaa";

3.使用Annotation,有默认值的可以不用传参数,也可以传递参数。没有默认值的,必须传递参数。

//@DefineAnnotation有默认值的第一种使用方式

//@DefineAnnotation()有默认值的第二种使用方式

System.out.println("say hello");

public static void main(String[] args){

TestAnnotation ta= new TestAnnotation();

所有的Annotation类都实现了Annotation接口

@Retention本身就是个Annotation(注解)类

它的值是个enum枚举类型的RetentionPolicy,该枚举类型RetentionPolicy有三个值RUNTIME(会被JVM加载,并可以通过反射来获得到Annotation类的信息),CLASS(不会被JVM加载),Source

@Retention的值标识自己定义的Annotation(注解)类是属于哪种保存策略,将来哪个类如果使用了这个自定义的注解类,将会使用这种保存策略

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

//所有的Annotation类都实现了Annotation接口

//@Retention本身就是个Annotation(注解)类

//它的值是个enum枚举类型的RetentionPolicy,该枚举类型RetentionPolicy有三个值RUNTIME(会被JVM加载,并可以通过反射来获得到Annotation类的信息),CLASS(不会被JVM加载),Source

//@Retention的值标识自己定义的Annotation(注解)类是属于哪种保存策略,将来哪个类如果使用了这个自定义的注解类,将会使用这种保存策略

@Retention(RetentionPolicy.RUNTIME)

public@interface MyAnnotation{

String hello() default"ttitfly";

@MyAnnotation(hello="china",world="earth")

System.out.println("say hello");

import java.lang.annotation.Annotation;

import java.lang.reflect.Method;

三、java中@表示什么

@Param:用来在DAO层中声明参数。例:

List<News> selectByUserIdAndOffset(@Param("userId") int userId,@Param("offset") int offset,@Param("limit") int limit);

java中@表示注解,解释一个方法,类,属性的作用

*@param s这里表示对s的文字说明,描述

1、用来在DAO层中声明参数,如:

List<News> selectByUserIdAndOffset(@Param("userId") int userId,@Param("offset") int offset,@Param("limit") int limit);

2、当使用了使用@Param注解来声明参数时,如果使用#{}或${}的方式都可以。

@Select("select entity from table where userId=${userId}")

public int selectEntity(@Param("userId") int userId);

当不使用@Param注解来声明参数时,必须使用使用#{}方式。如果使用${}的方式,会报错,而#{}拿到值之后,拼装sql,会自动对值添加引号。

${}则把拿到的值直接拼装进sql,如果需要加单引号,必须手动添加,一般用于动态传入表名或字段名使用,#{}传参能防止sql注入。