0

Androidプログラミングに入るためにJavaを学び始めたところです
。Javaを使用してコンパイルしたものはすべて、仮想マシンによって解釈される必要があるJavaバイトコードにコンパイルされると想定していました。これにjavac filename.javafilename.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 がまだ呼び出されているのでしょうか? このようなものを実行するには、ブラウザーに VM をインストールする必要があることを理解しています

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

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

しかし、他の基本的なコンソールベースのプログラムはどうですか? 繰り返しますが、アンドロイドに移ります。その場合、VM は正確にどこで呼び出されますか? それとも、Android OS を、VM が実行されている非常に精巧なブラウザと見なす必要がありますか? Java コードを使用して実行するものはすべて、この VM 内で実行されますか?

4

4 に答える 4

7

Javac ( compile ) は VM を呼び出さず、Java コードをバイトコードに変換するだけです。一方、Java (ランタイム) は VM を呼び出します。

JVM は、オペレーティング システム内で Java プログラムを安全に実行できる環境と考えてください。Java 実行可能ファイルは、OS で何らかのタスクを実行する VM を呼び出すものであることに注意してください (たとえば、Windows/Android カーネル)。

これが、Java に「write once run Everywhere」というスローガンがある理由です。OS に JVM が提供されている限り、Java バイトコードはその OS で実行できるからです。

ここに画像の説明を入力

于 2013-07-18T06:24:45.873 に答える
1

これは本当に C/C++ プログラムのようなものですか?それとも、Windows によってバックグラウンドで何らかの形で VM がまだ呼び出されているのでしょうか?

コンソールを操作するとき、それが Java か c/c++ プログラムかを区別できません。しかし、Java ソース コードがバイト コード (.class ファイル) にコンパイルされ、JVM で実行されていることは事実です。あなたはコマンドを知っています.JVMを起動してプログラムを実行するjavac別のコマンドがあります.java

あなたの場合、プログラムを実行すると、IDE がコマンドjavaを呼び出し、後者が Windows で JVM を起動します。System.out.println()JVM は、Windows API を呼び出すことにより、コンソールにコンテンツを表示するように解釈できます。

このようなものを実行するには、ブラウザーに VM をインストールする必要があることは理解していますが、他の基本的なコンソール ベースのプログラムはどうでしょうか?

実際、Java プログラムを実行する前に、各 OS に JVM をインストールする必要があります。ブラウザの場合は、OS にインストールされている JVM を呼び出す単なるプラグインです。別の Windows Media Player プラグインと同様に、最初に適切な Windows Media Player をインストールする必要があります。

繰り返しますが、アンドロイドに移ります。その場合、VM は正確にどこで呼び出されますか? それとも、Android OS を、VM が実行されている非常に精巧なブラウザと見なすべきでしょうか。Java コードを使用して実行するものはすべて、この VM 内で実行されます。

つまり、Android OS はブラウザではなく 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 に答える