idea和eclipse有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了idea和eclipse有啥区别相关的知识,希望对你有一定的参考价值。

1、设置不同

Eclipse在工程浏览视图或者包浏览视图可以看到并使用链接编辑器的按钮。

idea在工程视图或者包视图选择设置,勾选根据源码自动滚动功能。

2、内存占用

IDEA需要使用更多的系统资源,比Eclipse更耗费内存。

3、来源不同

Eclipse是允许安装第三方开发的插件来使自身的功能得到扩展和增强的,而Myeclipse就是其中的一种有名的插件集之一,MyEclipse是收费的。



使用IDEA的注意事项

1、省电模式

当勾选此模式以后,IntelliJ不会完成任何自动完成的功能,例如本来输入一个字符会自动提示的,勾选以后就没有了。

2、Java格式化和优化import

Save Actions的功能主要是针对Java可以自动格式化以及优化import等功能,这个在IntelliJ上默认是没有的,可以使用Eclipse Code Formatter的插件,这个插件基本和Eclipse默认的功能类似。

3、搜索框

IntelliJ很少会见到搜索框,在没有搜索框的地方直接输入拼音,例如在Project的视图,打开目录树以后直接敲入字母,如果有符合条件的记录会有高亮显示。

参考技术A 有许多争论的话题是讨论它们哪个有更多的插件、快捷键等等。它们之间有太多的不同而很难决定什么才是最重要的。因此,人们都表示两个IDE在功能性上都差不多,选择某一个则是个人喜好问题了。认为这不仅仅是个人喜好的问题,有客观的原因能表明:Intellij IDEA肯定比Eclipse更好。不会去大量比较两者细微不同,例如插件与快捷键之类的。因为有一系列的blog是关于这些的,例如:[part 1] [part 2] [part 3]。将会展示IDEA与Eclipse的一个最大的不同之处。通常IDEA和Eclipse的fans都不曾了解。前者已经习惯性的使用着它而不曾想象 IDE缺少它会怎样,后者则没有使用它的习惯且难以想象有了它IDE能做得这么好。Eclipse的用户在把玩IDEA的时候通常都不会意识到这个不同点,因为他们习惯了以Eclipse模式工作。为何我如此确信?在开始说明之前,让我解释一下我是谁和为什么的观点值得一听。使用Eclipse已经5年之久,很了解它,为它编写插件并真心地喜爱它。然后,换了一个公司工作,并被强行转移到IDEA上开发,在这次 “分手”后,才最终意识到为什么IDEA更加敏锐。而如今已经使用IDEA一些年了,所以能比较它们两者,因为了解它们。IDEA与Eclipse主要的不同IDEA之所以更加敏锐的原因是:IDEA懂得上下文。这也是JetBrains员工命名IDEA为intelligent的原因。它真正的含义又是什么呢?IDEA检索你的整个项目,分析项目所有的内容,甚至构建语法树。幸亏有它,在任何时候无论将鼠标放置在哪里,IDEA都知道在哪里并知道在那能干什么。仍旧不了然?别担心,在列举了以下几个例子后,一切就清楚了。这种对上下文的理解表现在很多很多方式上,以下只是其中的一部分。1.调试通常在调试过程中,想要求一些表达式的值,在Eclipse中需要选定这个表达式,选定整个表达式非常重要,否则就没法求出它的值。然后,可以使用Ctrl+Shift+I看到这个表达式的值。使用IDEA不需要选择任何东西,只需要把光标移到表达式中然后按下Alt+F8。IDEA会很好的理解这个你可能需要的表达式,然后显示一个对话窗口,其中有一些它给出的建议参数变量。也可以编辑并在对话框中立即将得到这个表达式的值。相当的方便!试过这个特性后,就不会再想在 Eclipse中调试了。基本上在两个IDE上都能让做同样的事,但是使用IDEA会更加简单和快速。对此认真的表示,这个差异太大了:就像天堂跟人间一样。在一个小小的IDEA对话窗口中就提供了自动完成,语法高亮以及需要的一切。2.自动完成自动完成使得IDE比notepad更加优秀,在这个领域能感知上下文的IDEA有了质的飞跃,assertElement(By.id("errorMessage"), vi现在想要查找以vi开头的选项有哪些。IDEA怎么做的呢?无需等待任何的按键,它马上就能理解assertElement需要一个Conditaion类的示例作为第二个参数,而在Condition类中有一个静态变量名叫visible。IDEA会直接建议这个唯一的有效选项。然而,Eclipse会怎么做呢?它不能理解上下文,它不知道光标所在处就是assertElement方法的第二个参数。因此当按下“神圣”的Ctrl+Space时,Eclipse只会简单的显示全局中以vi字母开头的一切。在一个美丽的弹出框中看到了很多漂亮的高亮的格式规范的无用的信息。3.重构专业的程序员能够高效的使用IDE提供的重构功能。所有的现代IDE都提供许多印象深刻的重构功能。但是还是那句,IDEA的重构功能也很聪明智能。它们能读懂需要什么,然后针对不同的情况提供给最适合的解决方案。例如,假设有一个assertErrorMessageIsHidden方法: public void assertErrorMessageIsHidden() assertElement(By.id("errorMessage"), Condition.visible); 我们以字符串“errorMessage”作为该方法的一个参数。先从IDEA开始,将光标放在任何字符串“errorMessage”上,按Ctrl+Alt+P(代表“parameter”),IDEA将会建议我们可能可以在哪些表达中用次字符串为参数。当“errorMessage”表达式被选定以后,IDEA将会建议一些可能的能用做该参数的变量名称。每月惊奇会经常地惊讶于IDEA的聪敏表现,比如它为提示一些选项的名称。它考虑到方法名称,变量类型甚至是变量值,以及其他的此类变量的名称,与之前给定的此变量的名称,除了忽略了生肖。会想说“Wow,IDEA也能这样?”,想说至少每个月一次吧。现在然我们看看Eclipse是怎么样给出建议的。别忘了,选择整个"errorMessage"表达式哦。选择一个“推荐参数”的重构功能(通过菜单,没有什么快捷键可供使用),获得差不多相同的结果,然而,Eclipse不会给出变量名提示选项,但幸亏不会。结论如选择Java IDE,那么Intellij IDEA肯定要比Eclipse好的。这不仅仅是个人喜好问题。从客观上看,IDEA更好。能够快捷地编写和修改代码。它给出恰当的名称提示,查找适合的方法。它不需要特别地选择表达式便会猜测到你想要做的以及想如何对它命名。IDEA预示着并给你提示。P.S. Remarks我认为IDEA在作为Java IDE时确实比Eclipse更好。如果你考虑他们其他方面的能力例如用于其他例如C++、Python、Scala的IDE上,或者是作为构建桌面的应用的平台,Eclipse很有可能拔得头筹。事实上这是依赖于对他们的定义的,Eclipse已将自己定位为一个抽象平台,用来使用插件构建任何工具,而IDEA则定位为一个“智能的Java IDE”,而且它正如此。作为纪念就尝试着列举一些Eclipse可能比IDEA更好的地方:Eclipse看上去更棒,所有大题小做的SWT以及本地控件都用的很值。Eclipse看上去很稳定的深思熟虑过的程序,它有着漂亮的字体以及图标。然而当第一眼看到IDEA是,它像是作噱头的玩具一样,有着不完全的图标以及笨拙的Swing界面。Eclipse拥有更强的项目结构支持。在IDEA中,项目是有模块组成。 参考技术B idea和eclipse的区别如下:
1. 菜单与鼠标右键,执行的时候,自然会提示快捷键
2. Help | Default Keymap Reference,这个是一个大的常用快捷键表,建议有空的时候,花点时间过一遍。
3. Help | Find Action (Ctrl+Shift+A),这个快捷键非常有用,是一个命令查找,在任何时间,都可以执行此命令,输入你需要的操作,例如”extract method”,下面会出现命令以及对应的快捷键
4. 这就要求你熟悉操作的英文名, 在Eclipse里面可能习惯了肌肉记忆,不太记得快捷健的英文名了。大不了去Eclipse里面找找,或者翻IDEA的Keymap表,有分类目录。
参考技术C IDEA代码提示能力比eclipse做的好,运行速度快,特别适合开发前端,例如html5
但是eclipse的插件多,基本有语言的开发插件

javac 和 Eclipse 编译器有啥区别?

【中文标题】javac 和 Eclipse 编译器有啥区别?【英文标题】:What is the difference between javac and the Eclipse compiler?javac 和 Eclipse 编译器有什么区别? 【发布时间】:2011-03-04 22:47:23 【问题描述】:

Eclipse 的 Java 编译器只是封装了 javac 程序所封装的同一个内核,还是完全是一个单独的编译器?如果是后者,他们为什么要重新发明***?

【问题讨论】:

【参考方案1】:

Eclipse 已经实现了自己的编译器,称为Eclipse Compiler for Java (ECJ)。

它与 javac 不同,javac 是 Sun JDK 附带的编译器。一个显着的区别是 Eclipse 编译器允许您运行实际上没有正确编译的代码。如果出现错误的代码块从未运行,您的程序将运行良好。否则,它将抛出一个异常,表明您尝试运行无法编译的代码。

另一个区别是 Eclipse 编译器允许在 Eclipse IDE 中进行增量构建,也就是说,一旦您完成输入,所有代码就会被编译。

Eclipse 自带编译器这一事实也很明显,因为您可以在 Eclipse 中编写、编译和运行 Java 代码,甚至无需安装 Java SDK。

ECJ 优于 javac 的几个例子是:

Apache Tomcat 使用 ECJ 编译 JSP, IntelliJ IDEA 支持 ECJ,从 GNU Compiler for Java (GCJ) 4.3 开始, GCJ 与 ECJ 集成, Liferay 使用 ECJ 构建。

【讨论】:

@Bart,Eclipse 编译器可以很好地用于企业版本构建。 @jinguy 我不同意您应该使用 Eclipse 编译器进行发布。正如你在答案中所说,它可以编译有错误的代码,你不想要像 public void foo() throw new Error("Unresolved compiler problem: \n\tFOOBAR cannot be resolved\n"); 这样的东西。 出现在我的生产代码中。 @Matthew Farwell 他没有说你应该,但你可以。如果您创建的构建中有错误,那么首先您的构建过程就有问题。 请注意,在您的应用程序中嵌入 ECJ 允许您的程序在 JRE 下运行,而不需要 JDK。 @MatthewFarwell 在此处关闭循环:对于发布版本,建议您简单地指定编译器参数-proceedOnError,它根本不会从有错误的来源。【参考方案2】:

每个人都已经解释过它们是不同的。以下是我注意到的两个编译器之间的一些行为差异。它们都归结为(至少)其中一种实现中的错误。

编译时优化相关

Eclipse bug? Switching on a null with only default case

泛型类型推断相关

Generics compiles and runs in Eclipse, but doesn’t compile in javac Compilers behave differently with a null parameter of a generic method

【讨论】:

事实上,经过一个漫长的夜晚,我知道了这种差异:Eclipse 报告了一个错误,关于我认为合法的事情(我不记得是什么),在我绝望中(我几乎无法保持清醒)我只是将代码提供给 javac,然后它运行顺利!我在 Google 中发现我必须升级 JDT 才能修复该问题。 我发现编译器在处理复杂情况下的泛型之间存在许多差异。如果您想将它们添加到您的答案中,我在这里提出了两个问题:***.com/questions/13501836/…***.com/questions/13980552/… 根据 JLS,匿名类永远不是静态的,但它们可以在静态范围内声明。当使用反射来询问这样的类是否是静态的时,ECJ 生成的代码在 javac 的says yes 中说不。相关帖子here. 所发出的字节码中的任何语义差异都是任一实现中的错误。在我看来,这不是很有趣。只需列出 javac 和 ecj 中的开放错误,我就可以轻松生成一长串此类“差异”。 仅供参考,Netbeans 没有任何此类“差异”,因为它使用 javac 的内部 API 来完成 EJC 所做的一切。【参考方案3】:

Eclipse 的内置编译器基于 IBM 的 Jikes java compiler。 (请注意,Eclipse 也是在 IBM 开始的)。在JDK中完全独立于Sun的Java编译器;它不是 Sun 的 javac 的封装。

Jikes 已经存在很长时间了,它曾经比标准的 JDK Java 编译器快很多(但我不知道这是否仍然正确)。至于 IBM 为什么要编写自己的 Java 编译器:可能是因为许可原因(他们也有自己的 Java 实现)。

【讨论】:

他们并没有真的编写自己的 Java 编译器。 Eclipse 在 Java 出现之前就可以追溯到 Visual Age for Smalltalk。由于这两种语言实际上有些相似,因此它们只是调整了现有技术。 Sun 的编译器也完全不适合在 IDE 中使用,尤其是在像最初的 Visual Age for Java 这样的增量 Smalltalk 风格的 IDE 中,因为它总是想要编译整个文件。 IBM 的编译器只能增量编译已更改的片段。它甚至可以编译甚至不是合法Java的sn-ps,在 Eclipse 剪贴簿,您可以在其中简单地编写代码的 sn-ps、突出显示并运行它们,而无需将它们放入类、主方法甚至方法中 . @JörgWMittag 实际上,javac 的内部 API(由 Netbeans 使用)可用于实现所有相同的目标。 @AleksandrDubinsky:这在 1997 年 Visual Age for Java 发布时的实际效果如何?【参考方案4】:

它完全是一个单独的编译器。这是必需的,因为 javac 不允许编译来自 the eclipse site 的轻微损坏的代码

增量 Java 编译器。作为 Eclipse 构建器实现,它基于从 VisualAge for Java 编译器演变而来的技术。特别是,它允许运行和调试仍然包含未解决错误的代码。

【讨论】:

为什么要编译“轻微”损坏的代码? @SteveCohen:因为您希望编译器在您编写代码时提供语法高亮、语义高亮、重构支持、类型检查、代码完成、提示以及编译器所做的所有其他事情,当您编写代码时,根据定义,它或多或少是不完整的(否则,您为什么还要编写它?)一个仅在项目结束时工作的 IDE,当一切都已经实现时,将是相当没用。

以上是关于idea和eclipse有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

myeclipse和eclipse之间有啥区别?

eclipse与Myeclipse有啥区别呢

Hbuilder和eclipse有啥区别?哪个更适合前端开发?哪个更适合java开发?

eclipse和netbeans的区别

idea和eclipse区别

eclipse 和 Meclipse有啥区别