- Введение
- Создать новый Project
- Виды примитивных данных (Primitive Data Types)
- Переменная (Variable)
- Управление потоком программы (Control flow)
- Массив в Java (Array)
- Class, объект и конструктор (Class, Instance, Constructor)
- Поле (Field)
- Метод (Method)
- Наследственность в Java
- Инструкция запроса используя Javadoc
Быстрое изучение Java для начинающих
2. Создать новый Project
Сначала мы создаем новый Project, он будет использоваться в данной инструкции.
Введите название project:
- BasicJavaTutorial
Это изображение созданного Project:
Примечание: Чтобы можно было писать другими языками помимо английского в Project, вам нужно поменять кодирование на UTF8.
Нажмите на правую кнопку мыши в Project выберите Properties:
3. Виды примитивных данных (Primitive Data Types)
Имеется 8 видов примитвных данных (primitive data) в JAVA:
- Для целого числа есть 4 вида: byte, short, int, long
- Вид настоящих данных есть : float, double
- Вид символа: char
- Логический вид: возвращает значение true или false (правильно или неправильно)
Type | Description | bit | Min value | Max value |
byte | 8 bit integer number | 8 | -128 (-2^7) | 127 (2^7-1) |
short | 16 bit integer number | 16 | -32,768 (-2^15) | 32,767 (2^15 -1) |
int | 32 bit integer number | 32 | - 2,147,483,648
(-2^31) | 2,147,483,647
(2^31 -1) |
long | 64 bit integer number | 64 | -9,223,372,036,854,775,808
(-2^63) | 9,223,372,036,854,775,807
(2^63 -1) |
float | 32 bit real number | 32 | -3.4028235 x 10^38 | 3.4028235 x 10^38 |
double | 64 bit real number | 64 | -1.7976931348623157 x 10^308 | 1.7976931348623157 x 10^308 |
boolean | Logic type | false | true | |
char | Character type | 16 | '\u0000' (0) | '\uffff' (65,535). |
See more details:
4. Переменная (Variable)
Нажмите на правую кнопку мыши в src выберите "New/Package":
Назовите package:
- org.o7planning.tutorial.javabasic.variable
Введите название класса:
- VariableExample1
Класс VariableExample1 создан:
Изменить код класса VariableExample1:
VariableExample1.java
package org.o7planning.tutorial.javabasic.variable;
public class VariableExample1 {
public static void main(String[] args) {
// Объявить переменную, с целым числом 32 bit. (RU)
int firstNumber;
// Прикрепить значение для firstNumber
firstNumber = 10;
System.out.println("First Number =" + firstNumber);
// Объявить действительное число 32 bit (float)
// Этому числу прикреплено значение 10.2
// Буква f в конце помогает java понять это вид float.
float secondNumber = 10.2f;
System.out.println("Second Number =" + secondNumber);
// Объявить действительное число 64 bit
// Этому числу прикреплено значение 10.2
// Буква d в конце помогает java понять это вид double. Отличается от вида
// float.
double thirdNumber = 10.2d;
System.out.println("Third Number =" + thirdNumber);
// Объявить вид символа
char ch = 'a';
System.out.println("Char ch= " + ch);
}
}
Запустить класс VariableExample1:
Нажать на правую кнопку мыши на класс VariableExample1 выбрать "Run As/Java Application":
Результаты запуска класса для просмотра на Console:
Вы так же можете объявить несколько переменные одновременно, следующий пример иллюстрирует это:
Создать новый класс VariableExample2
VariableExample2.java
package org.o7planning.tutorial.javabasic.variable;
public class VariableExample2 {
public static void main(String[] args) {
// Объявить 3 числа вида long (Целое число 64 bit).
long firstNumber, secondNumber, thirdNumber;
// Прикрепить значение для firstNumber
// Символ 'L' в конце, чтобы сказать java это вид long,
// отличается от вида int.
firstNumber = 100L;
// Прикрепить значение для secondNumber
secondNumber = 200L;
// Прикрепить значение для thirdNumber.
thirdNumber = firstNumber + secondNumber;
System.out.println("First Number = " + firstNumber);
System.out.println("Second Number = " + secondNumber);
System.out.println("Third Number = " + thirdNumber);
}
}
Результаты запуска класса VariableExample2:
First Number = 100
Second Number = 200
Third Number = 300
5. Управление потоком программы (Control flow)
Команда if - else
Структура команды if - else является:
if(condition 1) {
// Сделать что-то здесь
}else if(condition 2) {
// Сделать что-то здесь
}else if(condition 3) {
// Сделать что-то здесь
}
// Наоборот
//
else {
// Сделать что-то здесь
}
Создать class ElseIfExample1:
ElseIfExample1.java
package org.o7planning.tutorial.javabasic.controlflow;
public class ElseIfExample1 {
public static void main(String[] args) {
// Объявить число вида int (Целое число 32 bit)
// Представляющее вашу тестовую оценку (score)
int score = 20;
System.out.println("Your score =" + score);
// Если оценка меньше 50
if (score < 50) {
System.out.println("You are not pass");
}
// Наоборот если score больше или равна 50 и меньше 80.
else if (score >= 50 && score < 80) {
System.out.println("You are pass");
}
// В остальных случаях (То есть больше или равна 80)
else {
System.out.println("You are pass, good student!");
}
}
}
Результаты запуска класса ElseIfExample1:
Your score =20
You are not pass
Изменить значение переменной "score" в примере выше и перезапустать класс ElseIfExample1:
int score = 60;
Your score =60
You are pass
Обычные операторы
- > Больше
- < Меньше
- >= Больше или равно
- <= Меньше или равно
- && и
- || или
- == Сравнить с
- != Сравнить разницу
- ! Отрицание
Создать класс ElseIfExample2
ElseIfExample2.java
package org.o7planning.tutorial.javabasic.controlflow;
public class ElseIfExample2 {
public static void main(String[] args) {
// Объявить переменную вида int, представляющую ваш возраст.
int age = 20;
// Проверить возраст менее или равен 17
if (age <= 17) {
System.out.println("You are 17 or younger");
}
// Проверить возраст равен 18
else if (age == 18) {
System.out.println("You are 18 year old");
}
// Проверить возраст старше 18 и менее 40
else if (age > 18 && age < 40) {
System.out.println("You are between 19 and 39");
}
// В остальных случаях (Старше или равен 40)
else {
// Команда 'if' вплетена внутри.
// Проверяет возраст неравный 50.
if (age != 50) {
System.out.println("You are not 50 year old");
}
// Команда отрицает возраст равен 50, значит неравен 50.
if (!(age == 50)) {
System.out.println("You are not 50 year old");
}
// Если возраст является 60 или 70
if (age == 60 || age == 70) {
System.out.println("You are 60 or 70 year old");
}
}
}
}
Вы можете изменить значение "age" и запустить класс ElseIfExample2 и посмотреть результаты
Значение boolean
boolean это вид данных, имеющий только 2 значения true или false (Правильно или неправильно).
Create class BooleanExample:
BooleanExample.java
package org.o7planning.tutorial.javabasic.controlflow;
public class BooleanExample {
public static void main(String[] args) {
// Объявить переменную вида boolean
boolean value = true;
// Если value является true
if (value == true) {
System.out.println("It's true");
}
// Наоборо
else {
System.out.println("It's false");
}
// С видом boolean, вы так же можете написать
// With boolean type, you can also write
if (value) {
System.out.println("It's true");
}
// Наоборот
else {
System.out.println("It's false");
}
}
}
Команда switch- case -default
Это так же является команда из ветки схожей с if-else представленной выше.
// variable_to_test: Переменная для проверки.
switch ( variable_to_test ) {
case value1:
// Сделать что-то здесь ...
break;
case value2:
// Сделать что-то здесь ...
break;
default:
// Сделать что-то здесь ...
}
SwitchExample1.java
package org.o7planning.tutorial.javabasic.controlflow;
public class SwitchExample1 {
public static void main(String[] args) {
// Объявить переменную age (возраст)
int age = 20;
// Проверить значение age
switch (age) {
// Если возраст равен 18
case 18:
System.out.println("You are 18 year old");
break;
// Если возраст равен 20
case 20:
System.out.println("You are 20 year old");
break;
// Остальные случаи
default:
System.out.println("You are not 18 or 20 year old");
}
}
}
Результаты запуска класса SwitchExample1:
You are 20 year old
Заметьте, что с командой case должно быть определенное значение вы не можете сделать следующее:
// Это не позволено!!
case (age < 18) :
// case только принимает опредленное значение, например:
case 18:
// Сделать что-то здесь ...
break;
Смотрите другой пример:
SwitchExample2.java
package org.o7planning.tutorial.javabasic.controlflow;
public class SwitchExample2 {
public static void main(String[] args) {
// Объявить переменную age (возраст)
int age = 30;
// Проверить значение age.
switch (age) {
// Если возраст равен 18
case 18:
System.out.println("You are 18 year old");
break;
// В случаяъ 20, 30, 40 лет.
case 20:
case 30:
case 40:
System.out.println("You are " + age);
break;
// Остальные случаи
default:
System.out.println("Other age");
}
}
}
Результаты запуска примера:
You are 30
Цикл for
Это структура цикла:
// start_value: Начинающее значение
// end_value: Завершающее значение
// increment_number: Значение увеличивается после каждого повторения.
for ( start_value; end_value; increment_number ) {
// Сделать что-то здесь ...
}
Рассмотрим изображенный пример:
ForLoopExample1.java
package org.o7planning.tutorial.javabasic.loop;
public class ForLoopExample1 {
public static void main(String[] args) {
// Объявляет переменную 'step', описывающую шаг цикла (Какой цикл)
int step = 1;
// Объявляет переменную 'value' с начинающим значением 0
// После каждого повторения 'value' прибавляет 3
// И цикл завершится когда 'value' больше или равен 10
for (int value = 0; value < 10; value = value + 3) {
System.out.println("Step =" + step + " value = " + value);
// Увеличить значение 'step' на 1, после повторения
step = step + 1;
}
}
}
Результаты запуска класса ForLoopExample1:
Step =1 value = 0
Step =2 value = 3
Step =3 value = 6
Step =4 value = 9
Смотрите другой пример, посчитать сумму чисел от 1 до 100:
ForLoopExample2.java
package org.o7planning.tutorial.javabasic.loop;
public class ForLoopExample2 {
// Это пример подсчета суммы от 1 до 100,
// и распечатать результат на экране.
public static void main(String[] args) {
// Объявить переменную
int total = 0;
// Объявить переменную 'value'
// Прикрепить начинающее значение 1
// После каждого повторения значение увеличивается на 1.
// Примечание: value++ индентично команде: value = value + 1;
// value-- индентично команде: value = value - 1;
for (int value = 1; value <= 100; value++) {
// Прикрепить значение 'total' старым значением добавляя 'value'.
total = total + value;
}
System.out.println("Total = " + total);
}
}
Результаты:
Total = 5050
Цикл while
Это структура цикла while:
// Когда condition (условие) правильное, то сделать что-то.
while ( condition ) {
// Сделать что-то здесь...
}
Смотрите изображенный пример:
WhileExample1.java
package org.o7planning.tutorial.javabasic.loop;
public class WhileExampe1 {
public static void main(String[] args) {
int value = 3;
// Когда 'value' еще меньше 10, то цикл продолжает работать.
while (value < 10) {
System.out.println("Value = " + value);
// Увеличить значение value на 2 единицы
value = value + 2;
}
}
}
Value = 3
Value = 5
Value = 7
Value = 9
Цикл do-while
Это структура цикла do-while:
// Цикл do-while делает минимум 1 повтор (iteration)
// и когда условие остается верным, то он работает дальше.
do {
// Сделать что-то здесь.
}
while (condition);
Изображенный пример:
DoWhileExample1.java
package org.o7planning.tutorial.javabasic.loop;
public class DoWhileExample1 {
public static void main(String[] args) {
int value = 3;
// Цикл do-while всегда выполняется минимум 1 раз.
//
do {
System.out.println("Value = " + value);
// Увеличить значение 'value' на 3
value = value + 3;
} while (value < 10);
}
}
Результат:
Value = 3
Value = 6
Value = 9
6. Массив в Java (Array)
Что такое массив?
An array is a list of the elements are arranged adjacent to each other in memory.
Let's see, a array with 5 elements, int type.
Работа с массивом
Как объявить массив в Java.
// Объявить массив, не определяя количество элементов.
int[] array1;
// Объявить массив с 100 элементами
// Элементам еще не прикреплено определенное значение
array1 = new int[100];
// Объявить массив, определяя точное количество элементов.
// Элементам еще не прикреплено определенное значение
double[] array2 = new double[10];
// Объявить массив с элементами, к которым прикреплены определенные значения.
// Массив имеет 4 элемента
long[] array3= {10L, 23L, 30L, 11L};
Посмотрим пример:
ArrayExample1.java
package org.o7planning.tutorial.javabasic.array;
public class ArrayExample1 {
public static void main(String[] args) {
// Объявить массив с 5 элементами
int[] myArray = new int[5];
// Примечание: первый элемент массива имеет индекс 0:
// Прикрепить значение первому элементу (Индекс 0)
myArray[0] = 10;
// Прикрепить значение второму элементу (Индекс 1)
myArray[1] = 14;
myArray[2] = 36;
myArray[3] = 27;
// Прикрепить значение 5-му элементу (Последний элемент в массиве)
myArray[4] = 18;
// Распечатать на экране Console количество элементов массива.
System.out.println("Array Length=" + myArray.length);
// Распечатать элемент индекса 3 (4-ый элемент в массиве)
System.out.println("myArray[3]=" + myArray[3]);
// Использовать цикл for, чтобы распечатать элементы в массиве.
for (int index = 0; index < myArray.length; index++) {
System.out.println("Element " + index + " = " + myArray[index]);
}
}
}
Результат:
Array Length=5
myArray[3]=27
Element 0 = 10
Element 1 = 14
Element 2 = 36
Element 3 = 27
Element 4 = 18
Пример изображает использоватние цикла для прикрепления значений элементам:
ArrayExample2.java
package org.o7planning.tutorial.javabasic.array;
public class ArrayExample2 {
public static void main(String[] args) {
// Объявить массив с 5-ю элементами
int[] myArray = new int[5];
// Распечатать на экране Console количество элементов массива.
System.out.println("Array Length=" + myArray.length);
// Использовать цикл for чтобы прикрепить значение для элементов массива.
for (int index = 0; index < myArray.length; index++) {
myArray[index] = 100 * index * index + 3;
}
// Распечатать на экране Console элемент индекса 3
System.out.println("myArray[3] = " + myArray[3]);
}
}
Результат:
Array Length=5
myArray[3] = 903
7. Class, объект и конструктор (Class, Instance, Constructor)
Вам нужно различать 3 понятия
- Класс
- Конструктор (Constructor)
- Объект (Instance)
Когда мы говорим про Дерево, то это что-то абстрактное, является классом (class). Но когда мы указываем на определенное дерево то это точно объект (object) (Такж е называется экземпляром (instance) )
Или когда мы говорим о человеке (Person) это так же асбтракто, является классом. Но когда указывается на вас или меня, то это 2 разных объекта, в одном классе Люди
Person.java
package org.o7planning.tutorial.javabasic.javastructure;
public class Person {
// Это поле (Field).
// Хранит имя человека.
public String name;
// Это Constructor (Конструктор)
// Использовать его для инициализации объекта.
// Этот Constructor имеет один параметр.
// Constructor всегда имеет название одинаковое с названием класса.
public Person(String persionName) {
// Прикрепить значение из параметра в поле name.
this.name = persionName;
}
// Это метод, возвращающий вид String.
public String getName() {
return this.name;
}
}
Person class has no main method. TestPerson class is initialized instance of the Person object via the constructor
PersonTest.java
package org.o7planning.tutorial.javabasic.javastructure;
public class PersonTest {
public static void main(String[] args) {
// Создать объект из класса Person
// Инициализировать этот объект из Constructor класса Person
Person edison = new Person("Edison");
// Класс Person имеет метод getName()
// Использует объект для вызова метода getName():
String name = edison.getName();
System.out.println("Person 1: " + name);
// Создать объект из класса Person.
// Инициализировать данный объект из структуры класса Person
Person billGate = new Person("Bill Gates");
// Класс Person имеет поле name, которое является публичным (public)
// Использует объект для ссылки на него.
String name2 = billGate.name;
System.out.println("Person 2: " + name2);
}
}
Results of running the example:
Person 1: Edison
Person 2: Bill Gates
8. Поле (Field)
In this section we will discuss some of the concepts:
Field
- Normal field
- static Field
- final Field
- static final Field
See an example with the field and static fields.
FieldSample.java
package org.o7planning.tutorial.javabasic.javastructure;
public class FieldSample {
// Это статическое поле (static field).
public static int MY_STATIC_FIELD = 100;
// Это обычное поле.
public String myValue;
// Constructor для инициализации объекта FieldSample.
public FieldSample(String myValue) {
this.myValue = myValue;
}
}
FieldSampleTest.java
package org.o7planning.tutorial.javabasic.javastructure;
public class FieldSampleTest {
public static void main(String[] args) {
// Создать первый объект.
FieldSample obj1 = new FieldSample("Value1");
System.out.println("obj1.myValue= " + obj1.myValue);
// Распечатать значение статического поля MY_STATIC_FIELD.
// Ссылка через объект (Не рекомендуется).
System.out.println("obj1.MY_STATIC_FIELD= " + obj1.MY_STATIC_FIELD);
// Распечатать значение статического поля - MY_STATIC_FIELD.
// Со статическими полями, можно получить доступ к нему через класс.
// (Не рекомендуется этот способ).
System.out.println("FieldSample.MY_STATIC_FIELD= " + FieldSample.MY_STATIC_FIELD);
// Создать 2-ой объект:
FieldSample obj2 = new FieldSample("Value2");
System.out.println("obj2.myValue= " + obj2.myValue);
System.out.println("obj2.MY_STATIC_FIELD= " + obj2.MY_STATIC_FIELD);
System.out.println(" ------------- ");
// Статическое поле используется для всех объектов одного класса.
// Прикрепить новое значение статическому полю MY_STATIC_FIELD.
// (Можно использовать способ: FieldSample.MY_STATIC_FIELD = 200)
obj1.MY_STATIC_FIELD = 200;
// Здесь распечатается значение 200.
System.out.println("obj2.MY_STATIC_FIELD= " + obj2.MY_STATIC_FIELD);
}
}
Results of running the example:
obj1.myValue= Value1
obj1.MY_STATIC_FIELD= 100
FieldSample.MY_STATIC_FIELD= 100
obj2.myValue= Value2
obj2.MY_STATIC_FIELD= 100
-------------
obj2.MY_STATIC_FIELD= 200
The final field is the field that can not assign a new value to it, it's like a constant.
FinalFieldExample.java
package org.o7planning.tutorial.javabasic.javastructure;
public class FinalFieldExample {
// Поле final (Финальное).
// Поле final не позволяет прикреплять новое значение.
public final int myValue = 100;
// Статическое поле и final.
// Поле final не позволяет прикреплять новое значение.
public static final long MY_LONG_VALUE = 1234L;
}
9. Метод (Method)
Method
- Method.
- static Method
- final Method. (Will be mentioned in the inheritance of the class).
MethodSample.java
package org.o7planning.tutorial.javabasic.javastructure;
public class MethodSample {
public String text = "Some text";
// Constructor по умолчанию.
public MethodSample() {
}
// Это метод, возвращающий вид String.
// Данный метод не имеет параметра
public String getText() {
return this.text;
}
// Это метод с 1 параметром String.
// Этот метод возвращает вид void (Или называется ничего не возвращает)
public void setText(String text) {
// this.text ссылается к полю text.
// отличается от параметра text.
this.text = text;
}
// Это статический метод.
// Возвращает вид int, имеет 3 параметра.
public static int sum(int a, int b, int c) {
int d = a + b + c;
return d;
}
}
MethodSampleTest.java
package org.o7planning.tutorial.javabasic.javastructure;
public class MethodSampleTest {
public static void main(String[] args) {
// Создать объект MethodSample
MethodSample obj = new MethodSample();
// Вызвать метод getText()
String text = obj.getText();
System.out.println("Text = " + text);
// Вызвать метод setText(String)
obj.setText("New Text");
System.out.println("Text = " + obj.getText());
// Статический метод может быть вызван через класс.
// Этот способ рекомендуется для использования. (**)
int sum = MethodSample.sum(10, 20, 30);
System.out.println("Sum 10,20,30= " + sum);
// Или вызывается через объект.
// Этот способ не рекомендуется . (**)
int sum2 = obj.sum(20, 30, 40);
System.out.println("Sum 20,30,40= " + sum2);
}
}
Text = Some text
Text = New Text
Sum 10,20,30= 60
Sum 20,30,40= 90
10. Наследственность в Java
Java allows classes which extend from other class. Class extends another class called subclasses. Subclasses have the ability to inherit the fields and methods from the parent class.
Animal.java
package org.o7planning.tutorial.javabasic.inheritance;
public class Animal {
public Animal() {
}
public void move() {
System.out.println("Move ...!");
}
// Звук данного животного.
public void say() {
System.out.println("<nothing>");
}
}
Cat.java
package org.o7planning.tutorial.javabasic.inheritance;
public class Cat extends Animal {
// Переопределить (override) метод класса Animal.
public void say() {
System.out.println("Meo");
}
}
Dog.java
package org.o7planning.tutorial.javabasic.inheritance;
public class Dog extends Animal {
// Переопределить (override) метод класса Animal.
public void say() {
System.out.println("Go");
}
}
Ant.java
package org.o7planning.tutorial.javabasic.inheritance;
// Муравей
public class Ant extends Animal {
}
AnimalTest.java
package org.o7planning.tutorial.javabasic.inheritance;
public class AnimalTest {
public static void main(String[] args) {
// Объявить объект Cat.
Cat cat = new Cat();
// Проверить является ли 'cat' объектом Animal или нет.
// Результат точно true.
boolean isAnimal = cat instanceof Animal;
System.out.println("cat instanceof Animal?" + isAnimal);
// ==> Meo
// Вызывается метод say() Cat.
cat.say();
// Объявить объект Animal.
// Инициализировать объект через Constructor у Cat.
Animal cat2 = new Cat();
// ==> Meo
// Метод say() Cat вызывается(а не у Animal).
cat2.say();
// Создать объект Animal.
// Через constructor подкласса, Ant.
Animal ant = new Ant();
// Ant не имеет методsay()
// ==> Вызывается метод say(), унаследованный от родительского класса (Animal).
ant.say();
}
}
Results of running the example:
cat instanceof Animal?true
Meo
Meo
<nothing>
Java Basic
- Настройте java compiler для обработки вашего Annotation (Annotation Processing Tool)
- Программирование на Java для группы с помощью Eclipse и SVN
- Руководство Java WeakReference
- Руководство Java PhantomReference
- Сжатие и декомпрессия в Java
- Настройка Eclipse для использования JDK вместо JRE
- Методы String.format() и printf() в Java
- Синтаксис и новые функции в Java 8
- Регулярные выражения Java
- Руководство Java Multithreading Programming
- Библиотеки Java JDBC Driver для различных типов баз данных
- Руководство Java JDBC
- Получить значения столбцов, автоматически возрастающих при вставлении (Insert) записи, используя JDBC
- Руководство Java Stream
- Руководство Java Functional Interface
- Введение в Raspberry Pi
- Руководство Java Predicate
- Абстрактный класс и Interface в Java
- Модификатор доступа (Access modifiers) в Java
- Руководство Java Enum
- Руководство Java Annotation
- Сравнение и Сортировка в Java
- Руководство Java String, StringBuffer и StringBuilder
- Обработка исключений Java - Java Exception Handling
- Руководство Java Generics
- Манипулирование файлами и каталогами в Java
- Руководство Java BiPredicate
- Руководство Java Consumer
- Руководство Java BiConsumer
- Что мне нужно для начала работы с Java?
- История Java и разница между Oracle JDK и OpenJDK
- Установить Java в Windows
- Установите Java в Ubuntu
- Установите OpenJDK в Ubuntu
- Установить Eclipse
- Установите Eclipse в Ubuntu
- Быстрое изучение Java для начинающих
- История бит и байтов в информатике
- Типы данных в java
- Битовые операции
- Команда if else в Java
- команды switch в Java
- Циклы в Java
- Массивы (Array) в Java
- JDK Javadoc в формате CHM
- Наследование и полиморфизм в Java
- Руководство Java Function
- Руководство Java BiFunction
- Пример Java encoding и decoding с использованием Apache Base64
- Руководство Java Reflection
- Java Удаленный вызов методов - Java RMI
- Руководство Программирование Java Socket
- Какую платформу я должен выбрать для разработки приложений Java Desktop?
- Руководство Java Commons IO
- Руководство Java Commons Email
- Руководство Java Commons Logging
- Понимание Java System.identityHashCode, Object.hashCode и Object.equals
- Руководство Java SoftReference
- Руководство Java Supplier
- Аспектно-ориентированное программирование Java с помощью AspectJ (AOP)
Show More
- Руководства Java Servlet/JSP
- Руководства Java Collections Framework
- Java API для HTML, XML
- Руководства Java IO
- Руководства Java Date Time
- Руководства Spring Boot
- Руководства Maven
- Руководства Gradle
- Руководства Java Web Services
- Руководства Java SWT
- Руководства JavaFX
- Руководства Oracle Java ADF
- Руководства Struts2 Framework
- Руководства Spring Cloud