0x00前言

1.注解是什么:

(1)可以叫做注释类型,注解是一种引用数据类型,编译后也是生成class文件

(2)提供信息给编译器: 编译器可以利用注解来探测错误和警告信息

比如 @Override提示子类要复写父类中被 修饰的方法

(3)编译阶段时的处理: 软件工具可以用来利用注解信息来生成代码、Html文档或者做其它相应处理。

(4)运行时的处理: 某些注解可以在程序运行的时候接受代码的提取

0x01基础使用

0x1注解的基础属性

1.自定义一个注解:@interface MyAnnotation在inteface前面加一个@。

2.使用范围:类,属性,方法,构造方法,接口上,注解也可以出现在注解上面.所有位置都可以出现;(注解的注解叫做元注解)

0x2java自带的注解。

a.@Override这是重写父类方法的必要注解。这个注解只能注解方法

b.这个方法是给编译器看的,跟运行阶段没关系,编译器看到这个注解的方法不是重写父类的编译器就会报错。

c.元注解是@Target,@Retention

d.@Target,标注的注解只能出现在那些方法,@Retention,标注的注解最终保存在哪里

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)//只能保存在java源文件中
public @interface Override {
}

f.@Retention保持性

@Retention(RetentionPolicy.SOURCE)//表示保存在java源文件中(你在class编译获得class文件中是找不到它的)
@Retention(RetentionPolicy.CLASS)//表示保存在class文件中
@Retention(RetentionPolicy.RUNTIME)//保存在class文件中还可以被反射机制访问道

g.@Deprecated表示这个类已经过时了。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}

0x03注解中定义属性

0x1定义和使用方法

1.可以在注解的中括号了的定义属性

2.属性可以是的类型:byte,int,lang,short,float,double,boolean,char,String,Class,枚举类型及其以上属性的数组

 @interface MyAnnotation{
// 我们可以在注解中定义属性,看着像一个方法其实它叫属性
String name();
String [] str1();
int value();
char value2();
boolean value3();

3.使用方法在你用注解修饰的方法的后面要用括号把属性值赋值。

(1)如果你的属性值只有一个并且属性名是value的话=号和=号前面的属性可以省略

(2)如果你在注解里面的属性已经进行了赋初值,就可以不用赋值。

(3)如果属性是一个数组,但是只有一个元素的时候可以省略大括号

class MyAnntation{
@MyAnnotation(name = "XIAOMING",value =1,value2 ='3',value3 = true,str1 = "daiwfwa")
public void dosome(){ }
}

0x04反射注解

0x1.获取类上的注解

(1)判断是否存在该注解isAnnotationPresent()

(2)存在注解通过getAnnotation();

  public static void main(String[] args) throws Exception{
Class class_tesr=Class.forName("zhonglin.www.MyAnntation");
//先判断是否有
if (class_tesr.isAnnotationPresent(MyAnntation.class)){
MyAnnotation myAnnotation=(MyAnnotation)class_tesr.getAnnotation(MyAnnotation.class);
String value= myAnnotation.name();
}
}
}

0x2.获取类上的注解

(1)如果需要获得方法上的注解就得获得方法

(2)跟前篇文章引用Method数组去获取getDeclareMethod获取所有方法

  Method dosomgetfelct=class_tesr.getDeclaredMethod("dosome");
if (dosomgetfelct.isAnnotationPresent(MyAnnotation.class));

0x05总结

总体来说注解这一块的内容不是很多,归纳下来:1.注解的定义。2.注解的保存性策略(@Retention)和java内置注解3.注解的反射主要是跟前面的反射机制相结合,反射章节听完基本都是相同的方法从类-方法--属性来获取。

4.注解的作用还是存在在java的反序列化漏洞,当然在java开发中也会有很大的作用

0x06后言

其实看到这里,javase基本上就完结了,接下来就是javaee的部分了javaee的部分的大部分是框架只是,框架知识呢就可以和java代码审计一起做了,我看的是b站上面的动力节点的java课,对比起了动力节点讲的真很全面了,

javase历经一个月多吧,发现了java和python的相似也不同确实写python感觉要简洁好多。接下来呢不慌进入javaee先去吧java的 爬虫和socket对比着我以前学习的python的这两个模块一起学习一下再进入javaee的阶段。

最新文章

  1. ES6 笔记
  2. 一条SQL查询多个统计结果
  3. JS動態綁定下拉單內容
  4. vb6动态创建webbrowser
  5. Java 字符流实现文件读写操作(FileReader-FileWriter)
  6. ASP长文章分页的两个方法,函数
  7. C++第11周(春)项目1 - 存储班长信息的学生类
  8. BGP网络学习总结
  9. oracle循环插入1万条数据
  10. sql sever insert into混合嵌套插入
  11. 【逆元】HDU-1576
  12. (网页)swiper.js轮播图插件
  13. Python深入:Distutils发布Python模块--转载
  14. vue安装与配置
  15. SOCKET中send和recv函数工作原理与注意点
  16. 嵌入式开发之uart---编程
  17. 【第九章】 springboot + mybatis + 多数据源 (AOP实现)
  18. Unity 3D游戏-消消乐(三消类)教程和源码
  19. python之系统命令
  20. MySQL监控和预警

热门文章

  1. PHP极简短连接
  2. 【JDBC】学习路径7-转账-commit事务操作
  3. iOS WebRTC 点对点实时音视频流程介绍
  4. ipad好伴侣
  5. FR801xH开发
  6. KingbaseES V8R6 锁等待检测
  7. 手写tomcat——有线程池化能力的servlet 服务
  8. Typora破解下载
  9. 从 Hadoop 到云原生, 大数据平台如何做存算分离
  10. 思维导图学《On Java》基础卷 + 进阶卷