reflect permission and security manager in java

This main method had set a security manage to this java application, in order to prevent java reflect get and set private fields.

import java.lang.reflect.Field;import java.lang.reflect.ReflectPermission;public class ReflectField {    private String test = "test string in class ReflectField!";    public static void main(String[] args) throws Exception {        Class ref = ReflectField.class;        SecurityManager nsm = new SecurityManager();        System.setSecurityManager(nsm);        ReflectPermission rp = new ReflectPermission("suppressAccessChecks", null);        System.out.println(rp);        // java.security.AccessControlException:        // access denied (java.lang.reflect.ReflectPermission suppressAccessChecks        // nsm.checkPermission(rp);        SecurityManager sm = System.getSecurityManager();        System.out.println(sm);        Field[] fields = ref.getDeclaredFields();        System.out.println(fields.length);        for (Field field : fields) {            // java.security.AccessControlException:            // access denied (java.lang.reflect.ReflectPermission suppressAccessChecks            // field.setAccessible(true);            // java.lang.IllegalArgumentException            // at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java)            // System.out.println(field.get(ref));            System.out.println(field.getName());        }    }}