JVM:
什么?你开玩笑吧?这位大婶,我可是Java啊。只有我才能让程序跑起来。你只是产生文件而已。做个文件有什么了不起的,没有我,文件没有用!
编译器:
请你放尊重点,不然我要叫了。
JVM:
还有,你得理不饶人,每天老是警告人,小小一点语法错误也不放水。
编译器:
对不起,没有我你能运行什么?Java会设计成这样是有原因的。如果Java只是个直译语言,要一边运行一边解释纯文字的程序,我就不相信你能够运行得多快!
JVM:
抗议啦,我又没有说你一点用处都没有。但是说真的,我根本搞不懂你在做什么。程序员可以直接编写二进制代码给我运行,那你就失业啦,哇哈哈哈……哇哈哈哈……咳……哇哈哈哈……
编译器:
我实在懒得理你。没错,虽然说只要是合格的二进制代码就可以运行,不一定是要编译器编译出来的,但实际上不会有人傻成这样的。让程序员直接写出二进制代码就好像要组装一台计算机的人自己得先做出CPU一样。还有,你可不可以不要笑的那么难听?
JVM:
先不要管我的笑声,你还是没有回答我你到底有什么用处?
编译器:
还记得Java是个强类型的语言吗?这代表我不能容许变量保存类型的数据。这是很关键的类型安全功能,我能够让大部分的错误在到你那边之前就被抓到。还有……
JVM:
又不是全部抓光光!我还是会因为遇到将错误类型的数据塞进数组中而不得不抛出异常,而且……
编译器:
没礼貌!别打断我说话……,是有些数据类型的错误会在运行时发生,但这也是为了要容许动态绑定这样的功能。Java可以在执行期引起连程序员都没有预期会碰到的类型,所以我得留一些运用性。我的工作就是就是确保铁定不能跑的东西不会过关。通常我抓到的错误。例如说把文字字符串除以某个数字这种问题会被我发现。
JVM:
OK,当然。但是存取安全权限安全问题呢?还不是靠我把关,而你只不过是做些标点符号检查罢了。还真是谢谢你把这些问题留给我呢。
编译器:
对不起,大家都知道我才是安全的第一线。我刚刚说的数据类型错误如果没有处理好,可是一个漏洞呢。像是违反调用private方法的程序等也是我检查的。我能够防止人们动到不可以鹏的程序代码与其他类的重要数据。如果把我的功能说完要说到天亮。
JVM:
随你怎么说。我也得做相同的事情,确保不会有人在执行前修改二进制代码。
编译器:
是啦,但是没有我挡住上述的问题,你老早就挂掉了,没时间了,下回再说吧。
JVM:
OK,等下要不要去吃夜宵?我请客……
摘至《Head First Java 2nd》