Ну сейчас ява используется в 3-х больших областях: андроид, десктоп и веб.
И имхо с java лучше не начинать писать под веб. Технологий там куча, везде свои фишки и тонкости.
Начнёшь писать на JavaEE стеке, будешь (скорее всего) долго разбираться какой сервер лучше использовать, какие есть реализации API, как их подключить и использовать, будешь недоумевать, почему вдруг NullPointerException, потом увидишь, что это из-за того, что всякие зависимости EJB не внедрились, транзакции откатились, LazyLoad в моделях не работает и поля id в них не хотят сами генериться.
В спринге всё попроще для начала, но куча xml и 10-ти ярусные аннотации не всегда радуют. Несоответствие стандартам несколько удручает. Хотя это понятно, сперва всё придумывают в спринге, а потом самое лучшее идёт в стандарт. Но порой появляется ощущение того, что вот этот кусок кода явно делался наспех. Да и общая дефрагментированность проекта тоже явно не в плюс.
Play 2 оооочень долго собирается, да и он больше для скалы, нежели для явы.
Есть всякие микрофреймворки, типа спарка.
Особняком, наверное, стоит vert.x с поддержкой кучи языков, неблокирующего IO, уже готовым к использованию глобальным Event Bus и прочими плюшками.
Помимо этого, есть ещё огромное количество всяких фреймворков и библиотек, которые работают поверх/вместо какой-то части в вышеописанных проектах. Они могут быть несовместимыми между собой, или быть независимыми. Так что ты сможешь сам себе собрать фреймворк из запчастей.
Также, есть фреймворки для JVM-языков, например Lift, Play 2, Spray для Scala, Grails для Groovy и т.д.
Под андроид меньше такого разброса в технологиях, возможно проще будет начать с него.
А десктопные приложения на яве - это обычно всякие огромные ИДЕ и майнкрафты. В одиночку всё это писать трудно, да и спрос тут меньше.
Так что спроси себя, нужна ли тебе ява, и если нужна, то для чего. Всё-таки надо сперва определиться с направлением, а потом выбирать нужный инструмент.