枚举 注解 反射

枚举:
是用来定义有限长度的常量,相对于之前创建的变量更加方便。
注意事项!
1.枚举定义好以后避免修改,继承的不是Objcet类是java.lang.Enum
2.枚举不能有子类因为被final修饰,构造方法也必须私有。
3.在switch中可以直接使用常量名,不用类名.常量名
4.不要提供set方法,要不然创建枚举无意义,也不要定义name属性因为自带了name属性
 

 注解/元注解
注解主要是给包 类 方法做备注的,可以通过反射获取标注的内容,注解在运行时可以嵌入到字节码中。

@Override : 重写 *
@FunctionalInterface
: 函数式接口 *
SuppressWarnings:抑制编译时的警告信息。 *
1. @SuppressWarnings("unchecked") [^ 抑制单类型的警告
]
2. @SuppressWarnings("unchecked","rawtypes") [^ 抑制多类型的警告
]
3. @SuppressWarnings("all") [^ 抑制所有类型的警告
]

元注解:
对于自定义注解的注解,而自定义注解必须有1个Annotation和1-n个 ElenmenType 关联&&有1个Annotation 1个RetentonPoilcy关联

Annotation
当 Annotation
与某个 ElementType 关联 时,就意味着:Annotation有了某种用途

RetentionPolicy
1.若 Annotation 的类型为 SOURCE ,则意味着: Annotation 仅存在于编译器处理期间,编译器 处理完之后,该 Annotation 就没用了。 例如, " @Override" 标志就是一个 Annotation 。当它修 饰一个方法的时候,就意味着该方法覆盖父类的方法;并且在编译期间会进行语法检查!编译器处 理完后,"@Override" 就没有任何作用了。

b) Annotation 的类型为 CLASS ,则意味着:编译器将 Annotation 存储于类对应的 .class 文件 中,它是 Annotation 的默认行为。

c) Annotation 的类型为 RUNTIME ,则意味着:编译器将 Annotation 存储于 class 文件中,并 且可由JVM读入

格式(1.定义的注解,自动继承了java.lang,annotation.Annotation接口 2.注解中的每一个方法,实际是声明的注解配置参数   3.可以通过
default来声明参数的默认值  如果只有一个参数成员,一般参数名为value 注解元素必须要有值,我们定义注解元素时,经常使用空字符串、 0 作为默认值。)
@interface 自定义注解名{}

 

 反射
JAVA反射机制是在运行状态中,获取任意一个类的结构 , 创建对象 , 得到方法,执行方法 , 属性 
类加载器

1.BootstrapClassLoader(引导启动类加载器){C++编写}
2.ExtensionClassLoader(扩展类加载器) {父类BootstrapClassLoader}
3.App ClassLoader(应用类加载器){父加载器为
Ext ClassLoader}

得到Calss的方式

//这个不是格式只是为了方便理解!!
if(类已经存在){
通过包名
.类名.class 得到一个类的 类对象
}else if{
Calls对象.getCalss()得到对象
}else{在编写代码时
, 知道类的名称
Class.forName(包名
+类名): 得到一个类的 类对象
}

通过class对象 获取一个类的构造方法
1.指定的参数类型获取,单个构造方法
getConstructor(参数类型的class对象数组)
2.获取构造方法数组
getConstructors();

3.获取所有权限的单个构造方法
getDeclaredConstructor(参数类型的class对象数组)
4.获取所有权限的构造方法数组
getDeclaredConstructors();

获取方法:
newInstance(Object... para)
(可访问私有方法)setAccessible(boolean flag)

获取Calls方法
1.getMethod(String methodName , class.. clss) 根据参数列表的类型和方法名, 得到一个方法(public修饰的)
getMethods(); 得到一个类的所有方法 (public
修饰的)

2.getDeclaredMethod(String methodName , class.. clss) 根据参数列表的类型和方法名, 得到一个方法(除继承以外所有的:包含私有, 共有, 保护, 默认)
getDeclaredMethods();得到一个类的所有方法 (除继承以外所有的:包含私有, 共有, 保护, 默认)
格式;
invoke(Object o,Object... para) :
调用方法 ,
参数1.
要调用方法的对象
参数2.
要传递的参数列表
getName()
获取方法的方法名称
setAccessible(boolean flag)
如果flag
true 则表示忽略访问权限检查 !(可以访问任何权限的方法)

获取属性

1. getDeclaredField(String filedName)
根据属性的名称 , 获取一个属性对象 ( 所有属性 )
setAccessible(boolean flag) (权限)
2. getDeclaredFields()
获取所有属性
3. getField(String filedName)
根据属性的名称 , 获取一个属性对象 (public 属性 )
4. getFields()
获取所有属性 (public)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值