A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蓝色土耳其 初级黑马   /  2019-5-19 10:33  /  720 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

知识点总结
  • java虚拟机类加载的过程和时机
    • 类加载
      • 内置的类加载器,将class文件加载入虚拟机内存
      • 为当前class文件生成java.lang.Class对象(创建对象的模板,分析类的属性方法)

    • 类链接
      • 验证:验证当前类的语法结构
      • 准备:   类变量的内存分配
      • 解析:    将变量名换成内存地址

    • 类初始化
      • 初始化:  变量进行初始化


  • 何时会触发类的加载和初始化
    • java命令执行相应的class 文件的时候
    • 创建类的对象    new Person()
    • 调用类的静态方法或静态变量  Person.name    Person.eat()
    • 初始化某个类的子类
    • 通过反射机制获取java.lang.Class对象的时候

  • 类加载器的作用
    • 将class文件加载入内存,为class文件生成 java.lang.Class对象

  • Java类加载器分类(父类委托)
    • 应用程序类加载器:负责加载我们工程中自定义的类
    • 平台类加载器:底层类库的加载
    • 根类加载器:底层类库的加载

  • 反射的概念
    • 概念:通过class对象动态的获取类内部结构(构造函数,方法,变量),对其进行调用的过程

  • 获取类class对象的三种方式
    • 类名.class
    • 对象.getClass()
    • Class.forName("完整类路径")

  • 反射获取构造方法
    • 获取共有构造方法: c.getConstructors()
    • 获取全部构造方法: c.getDeclaredConstructors()
    • 获取单个的共有构造方法: c.getConstructor(Class<?>... parameterTypes)
    • 获取单个全部的构造方法:c.getDeclaredConstructor(Class<?>... parameterTypes)
    • 获取到构造方法对应的对象后如何实例化:newInstance()
    • 可以调用私有构造:setAccessible(true);

  • 反射获取字段
    • 获取所有公有属性:getFields()
    • 获取所有属性:getDeclaredFields()
    • 获取单个公有属性:getField(String fieldName)
    • 获取单个所有属性:getDeclaredField(String fieldName)
    • 为属性赋值:addressField.set(obj,"西安");
    • 读取属性的值:addressField.get(obj)

  • 反射调用方法
    • 获取所有公有方法包括继承来的:getMethods()
    • 获取所有方法不包括继承来的:getDeclaredMethods()
    • 获取单个公有方法:getMethod("方法名")
    • 获取单个方法:getDeclaredMethod("方法名")
    • 方法调用:m.invoke(obj);

  • 模块化编程
    导出包和接口实现类
    import com.test.MyInterface;
    import com.test.MyInterfaceImpl1;
    import com.test.MyInterfaceImpl2;

    module MyOne {
        exports com.test;
        provides MyInterface with MyInterfaceImpl1, MyInterfaceImpl2;
    }
    import com.test.MyInterface;

    module MyTow {
        requires MyOne;
        uses MyInterface;
    }注解1.注解概念
    • 注解就是用于说明程序的。参与程序的运行
    • JDK1.5版本之后的新特性

    2.注解的作用
    • 编写文档(API帮助文档)
    • 编译检查(@Override   @FunctionalInterface)
    • 代码分析(配合反射使用)【重点

    3.常用的注解
    • @Override     用于检测方法是否是重写的
    • @Deprecated    用于标识某个方法是否已过时
    • @SuppressWarnings    用于压制警告
    • @FunctionalInterface    用于检测接口是否是一个函数式接口
    • @Before      在功能方法之前被执行
    • @Test           执行功能方法
    • @After         在功能方法之后被执行

    4.自定义注解
    • 格式


    public @interface 注解名称{
       
    }
    • 本质
      • 注解本质就是一个接口!所有的注解都实现了Annotation接口

    • 注解中的属性
      • 属性(方法)的返回值数据类型
        • 基本数据类型四类八种
        • String
        • 枚举
        • 注解
        • 以上数据类型的数组

      • 注意事项
        • 可以使用default给属性设置一个默认初始化值
        • 如果属性名叫value,而且只有一个属性时,那么赋值时,属性名可以省略
        • 数组进行赋值时,需要使用{}。如果数组中只有一个值,{}可以省略


    • 元注解
      • @Target(ElementType)
        • TYPE   用于类上面
        • METHOD  用于方法上面
        • FIELD     用于变量上面

      • @Retention(RetentionPolicy)
        • SOURCE   源代码阶段
        • CLASS      字节码阶段
        • RUNTIME  运行时阶段

      • @Documented     可以被抽取到帮助文档中
      • @Inherited            可以被子类继承





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马