java学习笔记反射机制

2.关于反射的理解

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

框架 = 反射 + 注解 + 设计模式。

3.体会反射机制的“动态性”

//体会反射的动态性
@Test
public void test2(){

    for(int i = 0;i < 100;i++){
        int num = new Random().nextInt(3);//0,1,2
        String classPath = "";
        switch(num){
            case 0:
                classPath = "java.util.Date";
                break;
            case 1:
                classPath = "java.lang.Object";
                break;
            case 2:
                classPath = "com.atguigu.java.Person";
                break;
        }

        try {
            Object obj = getInstance(classPath);
            System.out.println(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

/*
创建一个指定类的对象。
classPath:指定类的全类名
 */
public Object getInstance(String classPath) throws Exception {
   Class clazz =  Class.forName(classPath);
   return clazz.newInstance();
}


4.反射机制能提供的功能

5.相关API

java.lang.Class:反射的源头
java.lang.reflect.Method
java.lang.reflect.Field
java.lang.reflect.Constructor

1.Class类的理解

1.类的加载过程:
程序经过javac.exe命令以后,会生成一个或多个字节码文件(.class结尾)。
接着我们使用java.exe命令对某个字节码文件进行解释运行。相当于将某个字节码文件
加载到内存中。此过程就称为类的加载。加载到内存中的类,我们就称为运行时类,此
运行时类,就作为Class的一个实例。
2.换句话说,Class的实例就对应着一个运行时类。
3.加载到内存中的运行时类,会缓存一定的时间。在此时间之内,我们可以通过不同的方式
来获取此运行时类。


2.获取Class实例的几种方式:(前三种方式需要掌握)
        //方式一:调用运行时类的属性:.class
        Class clazz1 = Person.class;
        System.out.println(clazz1);
        //方式二:通过运行时类的对象,调用getClass()
        Person p1 = new Person();
        Class clazz2 = p1.getClass();
        System.out.println(clazz2);

        //方式三:调用Class的静态方法:forName(String classPath)
        Class clazz3 = Class.forName("com.atguigu.java.Person");
//        clazz3 = Class.forName("java.lang.String");
        System.out.println(clazz3);

        System.out.println(clazz1 == clazz2);
        System.out.println(clazz1 == clazz3);

        //方式四:使用类的加载器:ClassLoader  (了解)
        ClassLoader classLoader = ReflectionTest.class.getClassLoader();
        Class clazz4 = classLoader.loadClass("com.atguigu.java.Person");
        System.out.println(clazz4);

        System.out.println(clazz1 == clazz4);


3.总结:创建类的对象的方式?
方式一:new + 构造器
方式二:要创建Xxx类的对象,可以考虑:Xxx、Xxxs、XxxFactory、XxxBuilder类中查看是否有
静态方法的存在。可以调用其静态方法,创建Xxx对象。
方式三:通过反射

4.Class实例可以是哪些结构的说明

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

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

相关文章

vue3 - 图灵

目录 vue3简介整体上认识vue3项目创建Vue3工程使用官方脚手架创建Vue工程[推荐] 主要⼯程结构 数据双向绑定vue2语法的双向绑定简单表单双向绑定复杂表单双向绑定 CompositionAPI替代OptionsAPICompositionAPI简单不带双向绑定写法CompositionAPI简单带双向绑定写法setup简写⽅…

链表的中间结点(C语言)———链表经典算法题

题目描述. - 力扣&#xff08;LeetCode&#xff09;&#xff1a; ​ 答案展示: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* middleNode(struct ListNode* head) {struct ListNode* fast,…

商业写字楼如何选择停车场管理系统?停车场管理系统建设有哪些注意事项

在现代商业环境中&#xff0c;写字楼停车场的高效管理对于维护企业形象、提高员工满意度以及增强客户体验至关重要。写字楼停车场管理的特点主要包括高流量、高周转率、多样化的车辆类型、高安全性要求以及对客户体验的重视&#xff0c;那么商业写字楼停车场应该从哪些方面提升…

【计网】TCP中的滑动窗口

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 工作原理如下&#xff1a; 结语 我的其他博客 正文 TCP&#xff08;传输控制协议&#xff09;中的滑动窗口是一种用于流量控制和拥…

[Kubernetes] sealos部署 K8s 集群

文章目录 1.sealos 介绍2.操作系统基础配置3.安装部署 K8s4.验证 K8s 集群5.部署测试资源 1.sealos 介绍 Sealos 是一个基于 Kubernetes 内核的云操作系统发行版。它采用云原生方式&#xff0c;摒弃传统的云计算架构&#xff0c;转向以 Kubernetes 为云内核的新架构。这使得企…

30万奖励!2023-2024年度成都市工业企业“小升规”申报对象奖补、材料程序

一、申报对象及奖励标准 &#xff08;一&#xff09;2023年度申报对象及奖励标准。2022年3月1日至2022年12月31日首次进入成都市规模以上工业名录库的企业。2022年营业收入在2000万元&#xff08;含&#xff09;至5000万元的&#xff0c;给予10万元奖励&#xff1b;2022年营业…

4. 分布式链路追踪客户端工具包Starter设计

前言 本文将从零搭建分布式链路追踪客户端工具包的Starter&#xff0c;并将在后续文章中逐步丰富支持的场景。这里首先将搭建一个最基础的Starter&#xff0c;能提供的功能和1. 看完这篇文章我奶奶都懂Opentracing了一文中的示例demo类似。 相关版本依赖如下。 opentracing-…

大模型LLM之SFT微调总结

一. SFT微调是什么 在大模型的加持下现有的语义理解系统的效果有一个质的飞跃&#xff1b;相对于之前的有监督的Pre-Train模型&#xff1b;大模型在某些特定的任务中碾压式的超过传统nlp效果&#xff1b;由于常见的大模型参数量巨大&#xff1b;在实际工作中很难直接对大模型训…

视频剪辑批量转码技巧:如何将MP4视频快速转换为MP3音频的方法

在视频剪辑和音频处理的领域中&#xff0c;经常需要将视频文件转换为音频文件&#xff0c;特别是将MP4视频转换为MP3音频。这样的转换不仅可以减少文件大小&#xff0c;方便传输和存储&#xff0c;还可以在不损失音频质量的情况下&#xff0c;方便在各种设备上播放。下面&#…

AI写的论文AI疑似度太高怎么办?教你一招降低aigc痕迹

随着 AI 技术迅猛发展&#xff0c;各种AI辅助论文写作的工具层出不穷&#xff01; 为了防止有人利用AI工具进行论文代写&#xff0c;在最新的学位法中已经明确规定“已经获得学位者&#xff0c;在获得该学位过程中如有人工智能代写等学术不端行为&#xff0c;经学位评定委员会…

【随笔】Git 高级篇 -- 不带 source 参数的命令 git fetch git push(三十九)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

电脑硬盘故障,这5种情况要了解!

在数字化时代&#xff0c;电脑硬盘作为存储数据的重要设备&#xff0c;其稳定性和安全性直接关系到用户的数据安全和工作效率。然而&#xff0c;硬盘故障却是一个无法完全避免的问题。为什么会出现电脑硬盘故障&#xff1f;出现该问题时应该如何解决&#xff1f;一文带你弄懂答…

【个人博客搭建】(18)使用Quartz.NET 定时备份数据库

Quartz.NET在系统主要承担的一些关键功能&#xff1a; 任务调度&#xff1a;Quartz.NET 允许开发人员创建、调度和管理定时任务&#xff0c;支持简单触发器和Cron表达式等多样化的触发策略。灵活性&#xff1a;Quartz.NET 提供了灵活的任务安排机制&#xff0c;不仅支持基于时间…

数据挖掘(一)数据类型与统计

前言 打算新开一个笔记系列&#xff0c;基于国防科技大学 丁兆云老师的《数据挖掘》 数据挖掘 1、数据类型与统计 数据统计 最大值&#xff0c;最小值&#xff0c;平均值&#xff0c;中位数&#xff0c;位数&#xff0c;方差等统计指标 df.describe() #当调用df.describe(…

电池储能系统的电荷状态预测 | 利用数据驱动机器学习预测锂离子电池储能系统的电荷状态附代码

概述 准确估计电荷状态(SOC)对于保证锂离子电池储能系统的安全性和稳定性至关重要。然而,由于锂离子电池内多个复杂过程的耦合动力学,以及缺乏监测电池内部性能变化的措施,这项任务非常具有挑战性。近年来,随着图形处理器(GPU)计算能力的不断发展,深度学习作为 SOC 估计方…

# 从浅入深 学习 SpringCloud 微服务架构(十四)微服务链路追踪

从浅入深 学习 SpringCloud 微服务架构&#xff08;十四&#xff09;微服务链路追踪 一、微服务的链路追踪概述 1、微服务架构下的问题 在大型系统的微服务化构建中&#xff0c;一个系统会被拆分成许多模块。这些模块负责不同的功能&#xff0c;组合成系统&#xff0c;最终可…

java中的并发编程

1、上下文切换 即使是单核处理器也支持多线程执行代码&#xff0c;CPU通过给每个线程分配CPU时间片来实现 这个机制。这个时间片特别短&#xff0c;一般是几十毫秒&#xff0c;所以会让我们觉得好多任务同时进行。 CPU通过时间片分配算法来循环执行任务&#xff0c;当前任务执…

autolabor(ROS开发笔记)__1

视频链接&#xff1a;ROS机器人 chapter 1 ROS概述与环境搭建 学习步骤&#xff1a; 1.了解该模块的相关概念 是什么&#xff0c;为什么学&#xff0c;前世今生&#xff0c;发展前景 2.安装官方软件包 具备基本的开发环境&#xff0c;简陋notepad 3.搭建集成开发环境(IDE,Int…

打造抖音萌娃账户,一条广告轻松过万,副业兼职最佳选择(实例教程 素材内容)

我特别喜欢简单易操作的新项目&#xff0c;因为过于复杂和门槛高的项目对新手来说可能是毁灭性的&#xff0c;他们往往难以入门&#xff0c;而且付出努力也得不到反馈。 下 载 地 址 &#xff1a; laoa1.cn/1971.html 小宝宝小萌娃账户就相对简单&#xff0c;它类似于电视剧…

文字图形化:UI设计师的必备能力,带你看看为什么要这么做。

在UI设计中&#xff0c;文字尽可能要进行图形化设计的原因有以下几点&#xff1a; 提高识别性&#xff1a; 图形化设计可以通过视觉效果和形状来吸引用户的注意力&#xff0c;从而提高文字的可识别性。这有助于用户更快地理解并记住信息&#xff0c;同时也可以增强品牌的认知…