该示例来自O' Reilly Java Security书籍。
有两个班级 Card.java
public class Card {
public int num = 123234;
}
和 Test.java
public class Test {
public static void main(String[] args) {
Card card = new Card();
System.out.println("Your card - " + card.num);
}
}
我使用Java 1.2 编译这两个类。然后我将num
字段的修饰符更改为private,并仅重新编译Card
类。
启动Test(java Test)类会产生以下输出。
您的卡片 - 123234。
所以即使没有关闭字节码验证器也能工作(虽然作者说我们没有字节码验证器,但是它可以工作)。
现在我使用Java 1.6 做同样的事情。
即使我使用IllegalAccessError
启动它,也会启动Test类生成-noverify
。
问题是:
1)它与字节码验证器有什么关系。如果没有,谁产生错误。
2)那么以前版本的Java中的错误是什么?
答案 0 :(得分:3)
是的,这是一个旧的验证程序错误。看起来就是这个:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4007892
从(公共)错误历史中确切地解释它的确切时间并不清楚,但我怀疑它很久以前就被修复了。
如果它是一个错误,它与字节码验证程序有什么关系
字节码验证器应该检查一个类是否尝试引用另一个类的私有字段。当JVM加载类时,应该进行此检查。