Защита полей от отражения - странный случай System.security

В настоящее время я смотрю на безопасность Java и столкнулся со странным явлением. SecurityManager в java хранится в поле «безопасность» в java.lang.System. Интересно, что поле, кажется, защищено от отражающего доступа, что имеет смысл, но, насколько я знаю, это поле является единственным, которое есть. Итак, вот пример:

for(Field f : System.class.getDeclaredFields())
    System.out.println(f);

выходы

public static final java.io.InputStream java.lang.System.in
public static final java.io.PrintStream java.lang.System.out
public static final java.io.PrintStream java.lang.System.err
private static volatile java.io.Console java.lang.System.cons
private static java.util.Properties java.lang.System.props
private static java.lang.String java.lang.System.lineSeparator

Интересно: поле объявлено как

private static volatile SecurityManager security = null;

нет в списке, и, конечно, вызов

System.class.getDeclaredField("security"); 

дает исключение NoSuchFieldException. Поскольку я не мог ничего найти об этом в Интернете, и я почти уверен, что это поле раньше было доступно через отражение (см. Также, например,Сообщение блога с 2010 года, в котором описывается доступ к этому полю) Мне было интересно, а) было ли это реализовано как быстрое исправление, чтобы предотвратить легкое отключение менеджера безопасности с помощью отражения, и б) как это реализовано (или, скорее, есть ли шанс защитить другие частные поля от отражения как Что ж).

Ответы на вопрос(2)

Ваш ответ на вопрос