Как оформлять код?

camelCase - верблюжья нотация для записи имен, состоящих из нескольких слов

camelCase — верблюжья нотация для записи имен, состоящих из нескольких слов

Оформление кода на Java похоже на С/С++. Но есть и особенности. Например, вместо подчёркиваний в многословных (last_event) идентификаторах обычно используются заглавные буквы (lastEvent — т.н. верблюжья нотация). Советую попрактиковаться в английском и почитать как это принято делать в компании Google или Oracle. Последняя инструкция довольно старенькая, но Oracle так давно существует…
Если с чтением у Вас не все хорошо, то просто внимательно рассмотрите эти картинки. Они хоть и про JavaScript, но некоторое представление об оформлении кода Вам дадут.
Если целью является разработка класса, то по крайней мере методы класса должны быть документированы в соответствии с правилами Javadoc. Достаточно будет использовать @param и @return, которые используются в примерах.

Ввод данных: Scanner vs StreamTokenizer

Разберемся с одним из подходов к вводу данных из стандартного потока через класс java.util.Scanner. Сделаем это на примере простой задачи с очень полезного сайта e-olimp.com

Задача

Введите из стандартного потока одно число. В предположении, что это положительное двузначное целое число выведите в стандартный поток вывода каждую его цифру отдельно (через пробел). Порядок цифр менять не следует.

Тесты

Никаких специфических случаев в алгоритме не предполагается. Делаем три теста — самое маленькое число допустимого диапазона, самое большое и какое-нибудь значение из середины диапазона.

Вход Выход
10 1 0
99 9 9
54 5 4

Решение

Воспользуемся классом  java.util.Scanner, чтобы ввести данные в формате целого числа. И вычислим обе его цифры.

Пояснения

  1. Описываем переменную i типа java.util.Scanner и тут же присваиваем ей значение нового объекта этого класса. Конструктор изготавливает объект Scanner’а из стандартного потока ввода. Т.е. i становится надстройкой над стандартным потоком ввода. Это позволяет нам прочесть целое число, а не просто читать методом read() по одному байту.
  2. С помощью метода nextInt() читаем последовательность цифр и преобразуем её в целое число. Число запоминаем в переменной n.
  3. n / 10 — число десятков в числе. Десятков будет в десять раз меньше чем само число. Выполняется целочисленное деление — деление нацело.
  4. n< % 10 — вычисляем остаток от деления на десять — число единиц — самая правая цифра числа.
  5. n / 10 + " " + n % 10 — вставляем между двумя целыми строку из одного пробела. В этом случае числа также преобразуются в строковое представление и все три строки сливаются — называется конкатенация строк. Так работает со строковыми данными операция «+».

Ускоряем ввод/вывод

При всем удобстве указанного подхода он довольно медленный и иногда задачи не заходят по времени. Значительно ускорить работу можно использовав StreamTokenizer и PrintWriter.
Это увеличит объем кода, но сэкономит время.

Возможно, стоит посмотреть на этот шаблон для решений.

Далее

Попробуйте найти все цифры трёхзначного числа.

Если удалось справиться с трёхзначным числом, решаем задачи из категории Линейные алгоритмы. Как можно больше. Даже если все кажется понятным. Тем более если все кажется понятным. Нам ведь нужно уметь писать программы, а не понимать как это делается. Тем более, что в каждой задаче вероятно придется выяснить что-то новенькое для себя.

Hello, World!

Задача

Конечно начнем с самой известной задачи (если не считать квайнов).

Необходимо вывести в стандартный поток вывода текст «Hello, World!»

Тесты

Решение любой задачи правильно начинать с подготовки тестов. Тесты устанавливают какой должна быть правильная реакция программы на различные входные данные. В нашей первой программе никаких входных данных нет и тесты будут очень простыми:

input output
Hello, World!

Решение

Вот пример того, как можно решить эту задачу на Java:

Запустить на выполнение код.

Пояснения

Этот «простой» код даёт нам показывает как высока планка вхождения в программирование на Java. Конечно, можно пока рассматривать всё, кроме «Hello, World!» как некоторую важную, но бессмысленную мантру и старательно воспроизводить её в первых программах. Но это плохой подход. Правильным будет попытаться разобраться с каждым словом. Если это получится, то самая сложная часть курса будет позади.

  1. class — указывает на то, что далее следует определение некоторого нового тип объектов (класса). При этом указывается в каких переменных (полях) будут храниться значения свойств объекта и какими методами (функциями) можно будет пользоваться. Синтаксически методы легко отличить от полей — после названия метода следуют круглые скобки со списком формальных параметров (иногда пустым) В нашем примере полей нет, но есть один метод с названием main.
  2. public — указывает, что поле или метод (в данном случае метод main) можно использовать (вызывать) в любых посторонних классах. В нашем случае , поскольку метод main будет вызываться виртуальной машиной при старте программы, виртуальна машина должна иметь на это право.
  3. Main — имя того класса, который мы будем дальше придумывать. Может Быть любым, например, «X» или «Qwerty», но принято начинать с прописной (большой) буквы.
  4. static — указывает, что поле или метод (в данном случае метод main) принадлежит самому классу, а не объектам. Такие поля существуют даже тогда, когда нет вообще ни одного объекта данного типа (класса). И, соответственно, методы класса можно вызывать до создания объектов данного типа. Для метода main важно быть статическим, поскольку он будет вызван первым при запуске программы. в этот момент каких-либо объектов ещё нет — их просто некому было создать.
  5. void — указывает какого типа значение вернёт функция main при вызове. Виртуальная машина JVM не ожидает от main каких-либо результатов и тип возвращаемого значения — void (пусто).
  6. main — имя метода. Именно так должен называться метод, который вызовет виртуальная машина при попытке «запустить» какой-либо класс. Если Вы хотите, чтобы класс можно было запускать на выполнение в виртуальной машине, напишите для него методmain.
  7. String[] args — аргумент функции main. При запуске программы (например командой в окне консоли) можно указать несколько слов через пробел. Эти слова будут переданы функции main через массив строк. Здесь
    • String — имя кем-то написанного класса (такое же как и наш класс Main).
    • args — имя параметра, через который в функцию main попадут слова из командной строки при запуске. Имя может Быть любым, например, «x» или «qwerty», но принято начинать со строчной (маленькой) буквы.
    • [ ] — признак того, что параметр args является массивом. Квадратные скобки можно ставить до (слева) или после (справо\а) args. У каждого варианта своя философия, что подумают пчёлы.
  8. System.out.println(…) вызов метода println(). Метод принадлежит объекту, который хранится в статическом свойстве out некоторого класса System. Метод устроен так, что выводит (печатает) в стандартный поток вывода строку, которую ему передали в качестве аргумента. ln в названии метода намекает, что после вывода строки будет сделан переход на новую строку.

Дальше

Попробуйте воспроизвести решение по памяти в среде ideone. Если всё прошло успешно, посмотрите эту статью, чтобы разобраться с вводом данных.

7 вещей, которым нужно научиться, чтобы найти работу на Java


  • В первую очередь необходимо быть хорошо знакомым с JavaSE. Под знакомством я понимаю не только чтение документации по тому или иному пакету, но и умение написать небольшой иллюстративный код.
  • Второе. Необходимо иметь правильное представление об объектно ориентированном проектировании (OOD), языке UML и шаблонах. По крайней мере в пределах книги Крэг Ларман. Применение UML 2.0 и шаблонов проектирования. Или лучше Applying UML and Patterns 3rd Edition.
  • Третье. Как ни крути, а базы данных потребуются. Т.е. освежаем в памяти SQL и разбираемся с Hibernate. Обязательно пишем какой-то код, чтобы убедиться, что все поняли верно.
  • Четвертое. В большинстве компаний придерживаются тех или иных соглашений о технике взаимодействия и разработки. Нужно быть к этому готовым. Советую полистать что-нибудь по Agile software development. Более внимательно ознакомиться с Rational Unified Process. Если тема покажется интересной, то можно еще почитать про Capability Maturity Model Integration for Development. Конечно, заранее неизвестно, что использует компания работодателя. Но я не знаю случая, чтоб человеку вообще не пригодилась информация этого блока.
  • Пятое. Придется работать в команде. Будьте морально готовы применять какую-либо систему командной разработки и контроля версий. Специально тут готовиться не к чему. Скорее всего будет вполне достаточно иметь на компьютере софт, который папку проекта делает доступной для совместной разработки. Техника проста: внесли и отладили изменения в файлах — сделайте commit, чтобы это появилось у остальных. Пришли утром на работу — сделайте update, чтоб актуализировать проект.
  • Шестое. Придется работать с тестировщиками. По крайней мере нужно посмотреть на Bugzilla и понять зачем она нужна.
  • Седьмое и последнее, которое будет для вас первым. Среда разработки. Скорее всего ею окажется Eclipse. Проблема в том, что сейчас это уже не совсем среда. Чтобы правильно сориентироваться очень важно разобраться с Open Services Gateway Initiative. По крайней мере на уровне использования и создания компонент.

В этом месте обычно спрашивают — а что EJB или JPL учить не нужно?
Ответ простой — выучите на работе, главное ее (работу) получить :).
Надеюсь все у Вас получится.