感谢回复 其实我昨天把包也写成重名的以后也报了这个找不到main函数的错 但我遇到了另一个问题 导致我没觉得这是加载类出的问题 1.把LineTokenizer类换成同包下(rt.jar/ com.sun.activation.registries)的MailcapFile这个类 自己写个同包同名的这个类 2.在其他类中new一个自己写的MailcapFile对象,打印,发现能够实例化这个对象。 这点我很奇怪啊。。 为啥能加载出来这个类呢。。 不应该直接报错么。。
希望楼主能够仔细看看我回复的内容(10楼和14楼),如果还是看不明白,我觉得,转行干点别的也是个不错的选择。
这种类编译工具自己的无法加载的类你重写了也没意义,你需要找一下编译器能加载的类
包的路径类型一样
你编写的类没没有 package 吗?应该是 package 不一致,所以,识别为不同的class。 JVM识别一个类是通过(ClassLoader对象ID + package Name + class Simple Name),其实,className里面就包含package的。 同一个 ClassLoader对象 无法加载两个或两个以上相同的类,因为 ClassLoader对象 内部有缓存,只会加载第一次加载的那个类。
包名不一样吧,相当于两个类
你重写的类非public类,本包外无法调用,你重写后变成public类,可以包外调用了。这样2个类权限不同,当包外调用时并不会造成冲突。
[quote=引用 楼主 北北啊我是 的回复:]看周志明老师的Java虚拟机书里有这么一段------ "如果读者有兴趣的话,可以尝试去写一个与rt.jar类库中已有类重名的Java类,将会发现它可以正常编译,但永远无法被加载运行" 我试了下, 发现自定义的重名类(我这里是"LineTokenizer"这个类) ,可以被正常加载使用? 是我哪里理解错了吗?
看周志明老师的Java虚拟机书里有这么一段------ "如果读者有兴趣的话,可以尝试去写一个与rt.jar类库中已有类重名的Java类,将会发现它可以正常编译,但永远无法被加载运行" 我试了下, 发现自定义的重名类(我这里是"LineTokenizer"这个类) ,可以被正常加载使用? 是我哪里理解错了吗?
67,550
社区成员
225,863
社区内容
加载中
试试用AI创作助手写篇文章吧