Java 11 - Các Tính Năng Mới

Xin chào các bạn học lập trình Java! Tôi rất vui được làm hướng dẫn viên cho bạn trong hành trình đầy.exciting vào thế giới của Java 11. Là một ai đó đã dạy khoa học máy tính trong nhiều năm, tôi đã chứng kiến hàng trăm sinh viên từ những người mới bắt đầu trở thành những người lập trình tự tin. Vậy nên, đừng lo lắng nếu bạn đang bắt đầu từ con số không - chúng ta sẽ cùng nhau đi từng bước, và sooner or later, bạn sẽ viết mã Java như một chuyên gia!

Java 11 - New Features

Các Lệnh Điều Khiển

Hãy bắt đầu từ những điều cơ bản. Các lệnh điều khiển giống như đèn giao thông trong lập trình - chúng hướng dẫn luồng mã của bạn. Trong Java 11, chúng ta có một số cách hay để điều khiển việc thực thi chương trình của mình.

Lệnh If-Else

Lệnh if-else có lẽ là cấu trúc điều khiển phổ biến nhất bạn sẽ sử dụng. Nó giống như việc ra quyết định trong cuộc sống thực. Dưới đây là một ví dụ đơn giản:

int age = 18;
if (age >= 18) {
System.out.println("Bạn có thể đi bầu!");
} else {
System.out.println("Xin lỗi, bạn quá trẻ để đi bầu.");
}

Trong đoạn mã này, chúng ta đang kiểm tra xem biến age có lớn hơn hoặc bằng 18 hay không. Nếu có, chúng ta in rằng người đó có thể đi bầu. Nếu không, chúng ta nói với họ rằng họ quá trẻ. Đó là tất cả!

Lệnh Switch

Lệnh switch rất hữu ích khi bạn có nhiều điều kiện cần kiểm tra. Hãy nghĩ đến nó như một cách hiệu quả hơn để viết nhiều lệnh if-else. Java 11 đã giới thiệu một số cải tiến thú vị cho lệnh switch. Dưới đây là một ví dụ:

String day = "Monday";
switch (day) {
case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" -> System.out.println("Ngày thường");
case "Saturday", "Sunday" -> System.out.println("Cuối tuần");
default -> System.out.println("Ngày không hợp lệ");
}

Lệnh switch này kiểm tra biến day và in ra xem nó là ngày thường hay cuối tuần. Cú pháp mũi tên (->) là mới trong Java 11 và làm cho mã trở nên ngắn gọn hơn.

Lập Trình Hướng Đối Tượng (OOP)

Lập trình Hướng Đối Tượng (OOP) là một khái niệm cơ bản trong Java. Nó giống như việc xây dựng bằng các khối LEGO - bạn tạo ra các đối tượng khác nhau để tương tác với nhau để hình thành chương trình của bạn.

Các Lớp và Đối Tượng

Một lớp giống như một bản vẽ cho tạo ra các đối tượng. Dưới đây là một lớp đơn giản đại diện cho một chiếc xe:

public class Car {
String make;
String model;
int year;

public void startEngine() {
System.out.println("Vroom! The " + year + " " + make + " " + model + " is starting.");
}
}

Bây giờ, hãy tạo một đối tượng từ lớp này:

Car myCar = new Car();
myCar.make = "Toyota";
myCar.model = "Corolla";
myCar.year = 2021;
myCar.startEngine();

Khi bạn chạy đoạn mã này, nó sẽ in ra: "Vroom! The 2021 Toyota Corolla is starting."

Các Lớp Ngoại Trừ của Java

Java cung cấp một bộ các lớp内置 để làm cho cuộc sống của chúng ta dễ dàng hơn. Hãy xem xét một số trong số chúng:

Lớp String

Lớp String được sử dụng để manipulates văn bản. Dưới đây là một ví dụ:

String greeting = "Hello, World!";
System.out.println(greeting.length());  // In ra: 13
System.out.println(greeting.toUpperCase());  // In ra: HELLO, WORLD!

Lớp ArrayList

ArrayList là một mảng động có thể tăng hoặc giảm kích thước khi cần:

import java.util.ArrayList;

ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
System.out.println(fruits);  // In ra: [Apple, Banana, Cherry]

Xử lý Tệp trong Java

Xử lý tệp là rất quan trọng để đọc và ghi dữ liệu vào tệp. Java 11 đã giới thiệu một số phương thức mới để làm cho điều này dễ dàng hơn:

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);  // In ra: Hello, Java 11!

Đoạn mã này ghi một chuỗi vào tệp và sau đó đọc nó lại. Các phương thức writeStringreadString là mới trong Java 11 và làm cho việc입출력 tệp trở nên đơn giản hơn.

Lỗi và ngoại lệ trong Java

Lỗi và ngoại lệ giống như những vết lồi lõm trên con đường lập trình. Java giúp chúng ta xử lý chúng một cách thanh lịch:

try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Oops! Bạn không thể chia cho không.");
} finally {
System.out.println("Điều này luôn chạy, có lỗi hay không.");
}

Đoạn mã này cố gắng chia cho không (điều không được phép trong toán học), bắt ngoại lệ phát sinh và in ra một thông báo thân thiện thay vì bị crash.

Lập Trình song song trong Java

Lập trình song song giống như việc chơi xiếc - nó cho phép chương trình của bạn làm nhiều việc cùng một lúc. Dưới đây là một ví dụ đơn giản:

class MyThread extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getId() + " Giá trị " + i);
}
}
}

public class Main {
public static void main(String args[]) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.start();
t2.start();
}
}

Đoạn mã này tạo hai luồng chạy đồng thời, mỗi luồng in ra ID của luồng và một giá trị.

Đồng bộ hóa trong Java

Khi nhiều luồng truy cập vào cùng một tài nguyên, chúng ta cần đồng bộ hóa chúng để tránh xung đột. Điều này giống như việc có đèn giao thông tại giao lộ:

class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public int getCount() {
return count;
}
}

Từ khóa synchronized đảm bảo rằng chỉ một luồng có thể thực thi phương thức increment tại một thời điểm.

Mạng trong Java

Java làm cho việc tạo các ứng dụng mạng trở nên dễ dàng. Dưới đây là một ví dụ về một máy chủ đơn giản lắng nghe các kết nối:

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("Máy chủ đang lắng nghe trên cổng 8080");
Socket socket = serverSocket.accept();
System.out.println("Khách hàng đã kết nối");
}
}

Máy chủ này lắng nghe trên cổng 8080 và in ra một thông báo khi một khách hàng kết nối.

Các Bộ Sưu Tập trong Java

Các bộ sưu tập trong Java là các loại容器 khác nhau để lưu trữ các đối tượng. Hãy xem xét một số:

List

import java.util.*;

List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
System.out.println(fruits);  // In ra: [Apple, Banana]

Set

Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(1);  // Trùng lặp, sẽ không được thêm vào
System.out.println(numbers);  // In ra: [1, 2]

Map

Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);
System.out.println(ages.get("Alice"));  // In ra: 25

Các Giao Diện trong Java

Các giao diện giống như các hợp đồng mà các lớp có thể đồng ý tuân theo. Dưới đây là một ví dụ:

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!");
}
}

Cả DogCat triển khai giao diện Animal, đồng ý cung cấp phương thức makeSound.

Các Cấu Trúc Dữ Liệu trong Java

Các cấu trúc dữ liệu là các cách tổ chức và lưu trữ dữ liệu. Hãy xem xét một liên kết đơn giản:

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();  // In ra: 1 2 3
}
}

Đoạn mã này triển khai một cấu trúc dữ liệu liên kết đơn giản.

Các Algorithm trong Java Collections

Java cung cấp nhiều algorithm hữu ích cho việc làm việc với các bộ sưu tập. Dưới đây là một ví dụ về việc sắp xếp:

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);  // In ra: [1, 1, 2, 3, 4, 5, 5, 6, 9]

Java Cấp cao

Khi bạn tiến hóa, bạn sẽ gặp phải nhiều khái niệm Java cấp cao hơn. Một trong những khái niệm như vậy là lambda expressions, được giới thiệu trong Java 8 và được cải thiện trong Java 11:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(n -> System.out.println(n * 2));

Đoạn mã này sử dụng một lambda expression để nhân mỗi số bằng 2 và in ra.

Java Phụ

Java 11 đã giới thiệu một số tính năng phụ. Một trong số đó là từ khóa var cho suy luận kiểu biến cục bộ:

var message = "Hello, Java 11!";
System.out.println(message);

Biên dịch器 suy luận rằng message là một chuỗi.

Các API và Khung công tác của Java

Java có một hệ sinh thái phong phú các API và khung công tác. Một khung công tác phổ biến là Spring Boot. Dưới đây là một ứng dụng "Hello World" đơn giản của 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!";
}
}

Điều này tạo ra một ứng dụng web trả về "Hello, World!" khi bạn truy cập URL gốc.

Các Tham Chiếu Lớp trong Java

Java cho phép bạn lấy các tham chiếu đến các lớp tại runtime. Dưới đây là một ví dụ:

Class<?> stringClass = String.class;
System.out.println(stringClass.getName());  // In ra: java.lang.String

Các Tài Nguyên Hữu Ích cho Học Java

Dưới đây là một số tài nguyên hữu ích cho việc học Java:

  1. Tài liệu chính thức của Oracle về Java
  2. Khóa học Java của Codecademy
  3. Sách "Head First Java"
  4. Stack Overflow để hỏi câu hỏi

Các Tính Năng Mới

Java 11 đã giới thiệu nhiều tính năng mới. Dưới đây là bảng tóm tắt một số trong số chúng:

Tính năng Mô tả
Cú pháp lambda cho tham số lambda Cho phép var trong lambda expressions
HTTP Client (tiêu chuẩn) API HTTP client tiêu chuẩn
Chạy chương trình nguồn Java trực tiếp Chạy các tệp nguồn Java trực tiếp
Phương thức mới của String Các phương thức mới như isBlank(), lines(), strip() 等.
Phương thức mới của Files Các phương thức mới như readString(), writeString()

Đó là tất cả cho chuyến du lịch nhanh chóng của chúng ta qua Java 11! Hãy nhớ rằng, việc học lập trình giống như học một ngôn ngữ mới - nó đòi hỏi sự gyak, kiên nhẫn và kiên trì. Đừng để bị nản lòng nếu bạn không hiểu tất cả ngay lập tức. Tiếp tục mã hóa, tiếp tục thử nghiệm, và quan trọng nhất, tiếp tục vui vẻ! Trước khi bạn biết, bạn sẽ viết các ứng dụng Java phức tạp và tự hỏi tại sao lại thấy khó khăn như vậy ban đầu. Chúc bạn may mắn!

Credits: Image by storyset