Java 11 - Новые возможности

Здравствуйте,future Java-программисты! Я рад быть вашим проводником в увлекательном путешествии в мир Java 11. Как某人, кто teaches компьютерную науку уже много лет, я видел countless студентов, которые перешли от complete beginners до уверенных программистов. Так что не волнуйтесь, если вы только才开始 – мы будем идти шаг за шагом, и через некоторое время вы будете писать Java-код, как профессионал!

Java 11 - New Features

Условные операторы 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:

  1. Oracle's official Java documentation
  2. Codecademy's Java course
  3. "Head First Java" book
  4. 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