有人可以向我解释或指导一个解释软件如何在硬件上工作的资源,例如,如果我声明私有或公共变量,这是如何在硬件上强制执行的,换句话说,是什么强制它们是公共和私有,因为每个指令都必须在硬件上发生,这种完整性如何保持?
答案 0 :(得分:1)
编译器强制执行private
vs public
。不是机器。
Java是一种编译语言,当它编译时,它会被翻译成机器代码。
在程序编译时强制执行私有 - 公共范围
答案 1 :(得分:1)
这不是在硬件上强制执行,而是仅在编译时强制执行。变量只是内存中的一个点,这意味着只要你有一个指向它的指针就可以从任何地方访问它(如果你在java = D中,你可以通过jni)。换句话说,在编译.class文件时会处理和强制执行访问权限。
答案 2 :(得分:1)
在Java中,访问权限(public
/ private
等)由编译器和 Java虚拟机(JVM)管理。例如,如果加载Java库,则可以动态更改对字段的访问权限并使其成为public
。没有直接的硬件模拟。
Java程序和硬件之间有很多层,这个问题很难回答。 Java代码导致Java 字节码(类似于机器代码),并且您没有直接内存访问权限。 JVM提供了这个接口,并根据需要将代码重新编译为机器代码,但这在很大程度上是对您隐藏的。
如果您对硬件和软件之间的接口感兴趣,我会考虑用C和C ++编写一些代码,以及生成的结果机器代码/汇编程序。 C / C ++更接近硬件,让您了解正在发生的事情。
答案 3 :(得分:1)
此信息的处理级别高于机器代码。机器本身只了解内存地址和值 - 如果您尝试访问另一个类中的私有字段,则无关紧要。编译器跟踪可见性规则并使用其内部表示来强制执行它们。在编译时,将检查您访问方法和属性的对象类型,以确定是否可以解析这些名称(例如bar
中的foo.bar()
)。这考虑了范围和其他一些事情,具体取决于语言。