Изучите Java за 10 минут
Java - это высокоуровневый объектно-ориентированный язык программирования, известный своим принципом “напиши один раз, запусти везде”. Этот учебник охватывает возможности Java 21+, помогая быстро изучить основы Java.
1. Написание первой программы на Java
Программы Java организованы в классы. Начнем с простой программы. Создайте файл с именем HelloWorld.java
:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Скомпилируйте и запустите программу:
javac HelloWorld.java
java HelloWorld
Результат будет:
Hello, World!
Эта простая программа демонстрирует базовую структуру Java. Каждая программа Java должна иметь хотя бы один класс, а метод main
является точкой входа.
2. Базовый синтаксис
Синтаксис Java структурирован и следует определенным правилам:
// Это однострочный комментарий
/* Это
многострочный комментарий */
public class BasicSyntax {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
Основные правила синтаксиса в Java:
- Чувствительность к регистру: Java чувствителен к регистру.
Variable
иvariable
отличаются. - Имена классов: Должны начинаться с заглавной буквы и следовать конвенции CamelCase.
- Имена методов: Должны начинаться со строчной буквы и следовать конвенции camelCase.
- Точка с запятой: Каждое выражение должно заканчиваться точкой с запятой
;
. - Фигурные скобки: Блоки кода определяются фигурными скобками
{}
. - Комментарии: Однострочные комментарии используют
//
, многострочные/* */
.
3. Переменные и типы данных
Java является статически типизированным языком, что означает, что вы должны явно объявлять типы переменных.
Правила именования переменных:
- Должны начинаться с буквы, подчеркивания
_
или знака доллара$
. - Могут содержать буквы, цифры, подчеркивания и знаки доллара.
- Не могут быть ключевыми словами Java.
- Должны следовать конвенции camelCase.
Примитивные типы данных Java:
- byte: 8-битное целое число со знаком (-128 до 127)
- short: 16-битное целое число со знаком (-32,768 до 32,767)
- int: 32-битное целое число со знаком (-2^31 до 2^31-1)
- long: 64-битное целое число со знаком (-2^63 до 2^63-1)
- float: 32-битная плавающая точка
- double: 64-битная плавающая точка
- boolean: true или false
- char: 16-битный символ Unicode
public class DataTypes {
public static void main(String[] args) {
// Целочисленные типы
byte age = 25;
short year = 2024;
int population = 1000000;
long distance = 93000000L; // суффикс L для long
// Типы с плавающей точкой
float temperature = 36.5f; // суффикс f для float
double pi = 3.14159265359;
// Логический тип и символ
boolean isActive = true;
char grade = 'A';
// Строка (ссылочный тип)
String name = "Alice";
System.out.println("Name: " + name + ", Age: " + age);
}
}
3.1 Операции со строками
Строки в Java являются объектами, а не примитивными типами:
public class StringExample {
public static void main(String[] args) {
String text = "Java Programming";
System.out.println("Length: " + text.length());
System.out.println("Uppercase: " + text.toUpperCase());
System.out.println("Lowercase: " + text.toLowerCase());
System.out.println("Character at index 0: " + text.charAt(0));
System.out.println("Substring: " + text.substring(0, 4));
System.out.println("Contains 'Java': " + text.contains("Java"));
// Конкатенация строк
String greeting = "Hello, " + "World!";
System.out.println(greeting);
// Форматирование строк
String formatted = String.format("Pi is approximately %.2f", 3.14159);
System.out.println(formatted);
}
}
4. Массивы и коллекции
4.1 Массивы
Массивы хранят несколько значений одного типа:
public class ArrayExample {
public static void main(String[] args) {
// Объявление и инициализация массива
int[] numbers = {1, 2, 3, 4, 5};
String[] fruits = new String[3];
fruits[0] = "apple";
fruits[1] = "banana";
fruits[2] = "orange";
// Доступ к элементам массива
System.out.println("First number: " + numbers[0]);
System.out.println("Array length: " + numbers.length);
// Итерация по массивам
for (int i = 0; i < numbers.length; i++) {
System.out.println("Number " + i + ": " + numbers[i]);
}
// Расширенный цикл for (for-each)
for (String fruit : fruits) {
System.out.println("Fruit: " + fruit);
}
// Многомерные массивы
int[][] matrix = {{1, 2}, {3, 4}, {5, 6}};
System.out.println("Matrix element [1][1]: " + matrix[1][1]);
}
}
4.2 Коллекции
Java Collections Framework предоставляет динамические структуры данных:
import java.util.*;
public class CollectionsExample {
public static void main(String[] args) {
// ArrayList (динамический массив)
ArrayList<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
names.remove("Bob");
System.out.println("Names: " + names);
// HashMap (пары ключ-значение)
HashMap<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);
ages.put("Charlie", 35);
System.out.println("Alice's age: " + ages.get("Alice"));
// HashSet (уникальные элементы)
HashSet<Integer> uniqueNumbers = new HashSet<>();
uniqueNumbers.add(1);
uniqueNumbers.add(2);
uniqueNumbers.add(2); // Дубликат, не будет добавлен
uniqueNumbers.add(3);
System.out.println("Unique numbers: " + uniqueNumbers);
// Итерация по коллекциям
for (String name : names) {
System.out.println("Name: " + name);
}
for (Map.Entry<String, Integer> entry : ages.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
5. Операции и операторы
Java предоставляет различные операторы для разных операций:
- Арифметические операторы:
+
,-
,*
,/
,%
(модуль),++
(инкремент),--
(декремент) - Операторы сравнения:
==
,!=
,>
,<
,>=
,<=
- Логические операторы:
&&
(и),||
(или),!
(не) - Побитовые операторы:
&
,|
,^
,~
,<<
,>>
,>>>
- Операторы присваивания:
=
,+=
,-=
,*=
,/=
,%=
public class OperatorsExample {
public static void main(String[] args) {
int a = 10, b = 3;
// Арифметические операции
System.out.println("Addition: " + (a + b));
System.out.println("Subtraction: " + (a - b));
System.out.println("Multiplication: " + (a * b));
System.out.println("Division: " + (a / b));
System.out.println("Modulus: " + (a % b));
// Инкремент и декремент
System.out.println("Pre-increment: " + (++a));
System.out.println("Post-decrement: " + (b--));
// Операции сравнения
System.out.println("Equal: " + (a == b));
System.out.println("Not equal: " + (a != b));
System.out.println("Greater than: " + (a > b));
// Логические операции
boolean x = true, y = false;
System.out.println("AND: " + (x && y));
System.out.println("OR: " + (x || y));
System.out.println("NOT: " + (!x));
// Операции присваивания
int c = 5;
c += 3; // c = c + 3
System.out.println("After += 3: " + c);
}
}
6. Поток управления
6.1 Условные операторы
public class ConditionalExample {
public static void main(String[] args) {
int score = 85;
// оператор if-else
if (score >= 90) {
System.out.println("Grade: A");
} else if (score >= 80) {
System.out.println("Grade: B");
} else if (score >= 70) {
System.out.println("Grade: C");
} else {
System.out.println("Grade: F");
}
// Тернарный оператор
String result = (score >= 60) ? "Pass" : "Fail";
System.out.println("Result: " + result);
// оператор switch
char grade = 'B';
switch (grade) {
case 'A':
System.out.println("Excellent!");
break;
case 'B':
System.out.println("Good!");
break;
case 'C':
System.out.println("Average");
break;
default:
System.out.println("Invalid grade");
}
}
}
6.2 Циклы
public class LoopExample {
public static void main(String[] args) {
// цикл for
System.out.println("For loop:");
for (int i = 0; i < 5; i++) {
System.out.println("Iteration: " + i);
}
// Расширенный цикл for (for-each)
System.out.println("\nFor-each loop:");
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println("Number: " + num);
}
// цикл while
System.out.println("\nWhile loop:");
int count = 0;
while (count < 3) {
System.out.println("Count: " + count);
count++;
}
// цикл do-while
System.out.println("\nDo-while loop:");
int x = 0;
do {
System.out.println("X: " + x);
x++;
} while (x < 3);
// break и continue
System.out.println("\nBreak and continue:");
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // Выйти из цикла
}
if (i % 2 == 0) {
continue; // Пропустить четные числа
}
System.out.println("Odd number: " + i);
}
}
}
7. Методы (функции)
Методы в Java - это функции, которые принадлежат классам:
public class MethodExample {
// Метод без параметров и без возвращаемого значения
public static void greet() {
System.out.println("Hello, World!");
}
// Метод с параметрами и возвращаемым значением
public static int add(int a, int b) {
return a + b;
}
// Метод с несколькими параметрами
public static String formatName(String firstName, String lastName) {
return firstName + " " + lastName;
}
// Перегрузка метода (одинаковое имя, разные параметры)
public static int multiply(int a, int b) {
return a * b;
}
public static double multiply(double a, double b) {
return a * b;
}
// Переменные аргументы (varargs)
public static int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
public static void main(String[] args) {
greet();
int result = add(5, 3);
System.out.println("Addition result: " + result);
String fullName = formatName("John", "Doe");
System.out.println("Full name: " + fullName);
System.out.println("Multiply integers: " + multiply(4, 5));
System.out.println("Multiply doubles: " + multiply(2.5, 3.0));
System.out.println("Sum of multiple numbers: " + sum(1, 2, 3, 4, 5));
}
}
8. Объектно-ориентированное программирование
8.1 Классы и объекты
public class Person {
// Переменные экземпляра (поля)
private String name;
private int age;
private String email;
// Конструктор
public Person(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
// Конструктор по умолчанию
public Person() {
this("Unknown", 0, "");
}
// Методы-геттеры
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getEmail() {
return email;
}
// Методы-сеттеры
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
if (age >= 0) {
this.age = age;
}
}
public void setEmail(String email) {
this.email = email;
}
// Метод экземпляра
public void introduce() {
System.out.println("Hi, I'm " + name + ", " + age + " years old.");
}
// Метод с логикой
public boolean isAdult() {
return age >= 18;
}
// Метод toString (переопределяя toString Object)
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + ", email='" + email + "'}";
}
public static void main(String[] args) {
// Создание объектов
Person person1 = new Person("Alice", 25, "[email protected]");
Person person2 = new Person();
// Использование методов
person1.introduce();
System.out.println("Is adult: " + person1.isAdult());
person2.setName("Bob");
person2.setAge(17);
person2.setEmail("[email protected]");
System.out.println(person1.toString());
System.out.println(person2.toString());
}
}
Этот всеобъемлющий учебник Java охватывает основные концепции, необходимые для начала работы с программированием на Java. Строгая типизация языка, объектно-ориентированные возможности и обширная стандартная библиотека делают его мощным для создания надежных приложений. Практикуйтесь с этими примерами и экспериментируйте с кодом для углубления понимания концепций программирования на Java.