猿问

百思不得其解,有人知道是怎么回事么?

本人想修改java.lang.String类,然后导出成jar,代替原来虚拟机的String类使用,但是在添加一个布尔数组后,导出成jar并使用时出现下面的错误: 

Error occurred during initialization of VM 
java.lang.ExceptionInInitializerError 
Caused by: java.lang.IllegalArgumentException: name can't be empty 
at java.security.BasicPermission.init(Unknown Source) 
at java.security.BasicPermission.<init>(Unknown Source) 
at java.lang.RuntimePermission.<init>(Unknown Source) 
at java.lang.Thread.<clinit>(Unknown Source) 

添加的数组形式如下: 
private boolean barray[]; 

如果改成private boolean barray; 则可正确运行。 
如果改成跟String源码中的value一样:private final char value[]; 也不行。 

慕工程0101907
浏览 82回答 2
2回答

犯罪嫌疑人X

很简单:HotSpot VM对java.lang.String的字段排布是有硬性要求的;如果你要对String的字段个数、类型、名字等做修改,要在HotSpot VM上正常运行就必须连VM也相应的修改。

烙印99

String类是final类型,不可继承,不知道是什么样复杂的需求让你需要修改String类?如果想修改String类,还是自己去写一个类似实现String功能的类,再在项目中使用即可,不过这样的工作量有点大哦。
随时随地看视频慕课网APP

相关分类

Java
我要回答