Пример взята из книги безопасности Java O'Reilly.Доступ к закрытым полям без байтово-верификатора
Есть два класса 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
на приватный и перекомпилирует только класс Card
.
Запуск теста (тест Java) производит следующий вывод.
Ваша карта - 123234.
Так он работал, даже не выключая байткодом верификатор (Хотя автор говорит, что если бы мы не байт-кода верификатор, он будет работать).
Теперь я делаю то же самое с использованием Java 1.6. Запуск класса Test производит IllegalAccessError
, даже если я начинаю его с -noverify
.
Вопросов:
1) Есть ли у него что-нибудь сделать с байткодом испытателем. Если это не так, кто произвел ошибку.
2) Была ли это ошибкой в предыдущих версиях Java?
Вы знаете, что 1.2 был выпущен в 1998 году, не так ли? –
Итак? :) Как это противоречит моему вопросу :) –
Я имею в виду, что они определенно работали над безопасностью байт-кода с 1.2, и кто волнует, есть ли у 1.2 в нем какие-то ошибки? –