java函数前面有个@是什么意思啊。。麻烦解释清楚点啊。。。
发布时间:2025-05-24 18:52:12 发布人:远客网络
一、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注入。