安装 Java 开发工具:
编写第一个 Java 程序:Hello World
创建一个名为 HelloWorld.java
的文件,内容如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
解释:
public class HelloWorld
:定义一个公共类,类名为 HelloWorld。public static void main(String[] args)
:主方法,是 Java 程序的入口点。System.out.println("Hello, World!");
:输出一行文本到控制台。编译和运行程序
类和对象
创建一个名为 Person.java
的文件,内容如下:
public class Person {
// 属性
String name;
int age;
// 方法
void greet() {
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
public static void main(String[] args) {
// 创建对象
Person person = new Person();
person.name = "Alice";
person.age = 30;
person.greet(); // 调用方法
}
}
解释:
String name;
和 int age;
:类的属性。void greet()
:类的方法,输出对象的属性值。main
方法中创建 Person
类的对象,设置属性并调用方法。封装
修改 Person
类,使用 getter
和 setter
方法:
public class Person {
private String name;
private int age;
// Getter 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// Setter 方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
void greet() {
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
public static void main(String[] args) {
Person person = new Person();
person.setName("Bob");
person.setAge(25);
person.greet();
}
}
解释:
private
关键字修饰属性,使其只能在类内部访问。getter
和 setter
方法访问和修改属性值。继承和多态
创建一个名为 Employee.java
的文件,继承 Person
类:
public class Employee extends Person {
private String jobTitle;
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
@Override
void greet() {
System.out.println("Hello, I am " + getName() + ", I am " + getAge() + " years old and my job title is " + jobTitle + ".");
}
public static void main(String[] args) {
Employee employee = new Employee();
employee.setName("Charlie");
employee.setAge(40);
employee.setJobTitle("Developer");
employee.greet(); // 调用重写的方法
}
}
解释:
extends
关键字用于继承 Person
类。@Override
注解重写父类的方法。数组和字符串
数组操作:
public class ArrayExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
// 遍历数组
for (int number : numbers) {
System.out.println(number);
}
}
}
字符串操作:
public class StringExample {
public static void main(String[] args) {
String str = "Hello, Java!";
System.out.println("Length: " + str.length());
System.out.println("Substring: " + str.substring(7));
System.out.println("Replace 'Java' with 'World': " + str.replace("Java", "World"));
}
}
集合框架
ArrayList 示例:
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
for (String item : list) {
System.out.println(item);
}
}
}
HashMap 示例:
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("Alice", 30);
map.put("Bob", 25);
map.put("Charlie", 35);
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
}
}
异常处理
异常处理示例:
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // 可能会抛出异常
} catch (ArithmeticException e) {
System.out.println("Cannot divide by zero.");
} finally {
System.out.println("This block is always executed.");
}
}
}
文件操作示例:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteExample {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("Hello, File!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
读取文件示例:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReadExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("output.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
创建线程示例:
public class ThreadExample {
public static void main(String[] args) {
// 创建线程类的实例
Thread thread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("Running in thread: " + i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start(); // 启动线程
}
}
线程同步示例:
public class SynchronizedExample {
private int counter = 0;
public synchronized void increment() {
counter++;
}
public static void main(String[] args) {
SynchronizedExample example = new SynchronizedExample();
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
example.increment();
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
example.increment();
}
});
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Final counter value: " + example.counter);
}
}
简单的客户端-服务器应用:
服务器端:
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerExample {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(12345)) {
System.out.println("Server is listening on port 12345");
Socket socket = serverSocket.accept();
OutputStream output = socket.getOutputStream();
output.write("Hello from server!".getBytes());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端:
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class ClientExample {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 12345)) {
InputStream input = socket.getInputStream();
byte[] buffer = new byte[1024];
int read = input.read(buffer);
String response = new String(buffer, 0, read);
System.out.println("Received from server: " + response);
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用 JDBC 操作数据库:
创建一个简单的数据库操作程序:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DatabaseExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/testdb";
String user = "root";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
// 创建表
String createTableSQL = "CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100))";
stmt.execute(createTableSQL);
// 插入数据
String insertSQL = "INSERT INTO users (name) VALUES ('Alice')";
stmt.executeUpdate(insertSQL);
// 查询数据
String querySQL = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(querySQL);
while (rs.next()) {
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
使用 Java Servlet 创建简单的 Web 应用:
HelloServlet.java:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.getWriter().write("Hello from Servlet!
");
}
}
部署和运行:
HelloServlet
部署到支持 Servlet 的服务器(如 Apache Tomcat)。http://localhost:8080/your-app-context/hello
。使用 Spring Boot 创建简单的 Web 应用:
创建 Spring Boot 项目:
Spring Initializr
创建一个 Spring Boot 项目,选择 Spring Web
依赖项。Main Application 类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
创建一个简单的 Controller
:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello from Spring Boot!";
}
}
运行和测试:
Spring Boot
应用。http://localhost:8080/api/hello
。创建一个图书管理系统:
1. 深入理解 Java 内存模型
2. 高级并发编程
线程池: 使用 ExecutorService 和 ForkJoinPool 等工具来管理线程池。
同步和锁: 掌握不同的锁机制,包括 synchronized、ReentrantLock、读写锁等。
原子操作: 使用 Atomic 类库进行无锁编程,如 AtomicInteger 和 AtomicReference。
并发数据结构: 了解 ConcurrentHashMap、CopyOnWriteArrayList 和其他并发数据结构的使用。
3. 设计模式和架构
常见设计模式: 理解 Singleton、Factory、Observer、Decorator、Strategy
等设计模式,并能够在实际项目中应用它们。
架构模式: 掌握 MVC、MVVM、微服务架构等架构模式及其适用场景。
依赖注入: 使用 Spring 框架的依赖注入功能来解耦代码和管理对象生命周期。
4. 性能优化
JVM 调优: 学习如何调整 JVM 参数以优化应用程序性能,例如内存分配、垃圾回收调优等。
性能分析: 使用工具(如 JVisualVM、YourKit、JProfiler)来分析性能瓶颈,了解如何进行性能调优。
代码优化: 识别和优化代码中的性能瓶颈,包括算法优化和数据结构选择。
5. Java 未来的特性
记录类(Record Classes): 学习 Java 16 引入的记录类,它是一种简洁的类定义方式。
模式匹配(Pattern Matching): 了解 Java 17 和未来版本中的模式匹配特性,以简化类型检查和条件逻辑。
虚拟线程(Project Loom): 关注虚拟线程的引入,它可以使并发编程更为简便和高效。
6. 安全编程
加密: 使用 Java 提供的加密库(如 javax.crypto)进行数据加密和解密。
认证和授权: 实现用户认证和授权机制,例如使用 Spring Security 进行安全控制。
输入验证: 进行输入验证以防止常见的安全漏洞,如 SQL 注入和 XSS(跨站脚本攻击)。