天天看點

關于java.security.AccessController.doPrivileged

關于java.security.AccessController.doPrivileged

lineSeparator =	(String) java.security.AccessController.doPrivileged(
               new sun.security.action.GetPropertyAction("line.separator"));
    }
           

比較好奇和System.getProperty有什麼差別呢?

下面是stackoverflow上的回答http://stackoverflow.com/questions/4954924/getpropertyaction-vs-system-getproperty-in-obtaining-system-variables

感覺也沒有完全說清楚。

關于System.getProperty 看源碼得到:

public static String getProperty(String key) {
	checkKey(key);
	SecurityManager sm = getSecurityManager();
        if (sm != null) {
	    sm.checkPropertyAccess(key);
	}

	return props.getProperty(key);

    }
           

再得到set的方法:

public static void setProperties(Properties props) {
	SecurityManager sm = getSecurityManager();
        if (sm != null) {
	    sm.checkPropertiesAccess();
	}
        if (props == null) {
            props = new Properties();
            initProperties(props);
        }
	System.props = props;
    }
           

可以看到時需要initProperties

private static native Properties initProperties(Properties props);
           

然後就終結了 這個native 的方法是怎麼做的呢 不知道。。。

而且doPrivileged也還是native 的方法 關于這兩個native 的方法的差別真的就是不知道了。