java 反射机制 (一)

java反射机制:

即通过外部文件配置,不修改文件源码的情况下,来控制程序,也符合设计模式的OCP原则(开闭原则:不修改源码,扩容原则)

Java Reflection

1.反射机制允许程序在执行期间借助于ReflectionAPI取得任何类的内部信息(比如成员变量,构造器,构造方法),并能操作对象的属性及方法。

2.加载完类以后,在堆中就产生了一个class类型的对象,一个类只有一个class对象,这个对象包含类的完整的结构信息,通过对这个对象得到类的结构,所以叫做反射

准确的在计算机内的过程如图所示:

 其实java中的每个创建的类都要经过classloder进行类加载,所以每一个类都有对应的Class对象

要点: 

反射相关的类:

  1. java.lang.Class代表类,Class对象表示某个类加载后在堆的对象

  2. java.lang.reflect.Method :代表类的方法,Method表示类的方法

  3. java.lang.refect.Field代表类的成员

  4. java.lang.reflect.Construtor代表类的构造方法

优缺点: 

优点:

可以动态的创建和使用对象,(框架底层核心),使用灵活,没有反射机制,框架技术就失去底层机制

缺点:

使用反射基本是解释执行,对执行速度有影响

这就涉及到如何优化的问题:将安全检查开关关闭

Class类:

 

  1. class类也是类,也继承Object类

  2. Class类对象不是new出来的,而是系统创建的

  3. 对于某个类的Class类对象,在内存中只用一份,因为类只加载一次,当你再次加载时,就会不重新加载

  4. 每个类的例子都会记得自己是那个Class实例生成的、

  5. 通过Class对象可以完整的得到了一个类的完整结构

    • Class是在堆里存

      得到该类对应的Class类(4种方式)

      第一种:已知一个类的全类名,且该类在类路径下,可以通过Class类的静态方法.forName获取

      多用于配置文件,读取类全路径,加载类

      放的

      Class aclass=Class.forName("study.yufa.reflect.co");必须包含所有路径

      第二种 :已知具体的类,通过类的class获取,该方式是最为安全可靠的

      用于参数传递,比如说通过反射得到对应的构造器对象 

      Class cdbdb= co.class;

      第三种:利用classLoader (有4种类加载器)

      co c=new co();
      ClassLoader classLoader=c.getClass().getClassLoader(); //先得到类加载器
        Class<?> aClass = classLoader.loadClass("study.yufa.reflect.co");

      第四种:直接利用类.getclass()

      也就是我平时输出的getclass的结果,就该类反射形成的class

    • 通过的Class类去的得到原来类的对象

      co c = (co) aclass.newInstance();
      package study.yufa.reflect;
      
      public class co {
            public  String a="78906";
             public String y="3445455";
      
          @Override
          public String toString() {
              return "co{" +
                      "a='" + a + '\'' +
                      ", y='" + y + '\'' +
                      '}';
          }
      }

      通过getField得到类的属性

      Field field=aclass.getField("a");//getField(属性名)
      System.out.println(field.get(c));

      getField方法与类的属性的修饰符有关,如果属性修饰符为private和不写(缺省(没有访问控制符):可被该类自身、本包中的类引用),则会爆出异常

       如果要通过Field 修改类的属性

      

field.set(c,"4567890");

 输出所有属性名

Field []field1=aclass.getFields();
for(Field f:field1){
    System.out.println(f.getName());
}

那些对象有class对象

外部类,成员内部类,静态内部类,匿名内部类,interface,数组,枚举类,annotation(注解)

基本数据类型,void

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/416008.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云OSS对象存储的使用和实现万能文件上传

文章目录 阿里云OSS对象存储的使用和实现万能文件上传1、开通阿里云OSS对象存储服务&#xff08;新用户可以免费试用三个月&#xff09;1.1、点击免费试用并选择自己想要使用的服务1.2、咱们这里选择使用第一个存储服务&#xff0c;然后点击立即试用 2、创建存储空间&#xff0…

IP源防攻击IPSG(IP Source Guard)

IP源防攻击IPSG&#xff08;IP Source Guard&#xff09;是一种基于二层接口的源IP地址过滤技术&#xff0c;它能够防止恶意主机伪造合法主机的IP地址来仿冒合法主机&#xff0c;还能确保非授权主机不能通过自己指定IP地址的方式来访问网络或攻击网络。 2.1 IPSG基本原理 绑定…

进制转换md5绕过 [安洵杯 2019]easy_web1

打开题目 在查看url的时候得到了一串类似编码的东西&#xff0c;源码那里也是一堆base64&#xff0c;但是转换成图片就是网页上我们看见的那个表情包 ?imgTXpVek5UTTFNbVUzTURabE5qYz0&cmd 我们可以先试把前面的img那串解码了 解码的时候发现长度不够&#xff0c;那我们…

三、软考-系统架构设计师笔记-计算机系统基础知识

计算机系统概述 计算机系统是指用于数据管理的计算机硬件、软件及网络组成的系统。 它是按人的要求接收和存储信息&#xff0c;自动进行数据处理和计算&#xff0c;并输出结果信息的机器系统。 冯诺依曼体系计算机结构&#xff1a; 1、计算机硬件组成 冯诺依曼计算机结构将…

PDN分析及应用系列二-简单5V电源分配-Altium Designer仿真分析-AD

PDN分析及应用系列二 —— 案例1:简单5V电源分配 预模拟DC网络识别 当最初为PCB设计打开PDN分析仪时,它将尝试根据公共电源网络命名法从设计中识别所有直流电源网络。 正确的DC网络识别对于获得最准确的模拟结果非常重要。 在示例项目中已经识别出主DC网络以简化该过程。 …

Centos7:自动化配置vim | suoders信任列表添加普通用户

Centos7&#xff1a;自动化配置vim | suoders信任列表添加普通用户 vim 配置原理sudoers系统可信任列表中添加普通用户自动化配置vim vim 配置原理 在目录/etc下有一个vimrc文件&#xff0c;该文件是系统中公共的vim配置文件&#xff0c;对所有用户都成立。  而在每个普通用户…

新品发布 | Ftrans CDS 跨域文件交换集中管控系统

1、背景 现如今&#xff0c;随着经济的快速发展&#xff0c;越来越多的企业架构呈现分散的状态&#xff0c;企业在异国、异地设立分支机构&#xff0c;在日常经营中&#xff0c;企业总部和分支机构间存在平行、垂直及互相交叉的管理模式和业务往来需求&#xff0c;因此&#x…

从0到1实现五子棋游戏!!

Hello&#xff0c;好久不见宝子们&#xff0c;今天来给大家更一个五子棋的程序~ 我们今天要讲的内容如下&#xff1a; 文章目录 1.五子棋游戏介绍1.1 游戏玩法介绍&#xff1a; 2.准备工作2.1 具体操作流程 3.游戏程序主函数4.初始化棋盘4.1.定义宏变量4.2 初始化棋盘 5.打印…

微软广告和网络服务CEO承认OpenAI的Sora将加入Copilot,但需要一些时间

事情的起因是一名网友询问 Sora 是否会加入 Copilot&#xff0c;微软广告和网络服务CEO首席执行官——Mikhail Parakhin 回应说&#xff1a;“最终&#xff0c;但这需要时间。”毕竟投了几十个亿美金进去&#xff0c;不亏是金主爸爸。 图为Mikhail Parakhin Sora是OpenAI开发的…

Socket网络编程(二)——UDP快速入门

目录 UDP相关概念UDP是什么为什么不可靠UDP能做什么UDP包最大长度 UDP单播、广播、多播概念1. 单播、广播、多播模型图2. ip地址分类3. 子网掩码的作用&#xff1a;4. 广播地址5. 网段划分6. 变长子网掩码 UDP核心APIAPI-DatagramSocketDatagramSocket构造方法DatagramSocket常…

疑似某免杀测试样本被国外安全团队捕获

今天笔者发现国外MalwareHunterTeam捕获到一例特殊的样本&#xff0c;如下所示&#xff1a; 服务器的IP地址为:117.50.106.161&#xff0c;同时样本的PDB信息&#xff0c;如下所示&#xff1a; 样本的PDB信息&#xff1a;C:\Users\Xiaowu\source\repos\bypass-1\Release\bypass…

解决vscode内置视图npm脚本操作报权限问题

项目背景 当我们使用 vscode 运行NPM脚本时却爆红了&#xff0c;提示系统上禁止运行脚本。 解决思路 竟然提示权限不够&#xff0c;那么咱们就从系统权限出发&#xff0c;vscode右键以管理员身份运行 在集成终端中输入一下命令 # get-executionpolicy是PowerShell中的命令,用…

开源的 Python 数据分析库Pandas 简介

阅读本文之前请参阅-----如何系统的自学python Pandas 是一个开源的 Python 数据分析库&#xff0c;它提供了高性能、易用的数据结构和数据分析工具。Pandas 特别适合处理表格数据&#xff0c;例如时间序列数据、异构数据等。以下是对 Pandas 的简明扼要的介绍&#xff0c;包括…

【MATLAB】兔子机器人动力学模型解读(simulink中的simscape的各模块介绍)

1、动力学模型 Rectangular Joint 控制平面上&#xff08;x&#xff0c;y轴&#xff09;的移动&#xff0c;去掉以后&#xff0c;机器人在原地翻滚不移动 Rigid Transform 坐标转换&#xff0c;B站视频已收藏 去掉&#xff0c;机体与地面贴合 此处的作用是设定机体的初…

深入探究【观察者模式】:简单音乐会售票系统案例分析

文章目录 1.观察者模式概述基本概念&#xff1a;工作原理&#xff1a; 2.案例-音乐会抢票2.1.具体实现2.1.1.被观察者接口2.1.2.被观察者实现类2.1.3.定义观察者接口2.1.3.定义观察者实现类2.1.4.测试观察者 3.总结3.1.优点和局限性3.2.思考 1.观察者模式概述 观察者模式是一种…

动态规划(算法竞赛、蓝桥杯)--混合背包DP

1、B站视频链接&#xff1a;E14 背包DP 混合背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N1010,M10000; int a[M],b[M],c[M];//体积、价值、类型 int f[N];int main(){int n,m,v,w,s;cin>>n>>m;int num1;for(int i1;i&…

精准杜绝医疗设备漏费的智慧防线

19339904493&#xff08;康&#xff09; 医疗设备漏费管理系统&#xff0c;如同医疗设备的智慧守望者&#xff0c;时刻守护着患者的权益与医院的利益。它运用先进的人工智能算法&#xff0c;深度读取设备内部图像与项目信息&#xff0c;通过深度学习图像并分析患者的检查部位、…

如何保护服务器的安全

互联网的迅速发展&#xff0c;让很多企业都很重视网络技术的使用&#xff0c;但是网络的传播速度比较快&#xff0c;同时容易造成数据、隐私方面的泄露现在每个企业基本有自己的服务器。有几点需要注意&#xff0c;可以参考&#xff1a; 1.基础密码安全 最基本的安全就是密码安…

Docker数据卷-自定义镜像

一.数据卷 1.1数据卷的基本使用 数据卷是一个特殊的目录&#xff0c;用于在Docker容器中持久化和共享数据。 数据卷的主要特点包括&#xff1a; 数据持久性&#xff1a;数据卷允许您在容器的生命周期之外保持数据的持久性。即使容器被删除&#xff0c;数据卷中的数据依然存在&…

礼遇派兑|神工坊龙年豪礼大放送,千元惊喜等你来领

新年伊始 万象更新 转眼间 已全面复工复学啦&#xff01; 前方警告⚠️&#xff1a;“年后再说”已无退路 万千“子涵”在线求助 别担心&#xff01;神工坊替你解决&#xff01; 神工坊高性能工业仿真平台 以国家超级计算无锡中心 丰富的软件资源和海量的硬件资源为支撑…