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

news/2024/5/19 3:41:05 标签: java, 开发语言, 注解, 反射

Java注解反射系列——反射概述

  • 前言
    • 静态语言
    • 动态语言
  • 反射

前言

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

静态语言

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

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

动态语言

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

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

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

反射

概述

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

例如:

java">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对象中

代码示例

java">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反射的源头!


http://www.niftyadmin.cn/n/1717347.html

相关文章

Java注解与反射系列——Class类day1-3

Java注解与反射系列——Class类Class类常用方法哪些类型有Class对象?类的加载过程类的加载链接初始化什么时候会发送类的初始化类的主动引用类的被动引用获取Class实例结果类加载器的作用类缓存Java中的类加载器获取类的加载器获取类中的信息Class类 对象照镜子后可…

Java注解与反射系列——反射示例day2-1

Java注解与反射系列——反射示例反射示例获取反射对象源码通过反射机制动态创建对象通过反射调用方法通过反射设置属性通过反射获取泛型反射操作注解(重要)反射示例 获取反射对象 package example.reflect;public class demo1 {public static void mai…

Java注解与反射系列——注解与反射实例day2-2

Java注解与反射系列——注解与反射实例实例CheckMethod注解Stu类测试实例 用于获取所有带有注解的方法的方法名并记录日到txt中 CheckMethod注解 package example.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java…

linux服务器管理——高可用电商项目系统部署方案

linux服务器管理——高可用电商项目系统部署方案高可用电商项目系统部署方案报告前言[摘 要][关键词]环境拓扑图完整拓扑图准备工作必要安装和操作克隆搭建LVS的DR模式简单拓扑配置IProuter查看网卡的uuid以及mac地址配置静态IP测试连通router启动路由转发查看路由表lvs1lvs2RS…

Java接口详解

Java接口什么是Java接口接口特性接口与类的区别接口特性抽象类和接口的区别如何定义接口接口的进化jdk7jdk8jdk9接口实现接口示例抽象方法1.创建接口2.书写要实现的方法3.构建实现类4.实现类5.实现方法静态常量默认方法覆盖实现静态方法私有方法普通私有方法静态私有方法接口的…

Java8时间与日期API(别再使用Date和Calendar了)

Java8时间与日期APIAPI设计原因时间日期常用类概述创建方法(now)生成自定义的日期时间对象(of)为LocalDateTime添加时区信息ZoneId类获取系统时区获取其他时区的时间关于Month枚举根据现有时间进行时间推断(plus&#…

SpringSecurity系列——概述day1-1

SpringSecurity系列——概述简介什么是授权什么是认证quickstart1.创建项目选择依赖SpringSecurity依赖2.Controller测试3.访问localhost8080/demo用户名和密码4.登录5.退出登录简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安…

SpringSecurity系列——JWT(jjwt)day1-2

SpringSecurity系列——JWTday1-2简介官网地址Session对比JWTsession问题JWTJWT的优点JWT的结构HeaderPayloadSignatureJJWT地址JJWT基础使用和介绍导入依赖quickstart代码解释设置使用加密算法构建jwt设置payload中包含的用户信息设置加密算法压缩生成token令牌错误一&#xf…