大家好,今天小编关注到一个比较有意思的话题,就是关于java语言编译器的问题,于是小编就整理了5个相关介绍j***a语言的编译器的解答,让我们一起看看吧。

  1. java编译器有哪些?
  2. JAVA有哪些主流的编译器呢?
  3. 什么叫开源,都说JAVA是开源的?
  4. 哪种java编译器最好?
  5. Java能不能像C语言不通过JVM虚拟机直接编译成二进制机器码,让计算机直接运行?

j***a编译器有哪些?

1.j***ac:sun公司编译器,jdk默认自带的编译器。

java语言的编译器-JAVA语言的编译器命令是
(图片来源网络,侵删)

2.eclipse编译器:org.eclipse.jdt.core_version.jar,这里的version为具体的版本号。

3.Apache M***en Compiler

java语言的编译器-JAVA语言的编译器命令是
(图片来源网络,侵删)

Plugin:m***en3.0以后默认的编译器为j***ax.tools.J***aCompiler(要求jdk1.6以上)默认compilerid:plexus-compiler-j***ac;默认也是使用的sun的编辑器j***ac。

J***A有哪些主流的编译器呢?

1.j***ac:sun公司编译器,jdk默认自带的编译器。

java语言的编译器-JAVA语言的编译器命令是
(图片来源网络,侵删)

2.eclipse编译器:org.eclipse.jdt.core_version.jar,这里的version为具体的版本号。

3.Apache M***en Compiler Plugin:m***en3.0以后默认的编译器为j***ax.tools.J***aCompiler(要求jdk1.6以上)默认compilerid:plexus-compiler-j***ac;默认也是使用的sun的编辑器j***ac。

什么叫开源,都说J***A是开源的?

开源就是开放程序源代码。就是把程序源代码发放出来,让程序的用户可以获得。

开源和收不收费没有关系,开源软件同样可以收费。

编程语言本身没有开不开源的问题。开不开源的是把语言编译成可执行程序的编译器或者是执行这种语言写的脚本的解释器软件。

也有编译j***a的编译器是不开源的。当然,常用的j***a的编译/解释器都是开源的。

所有常见的编程语言,像C, C++, Basic, Pascal, Php, Python等等都有开源的编译器或解释器。

对自己懂编写软件的语言的用户而言,水平高的可以对软件做修改以满足自己的特殊需要。水平低的可以学习。

因为软件有很多人知道源代码,有问题也容易发现。其它不懂编程的用户也相对放心一点。

对于软件编写者而言,他有可能得到看他软件源代码的高手的指导,别人也可能帮他发现软件中的问题,甚至有人帮他修正源程序中的错误。

而且,如果知道源代码的人比较多,就算他有一天不想继续开发这个软件了,也很容易找到接手的人,这对于用户也是一件好事。

哪种j***a编译器最好?

不同厂家的jdk有所不同,比如最常见的Oracle官方的jdk,还有一些大厂如IBM的,也有开源的openjdk,一般使用Oracle的jdk比较常见,也最受欢迎。

J***a能不能像C语言不通过JVM虚拟机直接编译成二进制机器码,让计算机直接运行?

从语言设计的角度看是可以的,重新设计一下编译器就能实现,但从工程实践的角度看是不可行的。

其一,J***a语言最大的特点就是跨平台可移植,一次开发,一次编译,多平台执行,这一特性就是靠JVM(J***a虚拟机)实现的,如果改写编译器像C语言一样直接编译成了可执行程序,就失去了跨平台特性。

其二,J***a语言设计之初就设计成为了一款严重依赖JRE(J***a运行时环境)的语言,有部分语言设计上的缺陷必须依赖JVM来解决,比如GC(垃圾回收),我们知道,J***a语言是没有内存回收能力的,因此还得靠JVM,在工程实践中,如果软件不能进行内存回收,后果将是灾难性的。

其三,J***a语言是面向对象的,区别于同是面向对象的C++,J***a还有一个动态特性。

它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法实现的。在C++程序设计过程中,每当在类中增加一个实例变量或一种成员函数后,引用该类的所有子类都必须重新编译,否则将导致程序崩溃。J***a从如下几方面***取措来解决这个问题。J***a编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码中保存下传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。这样,一个在存储器生成的对象不在编译过程中决定,而是延迟到运行时由解释器确定的。这样,对类中的变量和方法进行更新时就不至于影响现存的代码。解释执行字节码时,这种符号信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。而这一切同样依赖JRE。

以上几点决定了J***a不能像C语言一样直接编译成机器码,当然,还有一些其它因素,但我认为上面几点是最主要的。

到此,以上就是小编对于j***a语言的编译器的问题就介绍到这了,希望介绍关于j***a语言的编译器的5点解答对大家有用。