Being a java software developer, I'd gladly share my personal experience with you.
First of all, I must mention that all my experience with the above IDEs is on Linux platform, but I have seen that what applies to this OS is not the same as for Windows or MAC. Also, respecting your "pure Java" restriction, I will not address features related to other languages/frameworks and etc that might be supported. So, here we go:
The good things about this IDE are:
- the most visually appealing one from the three, personal opinion
- easy source code navigation
- navigation between maven pom files, when clicking on dependencies, has info tooltips
- good workspace structure, allows for creating working sets - groups of projects within a workspace, so one could focus on a concrete working set rather than the whole workspace.
- excellent debugging
- multiple perspectives (dedicated language development like Java, Spring, JavaScript, Debug perspective and etc). Each perspective has its own settings on views, position of windows and tools and etc, which are automatically remembered by the IDE. To me, this is a valuable advantage, although the configuration is maintained per workspace only.
- allows to easily import and debug 3rd party source code. Sometimes, it requires the code to be manually downloaded, but the rest I find easy enough
Disadvantages:
- it is slow on loading, clumsy on interactions. With additional plugins it becomes slower.
- often crashes, especially on Linux (Windows versions are more reliable), it is good to restart it in a few days.
- under Linux, versions higher than 3.0 lag for a few seconds prior opening any markup file (XML, JSF), which is very counter-productive.
- versions below 3.0 do not have the above markup problem, but lack support for Java 1.7 syntax features (the short generics for instance).
- JSF lacks auto completion
- Mac versions have inconsistent conventions for shortcuts, part of them use the
Ctrl + ?
combination, other use the FN + ?
. Users familiar with the IDE on other OS-es get frustrated at first
moving files across packages/projects can be a pain, as some times copy(cut)/paste does not work, just drag & drop
sudden freezing upon autocompletion, fixed only by restarting the IDE (could be work-arrounded by minimizing and restoring, but the menu commands and related keyboard shortcuts stop working - i.e. can edit file but unable to save it. Still, copy-paste to external editor is possible)
- internal IDE task processes are not reliable. Possible hanging, inability to stop or even deadlocking if multiple tasks with shared resources are started (like refreshing the SVN repository multiple times causing more than one refresh processes).
I have experience with this IDE on Linux only, maybe on other platforms there will be differences I might be missing
Advantages:
- intuitive to use
- excellent code navigation
- support for Eclipse projects (able to import them as IDEA projects)
- excellent and verbose refactoring
- able to access the filesystem location of a file from the project view trough the right-click menu (a feature I am missing in eclipse)
Disadvantages
- for spring XML contexts, it does not recognize all attributes although it has fetched the imported XML schemas. The actual problem is the error highlighting, which may confuse inexperienced developers
- working with Subversion (reviewing and synchronizing changes) not as intuitive as in Eclipse
- false error syntax coloring in pom.xml files when using maven properties instead of literals for dependencies (like the version number and etc). This can confuse inexperienced people.
The advantage I can think of:
- for web development, it has embedded server, which makes easier for hosting a web application for debug purposes, without setting up an external server and deploying to it.
Disadvantage:
I have used NetBeans in the past and I preferred it over Eclipse, as by that time it was more stable and consumed less resources. But then my usage of it included doing my homeworks at university. I have not used this IDE professionally, as my work environments preferred the above options for Java, therefore I would not engage in comparison.
My personal choice weights towards Eclipse, as I am more familiar with it, although it has a lot more disadvantages. I prefer it for its capabilities to organize the workspace and allow to better focus on the current task. As I said, the multiple perspectives help a lot, as I have configured each to best suit for the concrete task I am working on. I like the verbose output from subversion too, as it is important for me to properly track my commits/updates.
IntelliJ IDEA makes it easy for me to adapt to it though it is less intrusive and intelligent indeed. It recognizes multiple project types automatically, and asks you on the moment, if something needs additional configuration. For instance, if you import a maven project, and it does not have the maven home directory set up, it will ask you for it when you attempt to perform maven-related tasks and will remember your choice. Obviously, the IDE attempts to assist you in configuring it and using it appropriately. Combined with its stability and responsiveness (compared to Eclipse), it feels as a lot more reliable environment. I must admit I have not delved into customizing it in depth, but it is a candidate for becoming my IDE of choice.