• 反射


    摘自:https://www.liaoxuefeng.com/wiki/1252599548343744/1264804593397984

    Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息

    反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法

    Class类

    除了int等基本类型外,java的其他类型全部都是class(包括interface),如String、Object、Runnable、Exception

    class(包括interface)的本质是数据类型(Type),无继承关系的数据类型无法赋值

    动态加载 

    JVM在执行Java程序的时候,并不是一次性把所有用到的class全部加载到内存,而是第一次需要用到class时才加载

    如果没有用到某个方法,那么这个方法对应的class文件根本就不会被加载,这就是JVM动态加载class的特性

    动态加载class的特性对于Java程序非常重要。利用JVM动态加载class的特性,我们才能在运行期根据条件加载不同的实现类

    JVM为每个加载的classinterface创建了对应的Class实例来保存classinterface的所有信息;

    获取一个class对应的Class实例后,就可以获取该class的所有信息;

    通过Class实例获取class信息的方法称为反射(Reflection);

    JVM总是动态加载class,可以在运行期根据条件来控制加载class。

     获取继承关系

    动态代理

    有没有可能不编写实现类,直接在运行期创建某个interface的实例呢?

    这是可能的,因为Java标准库提供了一种动态代理(Dynamic Proxy)的机制:可以在运行期动态创建某个interface的实例。

    动态代码,我们仍然先定义了接口Hello,但是我们并不去编写实现类,而是直接通过JDK提供的一个Proxy.newProxyInstance()创建了一个Hello接口对象。这种没有实现类但是在运行期动态创建了一个接口对象的方式,我们称为动态代码。JDK提供的动态创建接口对象的方式,就叫动态代理。

  • 相关阅读:
    数组——基础
    程序流程控制——循环结构
    程序流程控制——分支结构
    运算符
    进制
    变 量
    Java中的名称命名规范
    标识符(Identifier)
    保留字(reserved word)
    关键字
  • 原文地址:https://www.cnblogs.com/liushoudong/p/12601351.html
Copyright © 2020-2023  润新知