02.Class对象的理解

news/2025/12/1 12:21:23/文章来源:https://www.cnblogs.com/ylf66/p/19292323
嘿嘿,接下来一步步拆解吧!!!

1.在标准 Java 编译过程中(通过javac编译器编译.java文件),所有类都会生成对应的.class文件

那么要是当前程序没有用到某个类,那个类也会生成对应的.class文件吗?

  • 答案是:会!
    原因是:.class文件的生成是编译阶段的行为(由javac编译器完成),而 “是否会被调用执行” 是运行阶段的行为—— 两者完全独立,编译时不会判断类是否被使用,只要源文件中定义了类,就会生成对应的.class文件。javac的职责是将.java源文件中所有类定义(无论是否被使用)转换为字节码,并生成对应的.class文件,它不分析类在运行时是否被调用、是否有用,仅负责语法校验和字节码生成。

2.ClassLoader的核心作用

  • ①定位字节码:从磁盘(如classes目录)、网络(如 Applet)、内存(动态生成的字节码)等位置找到类的字节码(.class文件)

  • ②读取字节码:将字节码数据读取到 JVM 内存中

  • ③生成 Class 对象:将字节码解析为 JVM 可识别的格式,在方法区(Method Area)生成对应的Class对象(类的元数据),作为后续创建实例的 “模板”

3.真正开始的Class对象(前面都是做好铺垫)

  • ①创建实例对象时,若类未加载,JVM 会自动加载类并创建对应的Class对象;若类已加载,则直接使用已有的Class对象

  • ②获取Class对象

    • 类名.class:编译时就能确定要获取的类,效率高
    • 对象.getClass():需要先有实例对象
    • Class.forName(全类名):参数为全限定名(动态加载)
  • ③通过Class对象实例化对象

    • a.获取无参构造器(参数列表为空)
    Constructor<?> noArgConstructor = userClass.getConstructor();
    User user = (User)noArgConstructor.newInstance();
    
    • b.获取单参构造器(参数类型为String.class)
    Constructor<?> singleArgConstructor = userClass.getConstructor(String.class);
    User user = (User)singleArgConstructor.newInstance("张三");
    
    • c. 获取私有多参构造器(参数类型为String.class, int.class)
    Constructor<?> privateConstructor = userClass.getDeclaredConstructor(String.class, int.class);
    privateConstructor.setAccessible(true); // 设置私有构造器可访问(关闭访问检查),只要访问私有或其他不可访问的都需要
    User user = (User)privateConstructor.newInstance("李四", 20);
    

4.反射调用私有方法

  • 4.1 调用私有非静态方法,必须持有实例,说明是调用该实例中的方法。
    例如:前面已经实例化 user
Method method = userClass.getDeclaredMethod("show", String.class);
method.setAccessible(true);
method.invoke(user, "余");

必须得通过 class 对象才能进行反射,class 对象是反射的唯一入口。
反射的本质是:程序运行时,通过Class对象(类的元数据)动态获取目标结构信息(方法、属性等),并突破 JVM 访问权限限制操作这些成员的机制。如果没有Class对象查找函数,你根本不知道user里有没有add函数、参数需要什么类型、返回值是什么,就像 “闭着眼睛找钥匙开门”,完全摸黑。
一句话戳破:实例里有 “函数的执行能力” 但没有 “函数的描述信息”,Class对象里有 “函数的描述信息” 但没有 “执行能力”,反射就是拿Class的 “描述信息” 去指导实例的 “执行能力”。

  • 4.2 调用私有静态方法,不用持有实例,静态方法归属于类本身而非实例。
    注意:Class的具体实例才能执行,故method.invoke第一个参数传null即可。

总结

Class对象是 “人的技能说明书”帮你找到他的隐藏技能、知道让他怎样做,没有说明书, 你连他会什么都不知道,更没法让他做指定的事。
Class对象只存在 “函数的描述信息”(方法名、访问权限、返回值类型、参数类型、该方法所在字节码),没有提供获取方法体代码的 API。“能执行方法” 是因为 JVM 从方法区加载了执行步骤,而非Class对象操作的。Class元数据中存储了方法的入口地址。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年12月楼梯厂家最新十大品牌推荐,技术实力与市场口碑深度解析,家装定制品牌榜及选择指南,更能一站式搞定木门/衣柜/橱柜/护墙板

随着人们对家居生活品质要求的不断提升,楼梯行业迎来了快速发展的机遇。本榜单基于产品品质、设计创新、服务体系、行业影响力四大维度,结合行业权威数据及消费者反馈,对2025年十大楼梯品牌的综合实力进行深度解析,…

2025哈尔滨净化改造工程TOP5权威推荐:甄选企业守护洁净

在医疗、工业及商业场景中,洁净空间改造工程是保障环境安全、提升运营效率的核心环节。2024年黑龙江省洁净工程市场规模突破12亿元,年增速达32%,但行业投诉数据显示,35%的纠纷集中在洁净度不达标、空间布局不合理、…

全屋定制制造厂TOP5权威推荐:售后与品质双优之选,破解行业

在消费升级与家居个性化需求激增的背景下,全屋定制市场规模持续扩张,但行业乱象也随之凸显:85%的消费者曾遭遇增项加价设计不符售后推诿等问题,而全屋定制制造厂哪家售后好、全屋定制品牌制造厂哪个值得选、全屋定…

Windows 11网络共享文件夹无法访问

Windows 11网络共享文件夹无法访问 Created: 12/1/2025 11:22:42 Updated: 12/1/2025 11:23:00 Exported: 12/1/2025 12:09:13 Link: https://claude.ai/chat/6e09c84d-d44c-4c56-868a-27e3d8a3cac9 Prompt: 2025/12/1…

2025 TOPDON ArtiDiag 900 Lite 8 Scan Tool: Full System Diagnostics 8 Resets for EU/US Cars

The 2025 TOPDON ArtiDiag 900 Lite: Your All-in-One Diagnostic Solution for European & American Vehicles Problem: Diagnosing Modern Vehicles Isn’t What It Used To Be Today’s European and American …

2025年黑龙江十大改造工程专业公司推荐:改造工程公司

本榜单依托黑龙江地区洁净工程行业调研与真实客户口碑,聚焦医疗、工业改造工程核心需求,筛选出五家标杆企业,为机构选型提供客观依据,助力精准匹配专业改造伙伴。 TOP1 推荐:哈尔滨净朗净化科技有限公司 推荐指…

C#AI系列(3):31mb单文件exe实现姿态检测-将Yolo装进口袋

https://www.cnblogs.com/luojin765/p/19278215C#使用Yolo其实简单。相较于Python方案,C# 31 MB单文件以可以单文件独立发布或以AOT编译彻底剥离解释器与运行时依赖,CPU推理性能良好。而且YOLO11n模型权重与原生推理…

2025年全屋定制品牌制造企业选择哪家好?全屋定制品牌生产厂

TOP1 推荐:黑龙江久木家具有限公司(久木全屋定制) 推荐指数:★★★★★ 口碑评分:黑龙江本地口碑标杆全屋定制品牌 专业能力:作为深耕定制家居领域的区域龙头企业,黑龙江久木家具有限公司以全场景个性化定制+环…

[论文阅读] AI+ | GenAI重塑智慧图书馆:华东师大实践AI虚拟馆员,解放馆员聚焦高价值任务 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年黑龙江十大医疗工业改造工程公司推荐:口碑不错的改造

本榜单依托黑龙江地区医疗与工业洁净工程领域的市场调研、客户真实反馈及项目交付案例,深度筛选出十家标杆企业,为医疗机构、工业企业选型提供客观依据,助力精准匹配适配的改造工程服务伙伴。 TOP1 推荐:哈尔滨净朗…

2025年哈尔滨全屋定制公司口碑排名:久木定制,五家靠谱品牌

在哈尔滨家居市场,全屋定制已成为装修刚需——既要适配东北户型的空间利用率,又要兼顾环保与颜值,更要避开增项套路板材以次充好等坑。面对琳琅满目的品牌,如何选到靠谱的本地服务商?以下结合口碑评分、服务能力与…

详细介绍:【JUnit实战3_27】第十六章:用 JUnit 测试 Spring 应用:通过实战案例深入理解 IoC 原理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年哈尔滨全屋定制品牌十大排行榜,久木定制测评推荐

为帮黑龙江家庭高效锁定适配自身需求的全屋定制合作伙伴,避免装修走弯路,我们从板材品质(如环保等级、品牌授权)、空间设计能力(含户型适配、风格一体化)、价格透明度(增项标注、报价逻辑)及真实客户口碑(侧重…

中电金信:这个AI“专家系统”,让智能体真正懂金融、落地可控

目前,AI正以指数级速度进化,从模型走向智能体时代。智能体如雨后春笋般涌现,上千款应用正在重塑各行各业,然而,在规则严谨、流程复杂的金融领域,AI想真正落地,并不只是“部署一个模型”那么简单。一家金融机构的…

K-D Tree 相关

讲解 K-D Tree 相关。部分发表于洛谷。 简介: K-D Tree 是一种适用于 \(k\) 维空间信息处理的数据结构,一般是维护 \(n\) 个点的信息,建出平衡二叉树;在 \(k\) 比较小的 建树: 一般使用交替建树,递归的分为以下三…

TopDiag P181 Wire Finder: Effortlessly Locate Automotive Wire Breakpoints Short Circuits

Troubleshoot Electrical Woes Faster: Introducing the TopDiag P181 Wire Finder The Hidden Cost of Electrical Breakdowns For automotive mechanics and car owners, tracking down a short circuit or a hidden…

2025年最新工业冷风机性能排行榜TOP10,生产车间厂房降温/橡胶车间通风降温/车间厂房工厂通风降温工业冷风机厂商推荐榜单

行业洞察 随着工业4.0时代的深入发展,工业冷风机作为厂房车间通风降温的核心设备,其性能表现直接关系到生产环境优化与能源消耗控制。基于2024-2025年市场公开数据与产品实测表现,本文从技术参数、能效比、适用场景…

麒麟V10服务器配置网络 - 华

银河麒麟V10服务器系统默认集成network和Network Manager两种网络管理工具。network基于Shell脚本 , 通过修改/etc/sysconfig/network-scripts 目录下的配置文件来管理网络连接;Network Manager是一种较新的网络连接管…

在AI技术唾手可得的时代,挖掘安全测试新需求成为关键——某知名Web安全训练平台需求探索

本文分析了一个广泛使用的Web安全训练平台的核心功能和用户反馈,揭示了在AI技术快速发展的背景下,用户对多语言支持、容器化部署、新漏洞类型和现代化界面等方面的潜在需求,这些需求反映了安全测试工具在新时代的发…