我是一个Java class

Java中的Class类 Class类的作用 Class类是一个特殊类,它用于表示JVM运行时类或接口的信息。 Class类提供很多方法用于获取类的各种信息,比如获取类名、判断该类是否是一个接口还是普通类等等。 在Java中枚举类是一种类,而注解是一个接口,数组也是一个类;Java原始类型(boolean, byte, char, short, int, long, float, and double)和关键字void也被表示为Class的对象。 你知道吗? 在每一个基本类型的包装类中都有一个共有的静态变量,例如Integer: 阅读详情

第一回 陌生警察

我出生在C盘下面一个很深层次的目录下, 也不知道是谁把我放到这里的。

我一直在睡觉,外边的日出日落,风雨雷电和我一点关系都没有。

直到有一天,有个家伙咣咣咣砸我房门把我叫醒。

这个家伙穿着像警察的制服, 左手拿着一个对讲机, 右手递过来他的工作证: “你好, 我是Classloader, 请问你是Account类吗”

“是啊, 怎么了?”

这个Classloader 没回答我, 反而拿起对讲机:

"头儿,你看看你能不能装载这个Account类?”

对讲机那头好像也在问他的上司,过了半天,终于有了回音:

“我装载不了, 我的上级也说了,他们也装载不了, 你来干吧”

"那就报数吧~” 我这次注意到旁边站着另外一个笑眯眯的小个子。

“报什么数?” 我一脸诧异。

“唉,果然没有被装载过, 你是个class 文件,当然要报文件开头的那几个数了, 就是Java 他爸James Gosling 在jdk 1.0时确定的那个数啊”

“奥, 我看看, 0xCAFEBABE”

“不错, 是个java 类, 把你后边的两个数也报一下”, 小个子继续问

“50 , 0”

“看来版本不高啊, 是jdk 1.6编译出来的啊”, 小个子接着说 "最新的虚拟机都1.8了, 都函数式了,你造不?”

我哪里知道? 我这才模模糊糊的回想起来, 好像是有个什么javac 把我创建出来,扔到了这个屋子里。

“现在奉命带你去Java 虚拟机, 有人需要你的帮助” , 这个Classloader 态度冷冰冰的, 我不喜欢他。

“大哥,你们咋找到我的?” 我决定和小个子套近乎。

“那还不简单, 我们老板有个列表, 上面列举着所有应该检查的目录,我们顺藤摸瓜,一个一个找,肯定能找到”

“那万一找不到咋办?”

"基本不可能, 你看老板给我们的目录列表中有 C:\workspace\myTaobao\bin , 我们在下面再找三级 com/mytaobao/domain, 这不就找到你了吗,

Account.class , 话说回来, 万一真找不到, 将来在执行时会抛出ClassNotFound异常了, 那不归我们管"

我后来才知道, 我的全名其实叫做com.mytaobao.domain.Account !

“来来来, 让我验证一下, 你这class编译的对不对” ,小个子拿出一个放大镜

"恩, 常量池, 访问标识, 字段,方法… 看起来没有问题“ , 小个子对Classloader说。

被人拿着放大镜看,这种感觉极为不爽。

“走, 去虚拟机” , Classloader还是冷冰冰的。

这哥俩不容我带任何东西, 便把我推上车,飞奔向我没听说过的“虚拟机”。

第二回 刺探信息

我感到前途未卜, 但也不能坐以待毙, 一定得多了解信息。

“大哥, 你叫什么名字” , 我看小个子还算和气。

“我就是大名鼎鼎的文件验证器了, 能管很多事”

“那刚才他为啥还得请示上级呢” , 我用眼神指了一下开车的ClassLoader

文件验证器的声音一下子就压低了:

"你不知道,说来话长, 我们之前出现过事故,有个黑客写了个类java.lang.String, 和我们老板手下有一个干活最卖力的员工名字一模一样,只是这个黑客类里边竟然有格式化硬盘的代码,我们的小兵Classloader 不明就里,就把这个黑客类给先装载了,也执行了, 最后的结果,唉,很惨的… "

“那后来怎么办?”

"后来我们老板就定下了规矩:他的骨干员工像String, ArrayList等只能由他自己的心腹去装载, 我听说老板的心腹都是分层级的,像传销一样, 每个都有上线, 最顶层的叫Bootstrap Classloader , 下一次级叫Extension Classloader, 现在开车的这位其实叫App Classloader,位于最底层, 咱这位Classloader 在装载一个类之前,一定要问一问这几位权利极高的大爷,请他们先装载,这几位爷装载不了,才由我们这些小兵来出马。“

“这能避免黑客攻击?”

“能啊! 你想想, 那个黑客写了个攻击的java.lang.String, 我们在装载之前,肯定要请示Extension, Bootstrap这些大爷先来装载, 由于String是老板的核心员工,肯定会他们先装载啊, 这些大爷把String 直接就给我们了, 我们就不会装载黑客类了”

“你能不能少说两句” Classloader 似乎生气了。

我和文件验证器只好禁声。

其实文件验证器也不是只会给我吹牛, 他也很敬业, 这家伙在车上把我全部的字节码都要了过去, 对这些天书一般的东西一遍一遍的检查分析,确保每个指令都是正确的, 检查是不是有超类, 是不是覆盖了final方法,跳转指令是不是正确…

第三回 初识虚拟机

很快我们就来到了目的地, 我一看虚拟机不就是几个大楼嘛, 不过这几座大楼可真是高啊。

他俩把我带进其中一座叫“方法区”的大楼,进了电梯, 输入2048 。

很快来到第2048层, 无数的格子间平铺开来,他们七拐八拐,轻松的把我带到了我的位置, 上面写着我的名字“com.mytaobao.domain.Account”.

我问文件验证器: “这楼这么高, 这么多格子间, 人会坐满吗?”

"只有极少情况会坐满, 一旦满了,那时候会抛出异常, 我们就完蛋了。 你自己好自为之吧, 再见 "

他们把我安顿好就立刻离开了。

我往周边一看, 咦,这不是著名的java.lang.String吗。

我本想和他打个招呼, 可以他的电话似乎一直没断过, 嘴里一直说着什么store, load之类我听不懂但是似乎有点熟悉的话。

正无聊着呢,我桌子上的电话也响了, 电脑屏幕也亮了,我看到一个人对我笑着说:

“你好, 我刚刚new 出来的Account对象, 我的编号是Account@659e0bfd”

晕倒 ! 这家伙和我什么关系?

看我一脸的诧异, 他说,“ 很快就会有个线程到CPU车间了,他会联系你, 我就是想确认下你在不在, 奥对了, 我在一个叫做堆的地方, 有空找我玩啊, byebye ”, 说完就消失了。

果然没多久, 视频电话又响了。

这次我看到一个人站在一个明亮的车间里, 抱着一个包裹, 他按了一个按钮, 面前立刻升起一个工作台 , 台子上立了一个有很多抽屉的柜子,每个抽屉上都有一个编号, 旁边还有一个深桶。

(后来我就知道, 那个柜子的学名叫做局部变量区 , 那个桶叫做 操作数栈)

我正想问问问怎么回事呢, 就听到了他的声音:

"我是线程0x3704, 我要调用你第二个方法了“

(码农翻身注: 不认识线程0x3704的同学可以回复“我是一个线程”查看)

我一看, 我的第二个方法是add :

public void add(int x , int y ){

x = x + y;

…其他代码略…

}

(码农翻身注: Account类当然看不到这些源码, 这是为了方便你看的 ? )

“请把第一条指令给我说一下” 0x3704 继续问我要东西

我还不太熟练,找了半天才说:

“iload_0”

于是他就操作柜子上的机械手把0号抽屉的一个数30扔到到了工作台上的一个桶里,这个桶很窄,没法并排放两个数, 但是很深。
在这里插入图片描述

然后0x3704说 “下一条指令”

“iload_1”

于是1号抽屉的一个数40也被扔到了桶里,正好压在30上面, 从桶上面就看不到30了。
在这里插入图片描述

“下一条指令”

”iadd“

于是他就把两个数从桶里取了出来, 做了个飞快的动作, 这两个数变成了一个数 70 !, 然后他又把70 放到了桶里。

在这里插入图片描述

“下一条指令”

“istore_0”

于是他把70从桶里捞出来, 放到了柜子上编号为0的地方, 之前的30就被扔掉了。

我看的目瞪口呆,这厮是在干嘛???

我问他: “0x3704, 不就是把两个数加起来吗? 为啥搞的这么麻烦”

他不理我, 只是继续说, “下一条指令”

我只有配合它玩这个游戏。

java.lang.String 难得的悠闲, 端着一杯咖啡一边看我手忙脚乱的取指令, 一边说:

“新人都这样, 别着急,等你熟练了,闭着眼睛就搞定了, 就像我一样,你可能不知道 , 我们这个虚拟机叫做基于堆栈的虚拟机, 看到那个桶没有,其实就是个先进后出的栈啊, 我们虚拟机的所有指令其实都是在对栈进行操作”

可是我还是好奇: “这栈有什么好啊”

旁边的格子间的java.util.Stack 立刻说:

"这事儿你得问我啊, 怎么说呢, 主要是为了简单, 你看我们只用一个简单的桶,奥对了,栈, 就能完成所有的工作, 你做要的就是往栈里扔东西(入栈), 然后从最上面拿东西(出栈) 就行了。 不像intel 的CPU, 搞了巨多的桶,每个桶只能容纳一个数, 他们还美名其曰寄存器, 做加法的时候, 先把一个数放到第一个桶, 再把另外一个数放到第二个桶,加起来以后的结果还得找个桶,有些桶还不通用,这么多桶找起来麻烦死了。 "

“可是我们的栈操作起来就麻烦了啊, 你看一个简单的加法都得操作半天” ,我不依不饶。

“我们的指令可以优化啊, 不过这我也不太懂”

这个游戏我整整完了一天,没有线程找我的时候, 我就闲着, String说得对, 熟练以后简直太简单了。

String 就不一样了, 几乎每时每刻都线程给他打电话要指令, 这么没办法, String确实是虚拟机的骨干和精英, 使用频繁,业务纯熟,忙而不乱。

有时候我会看到线程有不止一个工作台, 而是一摞子工作台, 也是一个压一个, 线程们都很老实,永远在最上面那个工作, 从来不会先干下面的活。

在这里插入图片描述

我问java.util.Stack :“这些工作台也是栈吧”

"猜的不错,学名叫Java 栈,每个线程都有一个, 其中的每个工作台你看过了 ,学名叫栈帧, 知道不? 每个台子都代表一个方法调用, 这一摞工作台就方法调用方法导致的啊 "

确实是, 因为我发现一旦调用新方法, 立刻就会形成一个新的工作台, 压在老的上面。 方法调用完成后, 栈顶的工作台就被销毁了, 线程会在底下的工作台继续机械的干活。

第四回 快乐假期

第二天, 0x3704又问我要指令, 我有点生气: 你就不会记住吗

0x3704说: 我可不能记住, 万一你被重新装载了, 指令变了怎么办?

我告诉他指令是"iload_0" , 他刚把数据扔到桶里, 古怪的事情发生了, 身手敏捷的0x3704突然好像凝固了一样,不动了。

只听到String欢呼: “遇到断点了,码农开始调试了, 我们放假了!”

“调试?什么调试?”

“就是码农会单步、手工的执行这些指令,他们慢死了, 可能一秒才能执行一步, 由于我们的时间比他们快的多, 他们的一秒,简直就是我们的10几天, 走, 出去玩去”

"出去玩? 能上哪儿玩” 我觉得这里无聊透顶。

“找我们new 出来的对象玩去”

我想到了之前联系过我的 对象Account@659e0bfd , 想着去看看也不错。

这个叫"堆"的大楼更加拥挤, 全是人, String 的对象当然最多,Stirng类左右逢源,不停的打招呼, 从我创建出来的Account对象几乎找不到。

一队全副武装的士兵不停的在巡逻, 时不时的把对象拉出来,塞到车里去。

“这是在干嘛啊” 我问String类

“这些人叫清理者, 专门清理没有用的对象, 你看,车里那不是Account@659e0bfd 吗”

“啊? 昨天我还和他联系, 他怎么会没用了呢”

“他很有可能只是个方法的局部变量, 方法结束后, 就没人引用了, 白白的占用空间, 你看这楼太拥挤了, 如果不清理, 很快就会住满,系统崩溃, Out Of Memory了”

"那这个楼就不能盖的更高点吗?” 我心里有点可怜这些被回收的对象们

“楼有多高,是由码农们决定的, 他们在启动虚拟机的时候会指定参数”

“那士兵咋知道谁有用没用?”

“引用计数呗, 如果对象被使用, 计数就会增加, 不用的时候就会减少, 如果是0 , 那就可能被清理了。”

“那我们会被清理掉吗?” 我担心的问

String类神秘的笑了下: “我应该不会, 但是你是有可能的”

我当然明白了, String类是核心员工, 而我只是从外边加载过来的一个类而已, 不过我也确实有点想我的家了。

果然,又过了10天, 0x3704才动弹了一下,问我要第二条指令

我想都没想就告诉了他:“iload_1” 。

接下来又是10天的长假。

第五回 真相大白

漫长的调试假期终于结束了,我刚回到自己的工作间, 发生了更奇怪的事情, 整个世界毫无征兆的消失了。

我晕晕乎乎,发现还是躺在自家床上, 我是做了一场梦吗?

可是过去的记忆如此的真切, 到底是怎么回事?

管它呢, 我已经知道了自己所在的房子的门牌号是 C:\workspace\myTaobao\bin\com\mytaobao\domain

探索一下吧,唉 , 大部分人都非常无趣,不理我。

正当我准备要回去接着睡觉的时候, 我先发现了C:\workspace\myTaobao\src\ 下也有个一模一样的目录com\mytaobao\domain,关键是里边竟然有个Account.java !

出生的模糊记忆告诉我, javac 就是从这里把我生成的。

我正要给他打招呼,一个"hi"还没说出口。

javac 又一次运行, 我被新的Account.class 残忍的覆盖掉了!

临死前, 我终于明白了,这个一个码农的电脑,码农在开发程序, 调试程序, 不断的重启服务器。

而我这个类隐藏着一个Bug, 经过调试后被发现, 然后Fix了!
欢迎工作一到五年的Java工程师朋友们加入Java技术交流:611481448
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

喜欢小编轻轻点个关注哦!

【Bug已解决】Codex CLI 报错 apply_patch 失败:无法应用补丁的解决方案 方案适用场景推荐指数统一换行符规范跨平台协作项目的标准配置⭐⭐⭐⭐⭐关闭自动格式化冲突IDE 与 Codex 并发编辑同一文件⭐⭐⭐⭐缩小任务改动范围长期有效的使用习惯优化⭐⭐⭐⭐⭐统一 UTF-8 编码涉及非 UTF-8 遗留文件的项目⭐⭐⭐提示重新读取文件单次失败后的快速恢复方式⭐⭐⭐⭐报错的本质是Codex 生成补丁时读取的文件内容,与实际应用补丁时磁盘上的文件内容出现了不一致,常见诱因包括换行符风格混用、文件被其他工具并发修改、编码问题等。 阅读详情

相关推荐

无网环境也能玩转DBeaver?手把手教你离线安装与ClickHouse连接(附实测jar包)

本文详细介绍了在无网环境下如何离线安装DBeaver并配置ClickHouse连接的完整指南。通过准备必备工具如DBeaver安装包、ClickHouse JDBC驱动及Maven本地仓库,确保在物理隔离环境中实现数据库管理。文章包含详细的安装步骤、驱动配置和性能优化建议,帮助开发者在严格网络限制下高效工作。

weixin_42635064的博客 376

java class类详解

这种方式在编译时就会受到检查(因此不需要置于try语句块中),不仅可以应用于普通的类,也可以应用于接口、数组及基本数据类型。时会判断类是否已经加载,没有加载则会调用类加载器来加载类,已经加载过了,不会重复加载。在这个类的字节码被加载时,它们会接受验证,以确保其没有被破坏,并且不包含不良。当程序创建第一个对类的静态成员的引用时,就会加载这个类。如果尚未加载,默认的类加载器就会根据类的全限定名查找。创建类对象的时候也会被当作对类的静态成员的引用。代码块只会在第一次加载类的时候被调用,由输出结果得知,

jacklin_01的博客 6088

OV5640调试大坑,关于binning、RES分辨率与EV曝光

OV5640在使用binning模式时,必须考虑使用场景,分辨率下降叠加动态范围压缩,会使目标对象细节在高光环境下大量丢失,2x2的binning模式,分辨率会远低于感光面积的1/4。

chongyun_的专栏 1829

【Java】Java Class对象的理解

JAVA Class对象的理解、泛型的理解

sinat_29846389的博客 1万+

VS2022离线安装总闪退?可能是这个--noWeb参数没加对(完整参数指南)

本文深入解析了VS2022离线安装过程中常见的闪退问题,指出核心原因往往在于命令行参数使用不当,特别是`--noWeb`参数。文章提供了完整的参数使用指南和实战解决方案,包括证书处理、安装器文件修复及自动化脚本,帮助用户彻底解决离线部署中的验证失败与闪退难题。

weixin_28842269的博客 758

ElementUI中的el-table解决宽度问题 - 根据内容自动撑开

在使用element-ui中,会发现表格组件el-table在未指定宽度情况下,会自动计算并给表格宽度赋值。但实际开发中,有时需要根据内容实际长度自动撑开显示,由内容的多少而决定表格的宽度,而不是默认宽度为100%。在默认情况下表格宽度为100%显示,并且列项未指定宽度情况下,剩余部分会平均分配宽度,本案例实际需求是由内容自动撑开显示。componentUpdated

觉醒法师的专栏 1万+

一篇文章彻底搞懂Java的Class到底是什么

文章引用自:一篇文章彻底搞懂Java的大Class到底是什么 原文链接:https://zhuanlan.zhihu.com/p/372418927 作者在之前工作中,面试过很多求职者,发现有很多面试者对Java的Class搞不明白,理解的不到位,一知半解,一到用的时候,就不太会用。 因为自己本身以前刚学安卓的时候,甚至做安卓2,3年后,也是对 java的Class不是太清楚,所以想写一篇...

翎野君的博客 1136

浅谈车载控制器产线EOL实现方式

1、控制器生产产线上电路检测设计 2、客户总装产线检测设计

u012406840的博客 2万+

kotlin 中::class 、class.java、javaClass、javaClass.kotlin区别

Kotlin的类 class Person { var name: String = "" var age: Int = 0 companion object { } } java类 public class Man { } 要知道获取的到底是什么,可以利用andorid stuido的类型提示,一目了然。 ...

Dream It Possible 2万+

g2o&PCL 四阶多项式拟合

g2o&PCL 四阶多项式拟合

dayuhaitang1的博客 141

YOLOv9实战:刀具磨损实时监控从摄像头到预测性维护(附车间落地代码)

摘要: 本文针对制造业刀具磨损监控痛点,提出基于YOLOv9的实时视觉检测方案。通过工业相机采集刀具图像,结合图像预处理(去油污、增强对比度)和深度学习模型,实现磨损等级分类与寿命预测。系统集成硬件选型(抗油污相机、红色环形光源)、数据增强(旋转、噪声模拟)及预测性维护(PLC联动),实测刀具利用率提升30%,工件报废率降至0.5%以下。详解车间部署、模型训练到系统落地的全流程,附代码与避坑指南,为工业视觉项目提供实战参考。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 541

java一个文件两个class_一个Java文件中可以定义多个Class么?

一个Java文件可以定义多个Class么 ?答案肯定是可以的。下面我们测试一下://Test.javaclass A {}class B {}class C {}class D {}创建一个Test.java文件, 在这个文件中定义了4个类 分别是A,B,C,D。然后在编译一下这个Test.java文件,看会发生什么?[boardMacBook-Pro ~]$ javac Text.java[bo...

weixin_35988178的博客 6051

openlayers:实现在连续更改时间维度时如何平滑地重新加载层 (附完整源码)

openlayers:实现在连续更改时间维度时如何平滑地重新加载层 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 349

[Java] Class类是一个怎样的存在

类与对象的概念 在Java的体现当中有一个非常特殊的类,即Class类。我们知道java是一门面向对象的编程语言,java中的类是程序员用来表达一个具体问题的抽象的,那么Class类其实就可以简单理解为表达java中的类的共同特点的一个抽象。在深入这个问题之前不妨先再次明确一下类与对象分别的概念是什么。 在面向对象的概念当中,类:是指的具有相同属性性质的一类事物的一个抽象。例如:车,人,...

topdeveloperr的博客 1391

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

一个java文件有多个类,编译后有几个class文件

说明:这是一个新的系列,定下一个目标,只要不忙,每天都会进行一次更新 验证 public class ClassD { ClassB b; public static void main(String[] args) { System.out.println("xxx"); } class ClassE { ClassB b; } } class ClassF { ClassB b; } class ClassG { ClassB b; } abstract class Class

Dave_NewStar的博客 9588

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

一个java文件里面可以写多少个class

一个编译单元(就是我们创建的java文件)可以存在多个类(class),在编译时产生多个不同的.class文件,.class文件便是程序运行的数据来源。 java将public类作为每个编译单元的数据接口,只能有一个,不然不能处理存在多个类的java文件。当一个编译单元(java文件)有多个非public类时,运行时需要对数据来源进行选择。 讲人话就是 一个java文件里面可以有多个类,但是public修饰的类只能有一个。 public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,

P_ning的博客 2190

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java如何运行一个class文件的main方法

假设如下目录有个class文件,并且里面有main方法: D:\java_programming\LearningJavaFrom0\JFrame_test\bin\JFrameTest.class 首先进入cmd命令行: cd /d D:\java_programming\LearningJavaFrom0\JFrame_test\bin java JFrameTest (提醒:不需要带.class) 也可以带参数运行: java JFrameTest Hello ...

technologyleader的专栏 2030

java class 文件分析_分析一个Java Class文件

Javapackage jvm.chapter6; //P166 public class TestClass { private int m; public int inc(){ return m+1; } }展示这个Class文件的16进制内容:从头开始分析=>ca fe ba be :magic number;00 00 00 34 : 版本号是1.8.0;00 16: 说明...

weixin_30717229的博客 169

如何实现一个Java Class解析器

最近在写一个私人项目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能让我们对Java Class文件的设计与结构能够有一个深入的理解。主体框架与基本功能已经完成,还有一些细节功能日后再增加。实际上JDK已经提供了命令行工具javap来反编译Class文件,但本篇文章将阐明我实现解析器的思路。Class文件作为类或者接口信息的载体,每个Class文件都完整的定义了一个类。为了

sinat_29902639的博客 288

分析一个Java Class文件

Java源码文件TestClass.java: package jvm.chapter6; //P166 public class TestClass { private int m; public int inc(){ return m+1; } } 展示这个Class文件的16进制内容: 从头开始分析=> ca fe ba be :magic number

博观约取 1972

如何实现一个Java Class 解析器,我们需要做的还有很多

最近在写一个私人项目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能让我们对Java Class文件的设计与结构能够有一个深入的理解。主体框架与基本功能已经完成,还有一些细节功能日后再增加。实际上JDK已经提供了命令行工具javap来反编译Class文件,但本篇文章将阐明我实现解析器的思路。 Class文件 作为类或者接口信息的载体,每个Class文件都完整的

尚是-Swim 508

为什么一个java文件里只有一个public class?

问题:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?   答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同。 为什么一个java源文件中只能有一个public类?   在java编程思想(第四版)一书中有这样3段话(6.4 类的访问权限):   1.每个编译单元(文件)都只能有一个public类,这表示,每个编译单元都有单一的公共接口,用pu

li1593891525的博客 1779

Java的Class类:每一个类都对应着一个Class对象

在Java中,每一个类都对应着一个`Class`对象,这个`Class`对象包含了类的相关信息,例如类的名称、继承关系、方法、字段、注解等信息。通过`Class`对象,可以获取类的各种信息并对其进行操作。

小虎哥的技术博客 812

java一个文件两个class,为什么Java在编译时生成多个.class文件?

In Java, on compilation we get a .class file for each class( including nested classes and interfaces) defined in the source file.What is the reason for this multiple .class file generation?Is it for s...

weixin_28740299的博客 472

Java反射-获取一个class的Class实例

方法一:直接通过一个class的静态变量class获取: Class cls = String.class; 方法二:如果我们有一个实例变量,可以通过该实例变量提供的getClass()方法获取: String s = "Hello"; Class cls = s.getClass(); 方法三:如果知道一个class的完整类名,可以通过静态方法Class.forName()获取: Class cls = Class.forName("java.lang.String"); 因为Cl

柳旦旦的博客【PHP面试网博主】 435
上一篇: java程序员饱和了吗?
下一篇: 你应该知道的Java缓存进化史
java1856905
博客等级 码龄8年 100粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值