一、基础
所有的类都继承自Object类
1、注解入门
2、内置注解
eg:
(1)@Override 重写的注解
(2)@Deprecated:已经被淘汰,不推荐程序员使用,但是可以使用,或者存在更好的方式
(3)@SuppressWarnings
3、元注解
(一)自定义元注解
一个类里面只能有一个公共的方法,不能有多个public
说明:
点击@Override查看源码中用到的元注解
(1)Target表示我们的注解可以用在哪些地方
(2)Retention表示我们的注解在什么地方还有效[runtime(运行时有效)>class>source]
(3)Document表示是否将我们的注解生成到java文档中
(4)Inherited表示子类可以继承父类的注解
eg:
(1)自动义注解
(2)自定义元注解,下面这种方式目标作用域只能是在方法上,将这个注解放在类上则会报错
(3)下面这种可以放到类上使用
(4)、自定义注解
4、自定义注解
eg:
(1)注解有多个参数
(2)注解只有一个值,可以使用value去赋值,但是只有把一个注解,可以直接省略
二、反射(java.Reflection)
1、Java反射概述
2、获得反射对象
3、得到Class类的几种方式
4、理解Class类并获取Class实例
eg:
eg:
除了void其他都是用类来表示的
只要元素类型和维度一样,就是同一个hashCode,同一个Class
5、类加载内存分析
eg:
加载、链接、初始化
6、分析类初始化
eg:
运行:反射和主动引用的结果一致,如下
不会产生类的引用的方法:
(1)通过Son调用父类的静态方法
(2)数组:只是一个名字,没有任何命名空间,所以不会被加载
(3)常量不会导致类的初始化
7、类加载器的作用
缓存:提高效率
eg:
不能获取到内库中的类,所以为null
获取的运行环境的路径
双亲委派机制:java.lang.string会去多重检测,保障安全性,如果有上述的包,再写一个名字相同的,则会使用上面的,不使用自己的写的
8、获取类的运行时结构
eg:
(1)获取包名+类名
(2)通过反射获取包名+类名
(3)获得类的属性
获得指定属性的值
(4)获得类的方法
(5)获得指定方法
(6)获得指定的构造器
(7)获得指定的构造器
9、动态创建对象执行方法
(1)构造对象
(2)通过反射操作方法
(3)通过反射操作属性
(4)不能直接操作私有属性,需要关闭程序的安全检测,通过方法的setAccessible(true)
10、性能对比分析
eg:
总结:平时如果反射调用用的多,就关闭检测,可以提升效率
11、获取泛型信息
eg:
(1)获得真实参数表类型信息
(2 )打印返回值类型信息
12、获取注解信息
eg:
运行
(2)获得类指定的注解