vlambda博客
学习文章列表

话编程 | Java 中类加载的双亲委派的“双”怎么理解 ?

大宽宽:

双在哪里?以后英语不好的人,不要去翻译计算机的书!

其实就是个翻译问题。

双亲委派的原文是"parents delegate"。parents在英文中是“父母”、“双亲”的意思,但其实表达的是“父母这一辈”的人的意思。实际上这个模型中,只是表达“父母这一辈”的class loader而已,并不是说真的有一个父亲的class loader和一个母亲class loader。

下面引用了Java API doc的原文,大家可以参考:

The Java Class Loading Mechanism

The Java platform uses a delegation model for loading classes. The basic idea is that every class loader has a "parent" class loader. When loading a class, a class loader first "delegates" the search for the class to its parent class loader before attempting to find the class itself.

见Understanding Extension Class Loading

其实OOP中也有所谓“parent class”的概念,但我们一般也只称为“父类”而已(难道就是因为没有那个复数s吗?)


J-Jian

首先你抱怨到英语不好的人不要去翻译,我想说先淡定,它这么翻译肯定有它的道理,况且双亲委派模式,这个词已经出现了这么久的时间有问题的话,难道只有你发现吗?所以肯定是有它的道理的

其次,个人理解这里的双亲指的是并不是指它有两个父类加载器,而是第一个“亲”指一个用户定义的加载器,应用程序加载器与扩展类加载器这三个都会先去让父类(亲)加载。加载不了才自己加载。第二个“亲”是指如果如果父类不存在就直接委托给这个顶层的父类(亲)Bootstrap ClassLoader

计算机里很多东西翻译有很多版本,但是其深意是一样的,比如数据结构的树节点node,有些说是节点,有些是结点(大部分认同结点),还有计算机里很多约定俗成的名词,有时候你非要解释也解释不清楚,咱就不要过多纠结,能懂原理能理解就好,比如双亲委派你去看源码,大概就能很深理解它的过程,我想那时候你估计不会纠结这个名字了!


aall ql:

的确没有双,叫父类委派或者基类委派更好,只是双亲这词出现太久了,大家都这么叫


胡梦宇

跟我一起读,[双亲] 委派,不是 [双] 亲委派,题主的问题不是翻译的不好,是语文没学好。


好了,大概就是那个意思吧。