Как нас учили:
Цитата
1) результатом успешной компиляции является не машинный код, а независящий от платформы двоичный код;
2) файлы, содержащие двоичный код, в отличие от традиционных объектных файлов представляют собой окончательный, а не промежу-точный результат. Поэтому программа на Java — это не один файл, а несколько, при чем, код каждого класса помещается в отдельный файл, имя которого совпадает с именем класса (т. е., если в одном исходном файле будет определено несколько классов, то результатом его компи-ляции будет несколько файлов). После компиляции программ на Java отсутствует этап связывания. Вместо этого связывание осуществляется динамически во время выполнения программы;
3) поскольку в результате компиляции программы на Java не создается машинного кода, то для выполнения требуется интерпретатор двоичного кода, называемый виртуальной машиной. Также виртуальная машина осуществляет редактирование связей.
В чем лучше писать... это уже более субъективно )
Я бы посоветовала Aditor (типа блокнота, но подсвечивает синтаксис и соблюдает отступы).
Из IDE видела только Eclipse. Не понравилось.
Но, повторюсь, это все ИМХО.