diff options
Diffstat (limited to 'ru-ru/learnjava-ru.html.markdown')
-rw-r--r-- | ru-ru/learnjava-ru.html.markdown | 506 |
1 files changed, 506 insertions, 0 deletions
diff --git a/ru-ru/learnjava-ru.html.markdown b/ru-ru/learnjava-ru.html.markdown new file mode 100644 index 00000000..b429f06d --- /dev/null +++ b/ru-ru/learnjava-ru.html.markdown @@ -0,0 +1,506 @@ +--- + +language: java +contributors: + - ["Jake Prather", "http://github.com/JakeHP"] + - ["Madison Dickson", "http://github.com/mix3d"] +translators: + - ["Sergey Gaykov", "https://github.com/gaykov"] +filename: LearnJava.java + +--- + +Java - это объектно ориентированный язык общего назначения. +[Подробнее читайте здесь.](http://docs.oracle.com/javase/tutorial/java/index.html) + +```java +// Однострочные комментарии начинаются с //. +/* +Многострочные комментарии +выглядят так. +*/ +/** +JavaDoc-комментарии выглядят так. Они используются для описания класса +и его членов. +*/ + +// Импорт класса ArrayList из пакета java.util. +import java.util.ArrayList; +// Импорт всех классов из пакета java.security. +import java.security.*; + +// Каждый .java файл содержит один публичный класс, имя которого совпадает с +// именем файла. +public class LearnJava { + + // Программа должна содержать метод main, который является точкой входа. + public static void main (String[] args) { + + // System.out.println используется для печати строк. + System.out.println("Hello World!"); + System.out.println( + "Integer: " + 10 + + " Double: " + 3.14 + + " Boolean: " + true); + + // Чтобы напечатать что-либо не заканчивая переводом строки + // используется System.out.print. + System.out.print("Hello "); + System.out.print("World"); + + + /////////////////////////////////////// + // Типы и Переменные + /////////////////////////////////////// + + // Переменные объявляются с использованием <тип> <имя> + // Byte - 8-битное целое число. + // (-128 <= byte <= 127) + byte fooByte = 100; + + // Short - 16-битное целое число. + // (-32,768 <= short <= 32,767) + short fooShort = 10000; + + // Integer - 32-битное целое число. + // (-2,147,483,648 <= int <= 2,147,483,647) + int fooInt = 1; + + // Long - 64-битное целое число. + // (-9,223,372,036,854,775,808 <= long <= 9,223,372,036,854,775,807) + long fooLong = 100000L; + // L используется для указания на то, что переменная имеет тип long; + // По умолчанию, числа без L являются integer. + + // Замечание: в Java нет беззнаковых типов. + + // Float - 32-битное IEEE 754 число с плавающей запятой с одинарной степенью точности. + float fooFloat = 234.5f; + // f используется для указания на то, что переменная имеет тип float; + // иначе, число являлось бы double. + + // Double - 64-битное IEEE 754 число с плавающей запятой с двойной степенью точности. + double fooDouble = 123.4; + + // Boolean - true или false + boolean fooBoolean = true; + boolean barBoolean = false; + + // Char - Простой 16-битный символ Unicode. + char fooChar = 'A'; + + // Переменным final не может быть присвоен другой объект. + final int HOURS_I_WORK_PER_WEEK = 9001; + + // Строки. + String fooString = "My String Is Here!"; + + // \n - это экранированный символ, который означает начало новой строки. + String barString = "Printing on a new line?\nNo Problem!"; + // \t - это экранированный символ, который добавляет символ табуляции. + String bazString = "Do you want to add a tab?\tNo Problem!"; + System.out.println(fooString); + System.out.println(barString); + System.out.println(bazString); + + // Массивы + // Размер массива должен быть указан при объявлении. + // Объявлять массив можно в следующих форматах: + //<тип данных> [] <имя> = new <тип данных>[<размер массива>]; + //<тип данных> <имя>[] = new <тип данных>[<размер массива>]; + int [] intArray = new int[10]; + String [] stringArray = new String[1]; + boolean boolArray [] = new boolean[100]; + + // Другой способ объявления и инициализации массива: + int [] y = {9000, 1000, 1337}; + String names [] = {"Bob", "John", "Fred", "Juan Pedro"}; + boolean bools[] = new boolean[] {true, false, false}; + + // Индексация массива - доступ к элементу. + System.out.println("intArray @ 0: " + intArray[0]); + + // Массивы изменяемы и индекс в них начинается с 0. + intArray[1] = 1; + System.out.println("intArray @ 1: " + intArray[1]); // => 1 + + // Дополнительно. + // ArrayLists - похож на массив, но предлагает больше возможностей, + // его размер изменяемый. + // LinkedLists - реализация двусвязного списка. Все операции + // выполняются так, как ожидается от двусвязного + // списка. + // Maps - набор объектов, в которых присутствует связь + // ключ-значение. В Map ключ не может дублироваться. + // Каждый ключ связан только с одним значением. + // HashMaps - этот класс использует хэш-таблицу для реализации + // интерфейса Map. Это позволяет сохранить постоянной + // скорость выполнения базовых операций, таких как + // добавление и удаление элементов, вне зависимости + // от размера множества. + + /////////////////////////////////////// + // Операторы + /////////////////////////////////////// + System.out.println("\n->Операторы"); + + int i1 = 1, i2 = 2; // Сокращение для множественного объявления. + + // Арифметика в Java проста. + System.out.println("1+2 = " + (i1 + i2)); // => 3 + System.out.println("2-1 = " + (i2 - i1)); // => 1 + System.out.println("2*1 = " + (i2 * i1)); // => 2 + System.out.println("1/2 = " + (i1 / i2)); // => 0 (0.5 округлено) + + // Остаток от деления + System.out.println("11%3 = "+(11 % 3)); // => 2 + + // Операторы сравнения. + System.out.println("3 == 2? " + (3 == 2)); // => false + System.out.println("3 != 2? " + (3 != 2)); // => true + System.out.println("3 > 2? " + (3 > 2)); // => true + System.out.println("3 < 2? " + (3 < 2)); // => false + System.out.println("2 <= 2? " + (2 <= 2)); // => true + System.out.println("2 >= 2? " + (2 >= 2)); // => true + + // Побитовые операторы! + /* + ~ Унарное побитовое дополнение. + << Знаковый сдвиг влево. + >> Знаковый сдвиг вправо. + >>> Беззнаковый сдвиг вправо. + & Побитовое И. + ^ Побитовое исключающее ИЛИ. + | Побитовое И. + */ + + // Операторы инкремента. + int i = 0; + System.out.println("\n->Inc/Dec-rementation"); + // Операторы ++ и -- увеличивают и уменьшают значение на 1 соответственно. + // Если они находятся перед переменной, сначала происходит + // увеличение/уменьшение, затем операция, если после, + // то сначала выполняется операция, затем увеличение/уменьшение. + System.out.println(i++); //i = 1, напечатает 0 (пре-инкремент) + System.out.println(++i); //i = 2, напечатает 2 (пре-инкремент) + System.out.println(i--); //i = 1, напечатает 2 (пост-декремент) + System.out.println(--i); //i = 0, напечатает 0 (пре-декремент) + + /////////////////////////////////////// + // Контролирующие операторы. + /////////////////////////////////////// + System.out.println("\n->Контролирующие операторы"); + + // Оператор if такой же, как и в С. + int j = 10; + if (j == 10){ + System.out.println("Я напечатаюсь!"); + } else if (j > 10) { + System.out.println("Я нет."); + } else { + System.out.println("И я тоже нет."); + } + + // Цикл while. + int fooWhile = 0; + while(fooWhile < 100) + { + // System.out.println(fooWhile); + // Увеличить счетчик. + // Будет пройдено 100 итераций, fooWhile 0,1,2...99 + fooWhile++; + } + System.out.println("Значение fooWhile: " + fooWhile); + + // Цикл Do While. + int fooDoWhile = 0; + do + { + // System.out.println(fooDoWhile); + // Увеличить счетчик. + // Будет пройдено 100 итераций, fooDoWhile 0->99 + fooDoWhile++; + } while(fooDoWhile < 100); + System.out.println("Значение fooDoWhile: " + fooDoWhile); + + // Цикл for. + int fooFor; + // Структура цикла for => for(<начальное_состояние>; <условие>; <шаг>) + for(fooFor=0; fooFor<10; fooFor++){ + // System.out.println(fooFor); + // Пройдет 10 итераций., fooFor 0->9 + } + System.out.println("Значение fooFor: " + fooFor); + + // Цикл For Each + // Автоматический проход через массив или список объектов. + int[] fooList = {1,2,3,4,5,6,7,8,9}; + // Структура цикла for each => for(<объект> : <объект_массив>) + // читается как: для каждого объекта в массиве + // заметка: тип объекта должен совпадать с типом массива. + + for( int bar : fooList ){ + System.out.println(bar); + //Пройдет 9 итераций и напечатает 1-9 на новых строках. + } + + // Switch Case + // switch работает с типами byte, short, char и int. + // Также он работает с перечислениями, + // классом String и с некоторыми классами-обертками над + // примитивными типами: Character, Byte, Short и Integer. + int month = 3; + String monthString; + switch (month){ + case 1: + monthString = "Январь"; + break; + case 2: + monthString = "Февраль"; + break; + case 3: + monthString = "Март"; + break; + default: + monthString = "Другой месяц"; + break; + } + System.out.println("Результат Switch Case: " + monthString); + + // Сокращенный синтаксис условного оператора. + // Вы можете использовать этот синтаксис для быстрого присвоения + // или логических переходов. + // Читается так: "Если (условие) истинно, использовать <значение 1>, + // в ином случае, использовать <значение 2>" + int foo = 5; + String bar = (foo < 10) ? "A" : "B"; + System.out.println(bar); // Напечатает А, потому что условие истинно + + + /////////////////////////////////////// + // Преобразование и приведение типов данных. + /////////////////////////////////////// + + // Преобразование данных. + + // Преобразование строки в число. + Integer.parseInt("123"); // Вернет числовое представление "123". + + // Преобразование числа в строку + Integer.toString(123); // Вернет строковое представление 123. + + // Для других преобразований, смотрите следующие классы: + // Double + // Long + // String + + // Приведение типов + // Вы так же можете приводить типы в Java. + // Подробнее об этом можно узнать по ссылке: + // http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html + + + /////////////////////////////////////// + // Классы и Функции + /////////////////////////////////////// + + System.out.println("\n->Классы и Функции"); + + // (Класс Bicycle определен ниже) + + // Для создания экземпляра класса используется new. + Bicycle trek = new Bicycle(); + + // Вызов методов объекта. + trek.speedUp(3); // Вы должны всегда использовать сеттеры и геттеры. + trek.setCadence(100); + + // toString возвращает строковое представление объекта. + System.out.println("trek info: " + trek.toString()); + + } // Конец метода main. +} // Конец класса LearnJava. + + +// Вы можете включать другие, не публичные классы в .java файл. + + +// Синтаксис объявления класса: +// <public/private/protected> class <имя класса>{ +// // Поля с данными, конструкторы, функции, все внутри. +// // Функции называют методами в Java. +// } + +class Bicycle { + + // Поля/Переменные класса Bicycle. + public int cadence;// Публичные(public): Доступны из любого места. + private int speed; // Приватные(private): Доступны только внутри класса. + protected int gear;// Защищенные(protected): Доступ из класса и наследников. + String name; // по умолчанию: Доступны только внутри пакета. + + // Конструкторы - способ создания класса. + // Это конструктор: + public Bicycle() { + gear = 1; + cadence = 50; + speed = 5; + name = "Bontrager"; + } + + // Это конструктор, который принимает аргументы: + public Bicycle(int startCadence, int startSpeed, int startGear, String name) { + this.gear = startGear; + this.cadence = startCadence; + this.speed = startSpeed; + this.name = name; + } + + // Синтаксис функций: + // <public/private/protected> <тип возвращаемого значения> <имя>(<аргументы>) + + // Классы в Java часто реализуют сеттеры и геттеры для своих полей. + + // Синтаксис определения метода: + // <модификатор> <тип возвращаемого значения> <имя>(<аргументы>) + public int getCadence() { + return cadence; + } + + // void-методы не возвращают значений. + public void setCadence(int newValue) { + cadence = newValue; + } + + public void setGear(int newValue) { + gear = newValue; + } + + public void speedUp(int increment) { + speed += increment; + } + + public void slowDown(int decrement) { + speed -= decrement; + } + + public void setName(String newName) { + name = newName; + } + + public String getName() { + return name; + } + + //Метод для отображения значений атрибутов объекта. + @Override + public String toString() { + return "gear: " + gear + + " cadence: " + cadence + + " speed: " + speed + + " name: " + name; + } +} // конец класса Bicycle. + +// PennyFarthing - это класс, наследованный от Bicycle +class PennyFarthing extends Bicycle { + // (Penny Farthings - это такие велосипеды с большим передним колесом, + // у низ нет передач.) + + public PennyFarthing(int startCadence, int startSpeed){ + // Вызов конструктора родительского класса. + super(startCadence, startSpeed, 0, "PennyFarthing"); + } + + // Вы должны пометить метод, который переопределяете при помощи @аннотации + // Чтобы узнать о том, что такое аннотации и зачем они нужны, почитайте? + // http://docs.oracle.com/javase/tutorial/java/annotations/ + @Override + public void setGear(int gear) { + gear = 0; + } + +} + +// Интерфейсы +// Синтаксис определения интерфейса: +// <модификатор доступа> interface <имя> extends <базовый интерфейс> { +// // Константы +// // Определение методов. +//} + +// Пример - Еда: +public interface Edible { + // Любой класс, реализующий этот интерфейс, должен реализовать этот метод. + public void eat(); +} + +public interface Digestible { + public void digest(); +} + + +//We can now create a class that implements both of these interfaces +public class Fruit implements Edible, Digestible { + public void eat() { + //... + } + + public void digest() { + //... + } +} + +// В Java Вы можете наследоватьтолько один класс, однако, можете реализовывать +// несколько интерфейсов. Например: +public class ExampleClass extends ExampleClassParent implements InterfaceOne, InterfaceTwo { + public void InterfaceOneMethod() { + + } + + public void InterfaceTwoMethod() { + + } +} + +``` + +## Почитать еще + +Здесь приведены ссылки только для того, чтобы получить общее представление о Java. Гуглите, чтобы найти какие-либо конкретные примеры. + +**Официальные руководства Oracle**: + +* [Java Tutorial Trail from Sun / Oracle](http://docs.oracle.com/javase/tutorial/index.html) + +* [Модификаторы доступа в Java](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html) + +* [Концепции объектно-ориентированного программирования](http://docs.oracle.com/javase/tutorial/java/concepts/index.html): + * [Наследование](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html) + * [Полиморфизм](http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html) + * [Абстракция](http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html) + +* [Исключения](http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html) + +* [Интерфейсы](http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html) + +* [Generics](http://docs.oracle.com/javase/tutorial/java/generics/index.html) + +* [Java Code Conventions](http://www.oracle.com/technetwork/java/codeconv-138413.html) + +**Уроки онлайн** + +* [Learneroo.com - Изучение Java](http://www.learneroo.com) + +* [Codingbat.com](http://codingbat.com/java) + + +**Книги**: + +* [Head First Java](http://www.headfirstlabs.com/books/hfjava/) + +* [Objects First with Java](http://www.amazon.com/Objects-First-Java-Practical-Introduction/dp/0132492660) + +* [Java The Complete Reference](http://www.amazon.com/gp/product/0071606300) + + |