我刚刚开始学习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]);
}
}
Run Code Online (Sandbox Code Playgroud)
它只是在控制台上显示一些消息,看起来与C/C++输出没什么不同.这真的只是一个C/C++程序,还是Windows仍然在后台以某种方式调用VM?我知道浏览器需要安装VM才能运行这样的东西
import javax.swing.*;
import java.awt.*;
public class Applet1 extends JApplet {
public void init() {
getContentPane().add(new JLabel("Applet!"));
}
}
Run Code Online (Sandbox Code Playgroud)
但是其他基于控制台的程序呢?再一次,继续前进到android,在这种情况下VM的调用究竟是什么?或者我们应该将Android操作系统视为运行VM的非常复杂的浏览器,我们使用java代码执行的任何操作都会在此VM中执行?
Javac(compile)不调用VM,它只将您的java代码转换为字节码.而Java(运行时)调用VM.
只需将JVM视为可以在操作系统中安全地执行Java程序的环境.请注意,您的java可执行文件是调用VM的,它将在您的操作系统中运行某些任务(例如,Windows/Android内核).
这就是为什么Java有一个口号"一次编写一次运行",因为只要有一个为操作系统提供的JVM,java字节码就能在该操作系统中运行.