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);
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号