0

有人可以解释或指导我了解软件如何在硬件上工作的资源,例如,如果我声明一个私有或公共变量,这是如何在硬件上强制执行的,换句话说,是什么强制执行它们是公共和私有的事实? ,由于每条指令都必须发生在硬件上,如何保持这种完整性?

4

4 回答 4

1

它是强制执行privatevs的编译器public。不是机器。

Java 是一种编译语言,当它编译时,它会被翻译成机器代码。

程序编译时强制执行私有-公共范围

于 2013-08-08T18:10:41.117 回答
1

这不是在硬件上强制执行的,而是仅在编译时强制执行的。变量只是内存中的一个点,这意味着您可以从任何地方访问它,只要您有一个指向它的指针(或者如果您在 java =D 中,则通过 jni)。换句话说,在编译您的 .class 文件时会处理和强制执行访问权限。

于 2013-08-08T18:13:12.397 回答
1

在 Java 中,访问权限 ( public/ privateetc.) 由编译器Java 虚拟机 (JVM) 管理。例如,如果您加载一个 Java 库,您可以动态地更改对某个字段的访问权限并创建它public。没有直接的硬件模拟。

Java 程序和硬件之间有很多层,这个问题很难回答。Java 代码生成 Java字节码(类似于机器代码),并且您没有直接的内存访问权限。JVM 提供此接口并根据需要将代码重新编译为机器代码,但这在很大程度上对您隐藏。

如果您对硬件和软件之间的接口感兴趣,我会考虑用 C 和 C++ 编写一些代码,以及生成的机器代码/汇编程序。C/C++ 更接近硬件,会让您了解正在发生的事情。

于 2013-08-08T18:14:29.697 回答
1

此信息在比机器代码更高的级别上处理。机器本身只了解内存地址和值 - 如果您尝试访问另一个类中的私有字段,它并不关心。是编译器跟踪可见性规则并使用其内部的类表示来执行它们。在编译时,检查您访问方法和属性的对象类型以确定这些名称(例如barin foo.bar())是否可以解析。这会考虑范围界定和许多其他因素,具体取决于语言。

于 2013-08-08T18:15:24.387 回答