[英]Is it possible to define my own String class?
是否可以定义自己的String类,其名称与java.lang.String完全相同? 我的假设是,在定义它之后,我可以直接使用它或使用类加载器加载它。
抱歉,我编写的代码有误。 main()方法的参数String [] args的String类错误地引用了我自己定义的String。 这就是为什么它会发生编译错误。 我的工作结果是,我们可以在自己的名称空间或java.lang中定义一个名为String的类。 但是由于JVM已加载默认的java.lang.String,所以我们无法加载自己的String并使用它。
是的,您可以定义该类,但将无法使用它。 类java.lang.String
将在引导时从JRE中加载,并且您无法在引导类加载器中重新加载类。 如果您尝试使用自己的类加载器,则JVM将注意到java.lang.String
已被加载,仅使用java.lang.String
加载器即可。
在有关类加载的JLS部分中 :
- 给定相同的名称,好的类加载器应始终返回相同的类对象。 (这意味着在引导程序中被拉出的
java.lang.String
类将是权威类。)- 如果类加载器L1 (引导加载器)将类C的加载委托给另一个加载器L2 (您自己的加载器) ,则对于任何类型为T (
java.lang.String
)的C的直接超类或直接超接口, 或者作为C中字段的类型,或者作为C中方法或构造函数的形式参数的类型,或者作为C中方法的返回类型, L1和L2应该返回相同的Class
对象。 (您自己的java.lang.String
将与引导加载程序加载的其他任何参数和字段冲突,并且实际上会导致流氓类加载之后的所有内容崩溃,并出现链接或强制转换错误。)
无论如何,您到底想做什么? java.lang.String
具有非常严格定义的语义,并且完全改变其行为将破坏大量的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.