Java注解与反射系列——反射概述day1-2

前言

反射最重要的用途:与注解进行配合,实现
所以学注解必要反射

静态语言

运行时结构不可变的语言就是静态语言。如Java、C++等
虽然Java不是动态语言,但Java可以称之为“准动态语言”。
Java有一定的动态性,我们可以利用反射机制获得类似动态语言的特性

Java的动态性让编程的时候更加灵活!

动态语言

指的是运行的时候开源改变其自身结构的语言,如C#,JavaScript,PHP等
例如可以引入新的函数,对象,新的代码

特点:没有强制的数据结构,javaScript 中的 var ,python的无需指明变量类型

即允许在运行时,代码可以根据某些条件改变自身结构!

反射

概述

Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

例如:

Class classdemo1 = Class.forName("java.lang.String") 

加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射

反射流程

在这里插入图片描述

反射机制提供的功能

  1. 在运行时判断任意一个对象所属的类
  2. 在运行时构造任意一个类的对象
  3. 在运行时判断任意一个类所具有的成员变量和方法
  4. 在运行时获取泛型信息
  5. 在运行时调用任意一个对象的成员变量和方法
  6. 在运行时处理注解
  7. 生成动态代理(AOP)

反射的优点与缺点

优点

动态创建对象和编译,提高程序灵活性

缺点

影响性能

反射主要的API

  1. java.lang.Class:代表一个类(其实在Object中)
  2. java.lang.reflect.Method:代表类的方法
  3. java.lang.reflect.Field:代表类的成员变量
  4. java.lang.reflect.Constructor:代表类的构造器
    在这里插入图片描述
    在这里插入图片描述

获取反射对象

一个类在内存中只有一个class对象,所以你怎么获取都是相同的
类被加载后,类的整个结构都会被封装在Class对象中

代码示例

package example.reflect;



public class demo1 {
    public static void main(String[] args) throws ClassNotFoundException {
        //一个类只有一个class对象
        Class stu = Class.forName("example.reflect.entity.Stu");
        System.out.println(stu);
        
    }
}

结果截图

在这里插入图片描述

该方法返回类型为Class类,是Java反射的源头!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值