我刚刚开始学习java以进入android编程。
我假设我使用java编译的所有东西都被编译成java字节码,它必须由虚拟机解释。因此,javac filename.java生成了filename.class,它具有要由JVM解释的字节码(至少我是这么想的,我会使用java filename.class运行这个类文件)。然而,如果我写这样的东西,
public class Arrays {
public static void main(String[] args) {
int[] a1 = { 1, 2, 3, 4, 5 };
int[] a2;
a2 = a1;
for(int i = 0; i < a2.length; i++)
a2[i]++;
for(int i = 0; i < a1.length; i++)
System.out.println(
"a1[" + i + "] = " + a1[i]);
}
} 它只是在控制台上显示一些消息,看起来与C/C++输出没有任何不同。这是否真的只像C/C++程序一样,或者虚拟机仍然以某种方式在后台被Windows调用?我知道浏览器需要安装虚拟机,这样才能运行
import javax.swing.*;
import java.awt.*;
public class Applet1 extends JApplet {
public void init() {
getContentPane().add(new JLabel("Applet!"));
}
} 但是其他基于控制台的基本程序呢?再来看看android,在这种情况下,虚拟机到底是在哪里被调用的?或者,我们是否应该将android OS视为一个非常复杂的浏览器,在这里VM正在运行,我们使用java代码执行的任何东西都会在这个VM中执行?
发布于 2013-07-18 14:24:46
Javac (编译)不会调用VM,它只会将java代码转换为字节码。而Java (运行时)调用VM。
只需将JVM想象成一个可以在操作系统中安全地执行java程序的环境。请注意,您的java可执行文件是调用VM的可执行文件,VM将在您的操作系统(例如,Windows/Android内核)中运行一些任务。
这就是为什么Java有“一次编写到处运行”的口号,因为只要为操作系统提供了JVM,java字节码就能够在该操作系统上运行。

发布于 2013-07-18 14:37:28
是否真的只是像C/C++程序一样,还是虚拟机仍然在后台被Windows以某种方式调用?
当您与控制台交互时,您无法区分它是Java程序还是c/c++程序。但是你的java源代码确实已经被编译成字节码(.class文件),然后在JVM上运行。您知道命令JVM,还有一个名为java的命令可以启动javac并运行您的程序。
在本例中,当您运行程序时,集成开发环境调用命令java,后者在windows上启动JVM。JVM可以通过调用windows API来解释System.out.println(),在控制台上显示内容。
我知道浏览器需要安装VM才能运行,但是其他基于控制台的基本程序呢?
事实上,我们必须在每个操作系统上安装JVM,然后才能运行任何java程序。对于浏览器,它只是一个调用安装在操作系统上的JVM的插件。就像其他windows media player插件一样,你必须先安装一个合适的windows media player。
,再来看看android,在这种情况下,虚拟机到底是在哪里被调用的?或者,我们是否应该将android OS视为一个非常复杂的浏览器,在这里VM正在运行,我们使用java代码执行的任何东西都会在这个VM中执行?
因此,android操作系统不是浏览器,而是操作系统。它集成了JVM,可以一次运行java程序。
发布于 2013-07-18 14:07:44
是的,.class文件是JVM字节码。JVM (由用于foo.class的java foo调用)解释(一些JVM在运行时将字节码JIT成本机代码)字节码。
https://stackoverflow.com/questions/17715672
复制相似问题