我对java有些困惑。 Java是编译器或解释器语言。我得到了一些有一些很好的描述的链接但是有些人说java是编译语言或者其中一些是说java是解释器语言?甚至我怎么能理解这种语言编译或翻译的语言或两者兼而有之。我还有一个问题是JVM是操作系统的一部分,或者当我们安装java时,就安装了JVM。
答案 0 :(得分:1)
Java是编译器或解释器语言
调用Java编译比解释更准确。 Java源代码被编译为名为“bytecode”的二进制形式。在运行时,JVM运行字节码,并且可以在运行时将该字节码编译为机器代码(使用称为Just In Time [JIT]编译器的东西)。 Java字节码实际上是特定于Java的机器代码(将此值放入此寄存器,跳转到此位置等)。这使得Java程序可以在JVM可用的任何地方运行。
...... JVM是OS的一部分......
不,JVM是您安装的程序。
示例:强>
这个Java源代码:
public class Example {
public static final void main(String[] args) {
System.out.println("Hello, World!");
}
}
编译为此字节码(不带调试信息)(传统的“hexdump”格式):
00000000 ca fe ba be 00 00 00 34 00 1a 0a 00 06 00 0c 09 |.......4........| 00000010 00 0d 00 0e 08 00 0f 0a 00 10 00 11 07 00 12 07 |................| 00000020 00 13 01 00 06 3c 69 6e 69 74 3e 01 00 03 28 29 |........()| 00000030 56 01 00 04 43 6f 64 65 01 00 04 6d 61 69 6e 01 |V...Code...main.| 00000040 00 16 28 5b 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 |..([Ljava/lang/S| 00000050 74 72 69 6e 67 3b 29 56 0c 00 07 00 08 07 00 14 |tring;)V........| 00000060 0c 00 15 00 16 01 00 0d 48 65 6c 6c 6f 2c 20 57 |........Hello, W| 00000070 6f 72 6c 64 21 07 00 17 0c 00 18 00 19 01 00 07 |orld!...........| 00000080 45 78 61 6d 70 6c 65 01 00 10 6a 61 76 61 2f 6c |Example...java/l| 00000090 61 6e 67 2f 4f 62 6a 65 63 74 01 00 10 6a 61 76 |ang/Object...jav| 000000a0 61 2f 6c 61 6e 67 2f 53 79 73 74 65 6d 01 00 03 |a/lang/System...| 000000b0 6f 75 74 01 00 15 4c 6a 61 76 61 2f 69 6f 2f 50 |out...Ljava/io/P| 000000c0 72 69 6e 74 53 74 72 65 61 6d 3b 01 00 13 6a 61 |rintStream;...ja| 000000d0 76 61 2f 69 6f 2f 50 72 69 6e 74 53 74 72 65 61 |va/io/PrintStrea| 000000e0 6d 01 00 07 70 72 69 6e 74 6c 6e 01 00 15 28 4c |m...println...(L| 000000f0 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 |java/lang/String| 00000100 3b 29 56 00 21 00 05 00 06 00 00 00 00 00 02 00 |;)V.!...........| 00000110 01 00 07 00 08 00 01 00 09 00 00 00 11 00 01 00 |................| 00000120 01 00 00 00 05 2a b7 00 01 b1 00 00 00 00 00 19 |.....*..........| 00000130 00 0a 00 0b 00 01 00 09 00 00 00 15 00 02 00 01 |................| 00000140 00 00 00 09 b2 00 02 12 03 b6 00 04 b1 00 00 00 |................|
字节码所表示的符号版本(可以从javap -c Example
获得)是:
public class Example { public Example(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V 4: return public static final void main(java.lang.String[]); Code: 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3 // String Hello, World! 5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return }
答案 1 :(得分:0)
Java是一种编译的编程语言,而不是编译 直接到可执行的机器代码,它编译成一个中间 二进制形式称为JVM字节代码。然后编译字节代码 和/或解释为运行程序
JVM
不是操作系统的一部分,当您安装Java时,实际上创建了一个名为JVM
的环境。
更有用的信息here
答案 2 :(得分:0)
从第二个问题开始,JVM是单独的产品,您需要自己安装它。 对于第一个问题,java将您的程序编译为jvm字节码,并将其作为解释器发送到机器
答案 3 :(得分:0)
1.Java是编译器或解释器语言
它有两个。首先,Java编译器编译.java
文件并创建.class
文件。稍后,Java解释器将其转换为依赖于平台的
文件。出于这个原因,java被称为平台独立语言,因为通过
解释器将其转换为当前系统/操作系统可以理解的语言。
2.JVM是操作系统的一部分,或者当我们安装java时,则安装了JVM。
它是JAVA的一部分。不是操作系统的一部分
答案 4 :(得分:0)
Java不是编译器或解释器。 Java是一种编码语言。 java代码被编译成字节码并以.class扩展名存储。当代码执行时,字节码使用JIT转换。结果是机器代码,然后被送入内存并执行。
答案 5 :(得分:0)
Java通常是两者。它被编译为由Just-In-Time compiler 1 执行的字节代码。 Java还能够使用ScriptEngine
运行解释器。
还有gcj
(Java编程语言的GNU编译器)他们的主页说 2 (部分)
编译的应用程序与GCJ运行时
libgcj
链接,后者提供核心类库,垃圾收集器和字节码解释器。 {{1}}可以动态加载和解释类文件,从而产生混合的编译/解释应用程序。
1 正确实现Java Virtual Machine的任何东西都是Java(但Oracle控制着商标,所以它可能不是称为 Java),所以它可能是(并且已经)实现为interpretter(如果JIT不支持您的平台,kaffe会回退到字节码解释器。)
2 2009年9月22日的最新消息
答案 6 :(得分:0)
The journey of Java code to a Machine code is .
1. You write .java file.
2. give it to javac(the java compiler)
3. javac compiles it and gives you .class file(call it bytecode)
4. you put this .class file on JVM(just a software kind of thing) .
5. JVM interprets that .class file(the bytecode we call it)
6. JVM vomits machine code acceptable by underlying platform [OS+CPU].
JVM is a software package kind of thing which you need to run
your bytcode it must be compatible with your underlying platform
to convert bytecode to machinecode .
答案 7 :(得分:0)
Java是一种专门设计用于Internet分布式环境的编程语言。它强制实施面向对象的编程模型。 Java可用于创建可在单台计算机上运行或分布在网络中的服务器和客户端中的完整应用程序