0

我刚刚开始学习 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 仍在后台以某种方式调用 VM?我知道浏览器需要安装虚拟机才能运行这样的东西

import javax.swing.*; 
import java.awt.*; 

public class Applet1 extends JApplet { 
  public void init() { 
    getContentPane().add(new JLabel("Applet!")); 
  } 
}  

但是其他基于控制台的基本程序呢?再一次,转到 android,在这种情况下,VM 究竟在哪里被调用?或者我们是否应该将安卓操作系统视为运行虚拟机的非常精细的浏览器,而我们使用 java 代码执行的任何操作都会在虚拟机内部执行?

4

4 回答 4

7

Javac ( compile ) 不会调用 VM,它只会将您的 java 代码转换为字节码。而 Java(运行时)调用 VM。

只需将 JVM 视为一个环境,您可以在其中安全地在操作系统中执行 java 程序。请注意,您的 java 可执行文件是调用 VM 的那个,它将在您的操作系统中运行某些任务(例如,Windows/Android 内核)。

这就是为什么Java有一个口号“一次编写到处运行”,因为只要有为操作系统提供的JVM,Java字节码就可以在该操作系统中运行。

在此处输入图像描述

于 2013-07-18T06:24:45.873 回答
1

这真的只是像 C/C++ 程序,还是 Windows 仍在后台以某种方式调用 VM?

与控制台交互时,您无法区分它是 Java 程序还是 c/c++ 程序。但确实您的 java 源代码已编译为字节码(.class 文件),然后在 JVM 上运行。您知道 command javac,还有另一个名为的命令java可以启动 JVM 并运行您的程序。

在您的情况下,当您运行程序时,IDE 会调用命令java,后者会在 Windows 上启动 JVM。JVM 可以System.out.println()通过调用 windows API 来解释在控制台上显示内容。

我知道浏览器需要安装虚拟机才能运行这样的东西,但是其他基于控制台的基本程序呢?

事实上,我们必须在每个操作系统上安装 JVM,然后才能运行任何 Java 程序。对于浏览器,它只是一个调用安装在操作系统上的JVM的插件。像另一个 windows 媒体播放器插件一样,您必须先安装合适的 windows 媒体播放器。

再一次,转到 android,在这种情况下,VM 究竟在哪里被调用?或者我们是否应该将安卓操作系统视为运行虚拟机的非常精细的浏览器,而我们使用 java 代码执行的任何操作都会在虚拟机内部执行?

因此,android OS 不是浏览器,而是操作系统。它集成了JVM,你可以一次运行java程序。

于 2013-07-18T06:37:28.230 回答
0

是的,该.class文件是 JVM 字节码。java fooJVM(由for调用foo.class)解释(一些 JVM在运行时将字节码JIT为本机机器代码)字节码。

于 2013-07-18T06:07:44.100 回答
0

Java 编译器 (javac) 是用 Java 实现的,它位于 jdk/lib/tools.jar 中。当我们启动 javac 时,它会调用 JVM(JVM 在本机代码中实现,在 Windows 中是 jvm.dll)并使用它运行编译器类。

于 2013-07-18T06:48:55.990 回答