Java является объектно-ориентированным языком, поэтому такие понятия как «класс» и «объект» играют в нем ключевую роль. Любую программу на Java можно представить как набор взаимодействующих между собой объектов.
Шаблоном или описанием объекта является класс (class), а объект представляет экземпляр класса. Можно провести следующую аналогию. У нас у всех есть некоторое представление о машине — наличие двигателя, шасси, кузова и т.д. Есть некоторый шаблон auto — этот шаблон можно назвать классом. Реально же существующий автомобиль auto_solaris (фактически экземпляр данного класса) является объектом этого класса.
Определение класса
Класс определяется с помощью ключевого слова сlass. Вся функциональность класса представлена его членами — полями (полями называются переменные класса) и методами. Например, класс Book мог бы иметь следующее описание :
class Book < public String name; public String author; public int year; public void Info()< System.out.printf(«Книга ‘%s’ (автор %s) была издана в %d году n», name, author, year); >>
Таким образом, в классе Book определены три переменных и один метод Info, который выводит значения этих переменных.
Создание крупного проекта на Java с нуля
Кроме обычных методов в классах используются также и специальные методы, которые называются конструкторами. Конструкторы нужны для создания нового объекта данного класса и, как правило, выполняют начальную инициализацию объекта. Название конструктора должно совпадать с названием класса :
class Book < public String name; public String author; public int year; Book()< this.name = «неизвестно»; this.author = «неизвестно»; this.year = 0; >Book(String name, String author, int year) < this.name = name; this.author = author; this.year = year; >public void Info()
Класс Book имеет два конструктора. Первый конструктор без параметров присваивает «неопределенные» начальные значения полям. Второй конструктор присваивает полям класса значения, которые передаются через его параметры.
Так как имена параметров и имена полей класса в данном случае у нас совпадают — name, author, year, то мы используем ключевое слово this. Это ключевое слово представляет ссылку на текущий объект. Поэтому в выражении this.name = name; первая часть this.name означает, что name — это поле текущего класса, а не название параметра name. Если бы у нас параметры и поля назывались по-разному, то использовать слово this было бы необязательно.
Консольный ввод/вывод в Java
Для получения данных, введенных пользователем, а также для вывода сообщений нам необходим ряд классов, через которые мы сможем взаимодействовать с консолью. Частично их использование уже рассматривалось в предыдущих темах. Для взаимодействия с консолью нам необходим класс System . Этот класс располагается в пакете java.lang, который автоматически подключается в программу, поэтому нам не надо дополнительно импортировать данный пакет и класс.
Вывод на консоль
Для создания потока вывода в класс System определен объект out . В этом объекте определен метод println , который позволяет вывести на консоль некоторое значение с последующим переводом консоли на следующую строку:
System . out . println ( «Hello world» ) ;
В метод println передается любое значение, как правило, строка, которое надо вывести на консоль. При необходимости можно и не переводить курсор на следующую строку. В этом случае можно использовать метод System.out.print() , который аналогичен println за тем исключением, что не осуществляет перевода на следующую строку.
System . out . print ( «Hello world» ) ;
Но с помощью метода System.out.print также можно осуществить перевод каретки на следующую строку. Для этого надо использовать escape-последовательность n :
System . out . print ( «Hello world n» ) ;
Если у нас есть два числа, и мы хотим вывести их значения на экран, то мы можем, например, написать так:
System . out . printf ( «x=%d; y=%d n» , x , y ) ;
В данном случае символы %d обозначают спецификатор, вместо которого подставляет один из аргументов. Спецификаторов и соответствующих им аргументов может быть множество. В данном случае у нас только два аргумента, поэтому вместо первого %d подставляет значение переменной x, а вместо второго — значение переменной y. Сама буква d означает, что данный спецификатор будет использоваться для вывода целочисленных значений типа int .
Кроме спецификатора %d мы можем использовать еще ряд спецификаторов для других типов данных:
- %x : для вывода шестнадцатеричных чисел
- %f : для вывода чисел с плавающей точкой
- %e : для вывода чисел в экспоненциальной форме, например, 1.3e+01
- %c : для вывода одиночного символа
- %s : для вывода строковых значений
String name = «Иван» ;
int age = 30 ;
float height = 1.7f ;
При выводе чисел с плавающей точкой мы можем указать количество знаков после запятой, для этого используем спецификатор на %.2f , где .2 указывает, что после запятой будет два знака. В итоге мы получим следующий вывод:
Консольный ввод
Для получения консольного ввода в классе System определен объект in . Однако непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner , который, в свою очередь использует System.in. Например, создадим маленькую программу, которая осуществляет ввод чисел:
import java . util . Scanner ;
public class FirstApp <
public static void main ( String [ ] args ) <
Scanner in = new Scanner ( System . in ) ;
int [ ] nums = new int [ 5 ] ;
for ( int i = 0 ; i < nums . length ; i ++ ) <
nums [ i ] = in . nextInt ( ) ;
for ( int i = 0 ; i < nums . length ; i ++ ) <
System . out . print ( nums [ i ] ) ;
System . out . println ( ) ;
Так как класс Scanner находится в пакете java.util, то мы вначале его импортируем. Для создания самого объекта Scanner в его конструктор передается объект System.in . После этого мы можем получать вводимые значения. Например, чтобы получить введенное число, используется метод in.nextInt(); , который возвращает введенное с клавиатуры целочисленное значение.
В данном случае в цикле вводятся все элементы массива, а с помощью другого цикла все ранее введенные элементы массива выводятся в строчку.
Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:
- next() : считывает введенную строку до первого пробела
- nextLine() : считывает всю введенную строку
- nextInt() : считывает введенное число int
- nextDouble() : считывает введенное число double
- hasNext() : проверяет, было ли введено слово
- hasNextInt() : проверяет, было ли введено число int
- hasNextDouble() : проверяет, было ли введено double
Кроме того, класс Scanner имеет еще ряд методов nextByte/nextShort/nextFloat/nextBoolean, которые по аналогии с nextInt считывают данные определенного типа данных.
Создадим следующую программу для ввода информации о человеке:
Источник: leodev.ru
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
Словарь в Java
Рассмотрим такую структуру данных, как словарь (синонимы: ассоциативный массив, отображение, map, dictionary). Словарь в Java реализуется с помощью интерфейса Map. Мы разберем его реализацию классом HashMap. В качестве примера напишем программу «Англо-русский словарь» на Java.
Словарь: общая информация и использование в Java
Словарь (dictionary) — это структура данных, позволяющая хранить информацию в виде комбинации «ключ» — «значение» (key — value). То есть, с каким либо значением (value) мы ассоциируем ключ (это может быть: id, термин и т. д.) и эту пару заносим в словарь. Обращение к элементу словаря, удаление, поиск по словарю производится по ключу. С помощью данной структуры, например, удобно организовать телефонный справочник, где имени (key) соответствует номер телефона (value).
В Java словарь определяется следующим образом:
Источник: vscode.ru