java回顾之反射和注解
Posted springcode
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java回顾之反射和注解相关的知识,希望对你有一定的参考价值。
java回顾之反射和注解
1.类加载
1.类的加载
当一个类第一次被使用的时候,会被加载到方法区,且一个类只会加载一次。
一个类在内存中只有唯一的一个字节码对象(.class对象)
2.类的加载时机
-
创建类的实例。
-
调用类的静态变量,或者为静态变量赋值。
-
调用类的静态方法。
-
使用反射方式来强制创建某个类或接口对应的java.lang.Class对象。
-
-
直接使用java.exe命令来运行某个主类。
3.类加载器
类加载器的功能就是完成类的加载。
-
启动类加载器(Bootstrap ClassLoader)
-
扩展类加载器(Extension ClassLoader) 在JDK9以后更名为平台类加载器(Platform ClassLoader)
-
应用程序类加载器(Application ClassLoader)
-
idea获取类加载器
2.反射
1.反射的概念
反射是一种机制,可以在程序运行期间,去调用类中的各种成员。(构造方法,变量,方法),可以不创建对象,就是用里面的方法
2.获取字节码对象的三种方式
-
使用类名调用class属性
-
使用对象调用getClass()方法
-
使用Class类的静态方法forName()
3.反射操作构造方法
反射获取构造方法
Class类可以调用:
getConstructor(Class... c) 可以获取某一个构造方法(公共的)
getConstructors() 可以获取所有的构造方法(公共的)
反射执行构造方法
Constructor类可以调用:
newInstance(Object... obj) : 执行当前构造方法创建对象。
4.反射操作成员方法
-
反射获取成员方法
-
getMethod(String name, Class... c) :获取一个成员方法(公共的)
getMethods() : 获取类中的所有方法(公共的) - 反射执行成员方法
- Method类可以调用:
-
- Object invoke(Object obj , Object... o) :让方法执行
-
- Method类可以调用:
5.暴力反射
在一个类中有些成员因为权限的问题无法访问,暴力反射的作用就是跳过权限的限制,可以访问私有成员。
暴力反射写法:在之前的方法中间加Declared
在执行之前: .setAccessable(true);//设置成可访问
暴力反射技术一般不用, 因为他打破java的规范。
3.注解
1.概述
注解就是@
注解是类的一个组成部分,可以给类添加一些额外的内容,注解相当于是一个标记。
2.注解的作用
-
生成帮助信息
@author 作者
@param 参数介绍 -
编译检查
@Override 检查方法是一个重写方法
@FunctionalInterface 检查接口是一个函数式接口 -
有功能性质
@Test 单元测试
@After
3、自定义注解
格式【记住】
public @interface 注解{
}
属性
格式
数据类型 属性名();
数据类型
基本数据类型
String
Class
枚举
注解
以上类型的数据形式
注意事项:【记住】
1.如果属性有默认值,在使用时可以不赋值
2.如果只有一个属性且名字叫value,在使用是可以省略value=
3.数组类型的属性如果只有一个元素,可以省略大括号{}
元注解
@Target
定义注解的使用位置
@Retention
定义注解的生命周期
总结:
反射【重点】
概念
反射是一种机制,能够在成员运行期间,获取类中的各种成员
//如果你之前见过快速创建对象的方式,你可以去用,但是那个东西已经过时了。
获取构造方法【重点】
getConstructors() :获取所有的构造方法
getConstructor() :获取某一个构造方法
执行构造方法:
newInstance() :执行
获取成员方法【重点中的重点】
getMethods() :获取所有的成员方法
getMethod() :获取某一个成员方法
执行成员方法:
invoke() :执行
暴力反射
在上面获取的方法中间加上Declared
获取之后设置访问权限:setAccessable(true);
以上是关于java回顾之反射和注解的主要内容,如果未能解决你的问题,请参考以下文章