Java 11 - Новые возможности
Здравствуйте,future Java-программисты! Я рад быть вашим проводником в увлекательном путешествии в мир Java 11. Как某人, кто teaches компьютерную науку уже много лет, я видел countless студентов, которые перешли от complete beginners до уверенных программистов. Так что не волнуйтесь, если вы только才开始 – мы будем идти шаг за шагом, и через некоторое время вы будете писать Java-код, как профессионал!
Условные операторы Java
Давайте начнем с азов. Условные операторы resemble traffic lights в программировании – они направляют поток вашего кода. В Java 11 у нас есть несколько полезных способов управления выполнением нашей программы.
Операторы if-else
Оператор if-else, вероятно, самая распространенная управляющая структура, которую вы будете использовать. Это как принятие решения в реальной жизни. Вот простой пример:
int age = 18;
if (age >= 18) {
System.out.println("Вы можете голосовать!");
} else {
System.out.println("Извините, вам слишком молодо для голосования.");
}
В этом коде мы проверяем, достиг ли переменной age
18 лет или старше. Если да, мы выводим, что这个人 может голосовать. Если нет, мы говорим им, что им слишком молодо. Это так просто!
Операторы switch
Операторы switch полезны, когда у вас есть несколько условий для проверки. Представьте это как более эффективный способ записи нескольких операторов if-else. Java 11 ввел несколько интересных улучшений в операторы switch. Вот пример:
String day = "Monday";
switch (day) {
case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" -> System.out.println(" рабоч");
case "Saturday", "Sunday" -> System.out.println("Выходной");
default -> System.out.println("Недействительный день");
}
Этот оператор switch проверяет переменную day
и выводит, рабоч это будний день или выходной. Синтаксис со стрелкой (->
) нов в Java 11 и делает код более кратким.
Объектно-ориентированное программирование
Объектно-ориентированное программирование (OOP) - это fundamental concept в Java. Это как строительство из LEGO-кирпичиков – вы создаете разные объекты, которые взаимодействуют друг с другом, forming ваш program.
Классы и объекты
Класс resembles план для создания объектов. Вот пример простого класса, представляющего машину:
public class Car {
String make;
String model;
int year;
public void startEngine() {
System.out.println("Vroom! The " + year + " " + make + " " + model + " is starting.");
}
}
Теперь создадим объект из этого класса:
Car myCar = new Car();
myCar.make = "Toyota";
myCar.model = "Corolla";
myCar.year = 2021;
myCar.startEngine();
Когда вы выполните этот код, он выведет: "Vroom! The 2021 Toyota Corolla is starting."
Встроенные классы Java
Java предоставляет rich set встроенных классов, которые упрощают нашу жизнь. Давайте рассмотрим несколько из них:
Класс String
Класс String используется для обработки текста. Вот пример:
String greeting = "Hello, World!";
System.out.println(greeting.length()); // Выводит: 13
System.out.println(greeting.toUpperCase()); // Выводит: HELLO, WORLD!
Класс ArrayList
ArrayList - это динамический массив, который может увеличиваться или уменьшаться по мере необходимости:
import java.util.ArrayList;
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
System.out.println(fruits); // Выводит: [Apple, Banana, Cherry]
Обработка файлов в Java
Обработка файлов crucial для чтения и записи в файлы. Java 11 ввел несколько новых методов, чтобы упростить это:
import java.nio.file.Files;
import java.nio.file.Path;
String content = "Hello, Java 11!";
Path filePath = Path.of("example.txt");
Files.writeString(filePath, content);
String readContent = Files.readString(filePath);
System.out.println(readContent); // Выводит: Hello, Java 11!
Этот код записывает строку в файл и затем читает ее обратно. Методы writeString
и readString
новы в Java 11 и упрощают ввод-вывод файлов.
Ошибки и исключения Java
Ошибки и исключения resemble ямы и неровности на дороге программирования. Java помогает нам обрабатывать их изящно:
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Ой! Вы не можете делить на ноль.");
} finally {
System.out.println("Это всегда выполняется, независимо от ошибки.");
}
Этот код пытается разделить на ноль (что запрещено в математике), перехватывает возникающее исключение и выводит friendly message вместо崩溃.
Многопоточность Java
Многопоточность resemble жонглирование – она позволяет вашей программе выполнять несколько вещей одновременно. Вот простой пример:
class MyThread extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getId() + " Значение " + i);
}
}
}
public class Main {
public static void main(String args[]) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.start();
t2.start();
}
}
Этот код создает два потока, которые выполняются параллельно, каждый выводя свой идентификатор и значение.
Синхронизация Java
Когда несколько потоков доступа к shared resources, нам нужно синхронизировать их, чтобы избежать конфликтов. Это как traffic lights на перекрестке:
class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public int getCount() {
return count;
}
}
Ключевое слово synchronized
обеспечивает, чтобы только один поток мог выполнять метод increment
за один раз.
Сеть Java
Java упрощает создание сетевых приложений. Вот пример простого сервера, который listens для подключений:
import java.net.*;
import java.io.*;
public class SimpleServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("Сервер слушает на порту 8080");
Socket socket = serverSocket.accept();
System.out.println("Клиент подключился");
}
}
Этот сервер слушает на порту 8080 и выводит сообщение, когда клиент подключается.
Коллекции Java
Java Collections resemble разные типы контейнеров для хранения объектов. Давайте рассмотрим несколько из них:
List
import java.util.*;
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
System.out.println(fruits); // Выводит: [Apple, Banana]
Set
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(1); // Дубликат, не будет добавлен
System.out.println(numbers); // Выводит: [1, 2]
Map
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);
System.out.println(ages.get("Alice")); // Выводит: 25
Интерфейсы Java
Интерфейсы resemble контракты, которые классы могут同意 выполнять. Вот пример:
interface Animal {
void makeSound();
}
class Dog implements Animal {
public void makeSound() {
System.out.println("Woof!");
}
}
class Cat implements Animal {
public void makeSound() {
System.out.println("Meow!");
}
}
Both Dog
и Cat
implement интерфейс Animal
, agreeing to provide a makeSound
method.
Структуры данных Java
Структуры данных это ways of organizing и хранения данных. Давайте рассмотрим пример простого связного списка:
class Node {
int data;
Node next;
Node(int d) { data = d; }
}
class LinkedList {
Node head;
public void add(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
} else {
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
}
public void print() {
Node current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
}
public class Main {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);
list.print(); // Выводит: 1 2 3
}
}
Этот код реализует простую структуру данных связного списка.
Алгоритмы работы с коллекциями Java
Java предоставляет许多 полезные алгоритмы для работы с коллекциями. Вот пример сортировки:
import java.util.*;
List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5));
Collections.sort(numbers);
System.out.println(numbers); // Выводит: [1, 1, 2, 3, 4, 5, 5, 6, 9]
Продвинутые концепции Java
По мере вашего прогресса, вы встретите более сложные концепции Java. Одна из таких концепций - lambda expressions, введенные в Java 8 и улучшенные в Java 11:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(n -> System.out.println(n * 2));
Этот код использует lambda expression для умножения каждого числа на 2 и вывода его.
Разное в Java
Java 11 ввел несколько miscellaneious функций. Одна из них - keyword var
для local variable type inference:
var message = "Hello, Java 11!";
System.out.println(message);
Компилятор infers, что message
это String.
API и фреймворки Java
Java имеет vast ecosystem API и фреймворков. Один popular фреймворк - Spring Boot. Вот пример простого "Hello World" Spring Boot приложения:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class HelloWorldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication.class, args);
}
@GetMapping("/")
public String hello() {
return "Hello, World!";
}
}
Это создает веб-приложение, которое отвечает "Hello, World!" при посещении корневого URL.
Ссылки на классы Java
Java позволяет получить ссылки на классы во время выполнения. Вот пример:
Class<?> stringClass = String.class;
System.out.println(stringClass.getName()); // Выводит: java.lang.String
Полезные ресурсы для изучения Java
Here are some useful resources for learning Java:
- Oracle's official Java documentation
- Codecademy's Java course
- "Head First Java" book
- Stack Overflow for asking questions
Новые функции
Java 11 introduced several new features. Here's a table summarizing some of them:
Feature | Description |
---|---|
Local-Variable Syntax for Lambda Parameters | Allows var in lambda expressions |
HTTP Client (Standard) | Standardized HTTP client API |
Launch Single-File Source-Code Programs | Run Java source files directly |
String Methods | New methods like isBlank() , lines() , strip() , etc. |
Files Methods | New methods like readString() , writeString()
|
That's it for our whirlwind tour of Java 11! Remember, learning to code is like learning a new language – it takes practice, patience, and perseverance. Don't be discouraged if you don't understand everything right away. Keep coding, keep experimenting, and most importantly, keep having fun! Before you know it, you'll be writing complex Java applications and wondering how it all seemed so difficult at first. Happy coding!
Credits: Image by storyset