「华为」一篇有趣的Java class


「华为」一篇有趣的Java  class
文章图片
「华为」一篇有趣的Java  class
文章图片
「华为」一篇有趣的Java  class

前言:本文主要想讲一下Java虚拟机的故事 ,可能有点偏门 , 不妥之处欢迎留言交流 。
第一回 陌生警察
我出生在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 不明就里 , 就把这个黑客类给先装载了 , 也执行了 ,最后的结果 , 唉 , 很惨的... \"