如果我们看Java和.Net中的编程,它们看起来类似.
.NET编程涉及的步骤Click to know more
>编写.net程序.
>将代码编译成MSIL(编译将源代码转换为Microsoft中间语言(MSIL),并生成所需的元数据).
>将MSIL编译为本地代码(在执行时,即时(JIT)编译器将MSIL转换为本地代码,在编译期间,代码必须通过检查MSIL和元数据的验证过程,以确定代码可以确定为安全型).
运行代码(通用语言运行库提供了可执行的基础结构以及执行期间可以使用的服务).
Java编程Click to know more涉及的步骤
>编写一个Java程序
>编译Java程序(Java编译器将java源代码转换为.class文件,它是一个字节代码)
>通过JVM将程序加载到内存中(JVM将.class文件加载到内存中进行字节码验证,并以机器语言转换.clsss文件)
> Java程序的执行(无论我们在Java程序中写的任何动作,JVM通过解释字节码执行它们,如果我们谈论旧的JVM,它们一次缓慢,执行和解释一个字节码,现代JVM使用JIT编译单元我们甚至调用即时编译).
如果我们看这两种语言的步骤几乎相同,那么“为什么Java比其他语言更安全?”
解决方法
Java具有各种安全功能:
>引用的自动检查,数组的边界检查,转换的验证等,以防止程序发生类型错误.将其与C或C进行比较,其中这些相同的错误(除了少数例外)会导致未定义的行为.
>执行前验证字节码.这使程序无法跳转到未定义的指令,或尝试对不存在的对象执行操作,或者在指令级别进行类型错误等.将此与C或汇编进行比较,程序可以在哪里跳到坏的指令,或尝试读取不存在的参数到功能(认为va_args)等)
>加载新代码时的运行时安全检查.使用SecurityManager和ClassLoader使Java运行时可以方便地通过调用对系统资源的访问并阻止程序在运行时加载或生成任意代码来在计算机上执行任意代码.将其与C或C进行比较,可读写任意值,发出任意系统调用,生成和执行任意代码等.
>图书馆级安全的某些功能.例如,String是不可变的和final的,所以接收String的函数可以验证字符串,而不用担心另一个线程改变它的值.
这不是Java安全功能的完整列表,但它应该让您了解Java中某些其他语言中不存在的设计注意事项.
希望这可以帮助!