There are a large number of Java® developer tools available for nearly all stages of software development, from implementation to deployment. These tools are capable of completely profiling running applications, disassembling compiled classes and even creating special bindings to libraries written in languages other than Java®. Integrated development environments (IDEs) implement many of these tools and add other convenient functions that can make programming and debugging easier than using a command line. The variety and volume of Java® developer tools is a result of the language being open source, which allows developers easy access to the inner workings of the core implementations when creating tools.
Most of the available tools are useful during the implementation phase of development. Some available tools can look at the execution of a program and isolate areas of the source code where the most processing time is spent. They also are able to find unused code blocks that are unreachable by the main program. Special Java® developer tools have been written that are capable of showing the real-time memory state as it evolves during execution.
There are standalone tools that can be used to create an entire user interface by simply dragging and dropping pre-made components. The components do not even have to be strictly visual but instead can be control classes. This kind of rapid application development allows programmers to create small, customizable elements that are easily reused over and over again, providing consistent functionality.
Java® IDEs are very effective tools for debugging programs. In addition to being able to seamlessly treat the source code for the core Java® libraries as if it were part of the current project, IDEs also can provide detailed stack traces and class browsing abilities. IDEs can use additional tools that allow the tracking of revisions and file versioning so that unwanted changes can be removed and the source files restored to a functional state.
There are a variety of system emulators available as well. These Java® developer tools can simulate the runtime environment of a portable device, specific operating system or web browser. Emulators allow development to take place on a desktop system without the need to constantly transfer programs to the actual target device for testing.
Deployment can be made easier by using the Java® network launch protocol (JNLP). This allows a program to be fully installed and deployed on a host system through a network connection. Future program maintenance can be aided with the JNLP by providing a framework for automatic program updates.