Java基础005 --- 安全管理器可变参数等

Posted 光头用沙宣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础005 --- 安全管理器可变参数等相关的知识,希望对你有一定的参考价值。

Java大小端

大端:数据高字节保存在内存低地址中,数据低字节保存在内存高地址中

小端:数据高字节保存在内存高地址中,数据低字节保存在内存低地址中

java虚拟机屏蔽了机器的大小端模式,默认都是大端模式;

可以通过ByteOrder.nativeOrder获取机器模式,通过ByteBuffer的order方法获取及设置jvm模式

示例:

System.out.println(ByteOrder.nativeOrder());
ByteBuffer buf = ByteBuffer.allocate(4);
System.out.println(buf.order());
System.out.println(buf.order(ByteOrder.LITTLE_ENDIAN).order());

运行结果:

LITTLE_ENDIAN
BIG_ENDIAN
LITTLE_ENDIAN

32位和64位机器存储区别

long型存储时,32位机器下是4字节。64位机器下是8字节

StringBuilder和StringBuffer

StringBuilder线程不安全,效率高;StringBuffer线程安全,效率低

switch语句支持的类型

String、enum、char、short、int、long、Character、Short、Integer、Long

可变参数

示例:

public static void fun(String...str) {
    System.out.println(Arrays.toString(str));
}

对于可变参方法和非可变参构成的重载方法,只要非可变参方法能满足要求,那么就优先选择非可变参方法

示例:

public class TestArgs {
    public static void main(String[] args) {
        fun("AA", "BB");
        fun("AA");
    }

    public static void fun(String...str) {
        System.out.println(Arrays.toString(str));
    }

    public static void fun(String str) {
        System.out.println("test" + str);
    }
}

运行结果:

[AA, BB]
testAA

安全管理器及配置

对于未知的Java应用程序,运行时可能存在未知风险,那么就需要对其运行的权限做控制,那么就需要启用安全管理器SecurityManager

启用方法1:通过启动参数 -Djava.security.manager -Djava.security.policy "E:policy.txt"

示例:设置test.txt为只读模式,然后通过安全管理器校验是否有写权限

public class TestSecurityManager {

    public static void main(String[] args) {
        SecurityManager securityManager = System.getSecurityManager();
        if (securityManager != null) {
            securityManager.checkPermission(new FilePermission("	est.txt", "write"));
        }
        System.out.println("AAAAAAAAAAAA");
    }
}

编译:javac TestSecurityManager.java

运行:java -Djava.security.manager TestSecurityManager

Exception in thread "main" java.security.AccessControlException: access denied ("java.io.FilePermission" "      est.txt" "write")

        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)

        at java.security.AccessController.checkPermission(AccessController.java:884)

        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)

 

        at TestSecurityManager.main(TestSecurityManager.java:8)

启用方法2:通过System.setSecurityManager(new SecurityManager())

示例:设置test.txt为只读模式,然后通过安全管理器校验是否有写权限

public class TestSecurityManager {

    public static void main(String[] args) {
        System.setSecurityManager(new SecurityManager());
        SecurityManager securityManager = System.getSecurityManager();
        if (securityManager != null) {
            securityManager.checkPermission(new FilePermission("	est.txt", "write"));
        }
        System.out.println("AAAAAAAAAAAA");
    }
}

编译:javac TestSecurityManager.java

运行:java TestSecurityManager

Exception in thread "main" java.security.AccessControlException: access denied ("java.io.FilePermission" "      est.txt" "write")

        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)

        at java.security.AccessController.checkPermission(AccessController.java:884)

        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)

 

        at TestSecurityManager.main(TestSecurityManager.java:9)

 

 

test.txt

以上是关于Java基础005 --- 安全管理器可变参数等的主要内容,如果未能解决你的问题,请参考以下文章

JAVA基础补漏--可变参数

Java基础-可变参数

Java基础16----方法可变参数

Java基础16----方法可变参数

Java基础学习191221(可变参数,数组,Array类,稀疏数组,继承重写多态,抽象类,接口)

Java基础-数组和面向对象