Java 学习笔记

1. Java 简介

Java 是一种广泛使用的面向对象编程语言,具有跨平台特性。其应用领域包括企业级应用、移动应用和嵌入式系统等。

例如,可以使用 Java 开发一个简单的控制台应用程序来计算两个数的和:

import java.util.Scanner; public class SumExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入第一个数字: "); int num1 = scanner.nextInt(); System.out.print("请输入第二个数字: "); int num2 = scanner.nextInt(); int sum = num1 + num2; System.out.println("两个数的和是: " + sum); } }

公式: sum = num1 + num2

2. 快速入门

编写一个简单的 Java 程序,输出 "Hello, World!"。

示例代码:

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }

公式: 输出语句:System.out.println("Hello, World!")

运行此程序后,控制台将输出 "Hello, World!",这表示程序运行成功。

3. 面向对象编程 (OOP)

Java 是一种面向对象编程语言,核心概念包括类与对象、继承、多态、接口等。

示例:

class Animal { void sound() { System.out.println("Some sound"); } } class Dog extends Animal { @Override void sound() { System.out.println("Woof"); } } public class Main { public static void main(String[] args) { Animal myDog = new Dog(); myDog.sound(); // 输出 "Woof" } }

公式: 继承:class SubClass extends SuperClass

公式: 多态:SuperClass obj = new SubClass()

在这个示例中,Dog 类继承了 Animal 类,并重写了 sound() 方法,体现了继承和多态的特性。

4. 异常处理

Java 提供了异常处理机制,用于处理程序中的错误或异常情况。

示例:

public class ExceptionExample { public static void main(String[] args) { try { int result = 10 / 0; } catch (ArithmeticException e) { System.out.println("除以零错误: " + e.getMessage()); } finally { System.out.println("执行完毕"); } } }

公式: try-catch-finally 结构:try { ... } catch (ExceptionType e) { ... } finally { ... }

在这个示例中,程序试图进行除以零的操作,catch 语句捕获了 ArithmeticException,并输出相应的错误信息。

5. 反射

反射是 Java 语言中一个强大的功能,允许在运行时检查类、接口、字段和方法。

示例:

import java.lang.reflect.Method; public class ReflectionExample { public static void main(String[] args) throws Exception { Class clazz = Class.forName("java.util.ArrayList"); Method[] methods = clazz.getMethods(); for (Method method : methods) { System.out.println(method.getName()); } } }

公式: 获取类的方法:Class clazz = Class.forName("类名"); Method[] methods = clazz.getMethods()

在这个示例中,程序使用反射获取了 ArrayList 类中的所有公共方法,并将它们的名称打印出来。

6. 注解

注解用于为代码添加元数据,可以被编译器和运行时工具使用。

示例:

@interface MyAnnotation { String value(); } @MyAnnotation(value = "Hello") public class AnnotationExample { public static void main(String[] args) { System.out.println("使用了自定义注解"); } }

公式: 定义注解:@interface AnnotationName { ... }

公式: 使用注解:@AnnotationName

在这个示例中,我们定义了一个名为 MyAnnotation 的注解,并将其应用于 AnnotationExample 类。

7. 泛型

泛型允许在类、接口和方法中使用类型参数,提高代码的复用性和安全性。

示例:

import java.util.ArrayList; public class GenericExample { public static void main(String[] args) { ArrayList list = new ArrayList<>(); list.add("Hello"); list.add("World"); for (String s : list) { System.out.println(s); } } }

公式: 泛型声明:ClassName<Type> variable = new ClassName<>()

在这个示例中,我们创建了一个包含字符串的列表,并使用泛型确保列表中只包含 String 类型的元素。

8. 集合

Java 集合框架提供了一组用于存储和操作数据的接口和类。

示例:

import java.util.HashMap; import java.util.HashSet; import java.util.ArrayList; public class CollectionsExample { public static void main(String[] args) { ArrayList list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); System.out.println("List: " + list); HashSet set = new HashSet<>(); set.add("Apple"); set.add("Banana"); set.add("Apple"); // 重复元素不会被添加 System.out.println("Set: " + set); HashMap map = new HashMap<>(); map.put("Apple", 1); map.put("Banana", 2); System.out.println("Map: " + map); } }

公式: List:List<Type> list = new ArrayList<>()

公式: Set:Set<Type> set = new HashSet<>()

公式: Map:Map<KeyType, ValueType> map = new HashMap<>()

在这个示例中,展示了如何使用 List、Set 和 Map 集合来存储和操作数据。

9. 日期与时间

Java 提供了丰富的日期与时间 API 来处理时间相关的操作。

示例:

import java.time.LocalDate; import java.time.LocalTime; import java.time.LocalDateTime; public class DateTimeExample { public static void main(String[] args) { LocalDate date = LocalDate.now(); LocalTime time = LocalTime.now(); LocalDateTime dateTime = LocalDateTime.now(); System.out.println("当前日期: " + date); System.out.println("当前时间: " + time); System.out.println("当前日期和时间: " + dateTime); } }

公式: 获取当前日期:LocalDate.now()

10. 单元测试

单元测试用于测试程序的独立模块,Java 中常用的测试框架是 JUnit。

示例:

import static org.junit.Assert.assertEquals; import org.junit.Test; public class CalculatorTest { @Test public void testAddition() { Calculator calc = new Calculator(); int result = calc.add(2, 3); assertEquals(5, result); } }

公式: 断言相等:assertEquals(expected, actual)

11. 正则表达式

正则表达式用于匹配字符串模式,Java 提供了 PatternMatcher 类来处理正则表达式。

示例:

import java.util.regex.Pattern; import java.util.regex.Matcher; public class RegexExample { public static void main(String[] args) { String text = "Java is fun"; Pattern pattern = Pattern.compile("\bis\b"); Matcher matcher = pattern.matcher(text); if (matcher.find()) { System.out.println("找到匹配: " + matcher.group()); } } }

公式: 创建正则模式:Pattern pattern = Pattern.compile("regex")

12. 加密与安全

Java 提供了 java.security 包来进行加密和安全操作。

示例:

import java.security.MessageDigest; public class HashingExample { public static void main(String[] args) throws Exception { String password = "12345"; MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] hash = md.digest(password.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte b : hash) { hexString.append(String.format("%02x", b)); } System.out.println("哈希值: " + hexString.toString()); } }

公式: 哈希计算:MessageDigest md = MessageDigest.getInstance("算法名称")

13. 多线程

Java 中使用 Thread 类和 Runnable 接口来创建和管理线程。

示例:

public class ThreadExample { public static void main(String[] args) { Runnable task = () -> { for (int i = 0; i < 5; i++) { System.out.println("线程执行: " + i); } }; Thread thread = new Thread(task); thread.start(); } }

公式: 创建线程:Thread thread = new Thread(Runnable)

14. Maven 基础

Maven 是 Java 项目的构建工具,用于管理项目的依赖和构建过程。

示例:

4.0.0 com.example my-app 1.0-SNAPSHOT

公式: Maven 项目定义:...

15. 网络编程

Java 提供了 java.net 包来进行网络编程,允许应用程序通过套接字进行通信。

示例:

import java.net.ServerSocket; import java.net.Socket; public class ServerExample { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(8080); System.out.println("服务器已启动,等待客户端连接..."); Socket clientSocket = serverSocket.accept(); System.out.println("客户端已连接"); serverSocket.close(); } }

公式: 创建服务器套接字:ServerSocket serverSocket = new ServerSocket(port)

16. XML 与 JSON

Java 中可以使用 JacksonGson 库来解析和生成 JSON 数据。

示例:

import com.fasterxml.jackson.databind.ObjectMapper; public class JsonExample { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); String json = "{\"name\":\"John\", \"age\":30}"; Person person = objectMapper.readValue(json, Person.class); System.out.println("姓名: " + person.name); } } class Person { public String name; public int age; }

公式: JSON 解析:ObjectMapper.readValue(json, ClassName.class)

17. JDBC 编程

JDBC(Java Database Connectivity)用于连接和操作数据库。

示例:

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JDBCExample { public static void main(String[] args) { try { Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "user", "password"); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM users"); while (resultSet.next()) { System.out.println("用户名: " + resultSet.getString("username")); } } catch (Exception e) { e.printStackTrace(); } } }

公式: 创建数据库连接:DriverManager.getConnection(url, user, password)