注释

单行注释 //

多行注释 /*  */

文档注释/**  */

注解 Annotation(注释 注解)

1.注解的写法

@XXX[(一些信息)]

2.注解放置在哪里

类的上面;属性上面;方法上面;构造方法上面;变量上面;参数前面;

3.注解的作用

1.用来充当注释的作用(仅仅是一个文字的说明) @Deprecated

2.用来充当代码的检测(验证) @Override

3.可以携带一些信息(内容) 文件.properties  .xml 注解

4.java中有一些人家写好的注解供我们使用;

@Deprecated  用来说明方法是废弃的

@Override  用来做代码检测 检测此方法是否是一个重写

@SuppressWarnings(信息);去掉程序中的警告  String[] {""} 如果数组内的元素只有一个长度 可以不加{}

unused 变量定义后未被使用;

serial  类实现了序列化接口 不添加序列化ID号

rawtypes 集合没有定义泛型

deprecation 方法以废弃

unchecked 出现了泛型的问题 可以不检测 //@SuppressWarnings("unchecked")

all  包含了以上所有 ;@SuppressWarnings("all")

5.注解中可以携带信息  可以不携带  信息不能随意写  信息的类型只能是如下的类型

1.基本数据类型

2.String类型

3.枚举类型enum

4.注解类型@

5.数组类型[]  数组的内部需要是如上的四种类型

6.如何自己描述一个注解类型

1.通过@interface 定义一个新的注解类型

2.发现写法与接口非常相似(可以利用接口的特点来记忆注解)

可以描述public static final的属性 比较少见

可以描述public abstract的方法方法要求返回值必须有  返回值类型是如上那些

方法的作用是将我们传递的信息  搬走了 交给别人

3.我们自己定义的注解如果想要拿来使用

光定义还不够 还需要做很多细致的说明(需要利用java提供好的注解来说明)

元注解(也是注解 不是拿来使用的 是用来说明注解)

@Target 描述当前的这个注解可以放置在哪里写的

@Retention 描述当前的这个注解存在什么作用域中的

源代码文件-->编译-->字节码文件-->加载-->内存执行

SOURCE      CLASS      RUNTIME

@Inherited  描述当前这个注解是否被子类对象继承

@Document 描述这个注解是否能被文档所记录

4.自己使用自己描述的注解

如何解析注解内携带的信息(需要反射机制)

1.获取类Class

2.获取类中的成员  类 属性 方法 构造方法

3.Annotation a=成员.getAnnotation(注解类型.class);

4.注解对象 执行方法获取返回结果

注解应用场景

package myannotation;

import java.lang.annotation.*;

import java.lang.annotation.Target;

@Target({ElementType.CONSTRUCTOR,ElementType.METHOD,ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

public @interface An{

String[] value() default "小整";//默认方法(或属性)public abstract String[] value();

}

package myannotation;

public class Person{

//@An(value={"小张","娜娜"})

//@An("笑话");

@An()

private String name;

}

package myannotation;

import java.lang.reflect.*;

import java.lang.annotation.*;

@SuppressWarnings("unchecked")

public class TestMain{

public static void main(String[] args){

try{

//利用反射技术

Class c=Person.class;//类

Field fn=c.getDeclaredField("name");//属性

Annotation a=fn.getAnnotation(An.class);

Class aclass=a.getClass();

Method am=aclass.getMethod("value");

String[] s=(String[])am.invoke(a);

//利用正常的对象调用执行过程

//An a=(An)fn.getAnnotation(An.class);//获取注解对象

//String[] s=a.value();

for(String v:s){

System.out.println(v);

}

}catch(Exception e){

e.printStackTrace();

}

}

}

---------------------------------------------------------------------------------------------------------------

package myannotation;

import java.lang.annotation.*;

import java.lang.annotation.Target;

@Target({ElementType.CONSTRUCTOR,ElementType.METHOD,ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

public @interface An{

String[] value() default "小整";//默认方法(或属性)public abstract String[] value();

}

package myannotation;

import java.lang.annotation.*;

import java.lang.reflect.*;

@SuppressWarnings("unchecked")

public class Mys{

public Object getBean(String className){

Object obj=null;

try{

Class c=Class.forName(className);

//obj=c.newInstance();

Constructor con=c.getConstructor();//无参数的构造方法

obj=con.newInstance();

Annotation a=con.getAnnotation(An.class);

Class aclass=a.getClass();

Method am=aclass.getMethod("value");

String[] vs=(String[])am.invoke(a);//获取注解内容

//赋值

Field[] fs=c.getDeclaredFields();//获取全部的私有属性

//for(Field f:fs){

for(int i=0;i

String fn=fs[i].getName();//属性名

Class fntype=fs[i].getType();//属性类型

String firstL=fn.substring(0,1).toUpperCase();

String otherL=fn.substring(1);

StringBuilder sb=new StringBuilder("set");

sb.append(firstL);

sb.append(otherL);

String setfn=sb.toString();

Method md=c.getMethod(setfn,fntype);//方法名

Constructor co=fntype.getConstructor(String.class);

md.invoke(obj,co.newInstance(vs[i]));//执行方法

}

}catch(Exception e){

e.printStackTrace();

}

return obj;

}

}

package myannotation;

public class Person{

private String name;

private Integer age;

private String sex;

@An({"小张","18","男"})

public Person(){

}

public String getName(){

return this.name;

}

public void setName(String name){

this.name=name;

}

public Integer getAge(){

return age;

}

public void setAge(Integer age){

this.age=age;

}

public String getSex(){

return this.sex;

}

public void setSex(String sex){

this.sex=sex;

}

public String toString(){

return "name:"+this.name+";age:"+this.age+";sex:"+this.sex;

}

}

package myannotation;

public class User{

private String name;

private String password;

private Float money;

@An({"zs","123456","88.88"})

public User(){

}

public String getName(){

return this.name;

}

public void setName(String name){

this.name=name;

}

public Float getMoney(){

return money;

}

public void setMoney(Float money){

this.money=money;

}

public String getPassword(){

return this.password;

}

public void setPassword(String password){

this.password=password;

}

public String toString(){

return "name:"+this.name+";money:"+this.money+";password:"+this.password;

}

}

package myannotation;

//import java.lang.reflect.*;

//import java.lang.annotation.*;

//@SuppressWarnings("unchecked")

public class TestMain{

public static void main(String[] args){

Mys m=new Mys();

//Person p=(Person)m.getBean("myannotation.Person");

User p=(User)m.getBean("myannotation.User");

System.out.println(p);

}

}

JAVA注解行_java注解相关推荐

  1. 注解 java 反射_java注解和反射

    2020-05-19 注解的作用: 不是程序本身,可以对程序做出解释,和注释有相似之处. 可以被其他程序(如编译器)所读取. 注解的格式:以"@注解名"在代码上存在,还可以在其中添 ...

  2. 注解 java 原理_Java注解基本原理

    注解目前非常的流行,很多主流框架都支持注解,而且自己编写代码的时候也会尽量的去用注解,一时方便,而是代码更加简洁. 注解的语法比较简单,除了@符号的使用之外,它基本与Java固有语法一致.Java S ...

  3. java 反射 注解 运用_Java注解与反射的使用

    打开 Eclipse,新建 Java 项目"注解与反射",在 src 下右键并建立包 "注解与反射",在包下右键并建立 Annotation (注解)文件,名称 ...

  4. java注解详解_Java注解详解

    Annotation是从JDK5.0开始引入的新技术. Annotation的作用:–不是程序本身,可以对程序作出解释.(这一点,跟注释没什么区别)–可以被其他程序(比如:编译器等)读取.(注解信息处 ...

  5. java注释日志打印_java 注解结合 spring aop 实现自动输出日志

    auto-log auto-log 是一款为 java 设计的自动日志监控框架. 创作目的 经常会写一些工具,有时候手动加一些日志很麻烦,引入 spring 又过于大材小用. 所以希望从从简到繁实现一 ...

  6. java threadsafe 注解_Java 注解详解

    什么是注解 Annotation 中文译过来就是注解.标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解.而新手很难理解的主要原因是一些技术文档里的专业术语和名词不太 ...

  7. java自定义方法参数注解_Java方法中的参数太多,第1部分:自定义类型

    java自定义方法参数注解 我认为构造函数和方法中冗长的参数列表是Java开发中的另一个" 危险信号 ",就逻辑和功能而言,它们不一定是"错误的",但通常暗示当 ...

  8. java 自定义注解_Java注解

    前言 近日在阅读开源项目,发现项目里好多奇奇怪怪的注解(@DataScope.@Log...)看得我一脸懵,不知道大家是否也有过这样的经历,回想了一下,发现自己对于注解的知识,好像只停留在@Overr ...

  9. java只修改变的字段_java注解之运行时修改字段的注解值操作

    今天遇到需求:导入Excel时候列头会发生变化,客户是大爷要求你改代码, 导入Excel是用easypoi做的,识别表头是用注解@Excel(name = "xxx")通过这个na ...

最新文章

  1. 用八块腹肌调戏智能屏是一种什么体验?
  2. 前端学习(2429):上午回顾
  3. 云计算体系结构中soa构建层_云计算的服务模式及技术结构
  4. 计算机网络胡工程施工税率,弱电项目增值税6%、9%、13%税率怎样区分?项目经理必知内容...
  5. android如何局域网通信,android局域网怎么通信
  6. Kaggle —— 泰坦尼克号
  7. SOLIDWORKS Composer生成BOM表属性不显示的解决办法
  8. .NET 再出发, 20岁生日快乐
  9. [轻音乐] - 理查德·克莱德曼专辑[8CD]
  10. 华硕飞行堡垒扬声器没声音_华硕玩游戏没声音_华硕飞行堡垒玩游戏卡
  11. volatility内存取证分析与讲解(持续更新)
  12. 年薪五万程序员的生活及他的理财梦
  13. Android Binder 之 ServiceManager (基于android 12.0/S)
  14. 时光机特效在哪里?推荐这三个实用软件给你
  15. R语言实战(中文完整版)pdf
  16. python程序的三种控制结构_python二级考试大纲内容:程序的三种控制结构
  17. SOCKS5实现代理服务器(C++)
  18. 微信引流专家 v1.1.2.1
  19. 百度开源项目BFE-BFE总览
  20. 智能优化算法——哈里斯鹰算法(Matlab代码实现)

热门文章

  1. matlab2c使用c++实现matlab函数系列教程-binostat函数
  2. 具有多个生成器和多个判别器的GAN
  3. 微波网络归一化转移矩阵[a]导出散射矩阵[S]
  4. 解决 jQuery 和其他库的冲突
  5. 【转载】asp.net core 入门
  6. 【BZOJ1417】Pku3156 Interconnect
  7. Ubuntu下安装PHP的mongodb扩展操作命令
  8. poj3280 Cheapest Palindrome(回文串区间dp)
  9. windows 端口映射
  10. MySQL设置默认编码