⚡ Java进阶
深入学习面向对象编程和高级特性
面向对象编程(OOP)
面向对象是Java的核心编程思想,包含三大特性:封装、继承、多态。
类和对象
// 定义一个类
public class Person {
// 属性(字段)
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 方法
public void sayHello() {
System.out.println("你好,我是" + name);
}
// Getter 和 Setter
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
// 创建对象
Person person = new Person("张三", 25);
person.sayHello();
封装
通过访问修饰符控制类成员的可见性:
- public:公开,任何类都可访问
- private:私有,仅本类可访问
- protected:受保护,本包和子类可访问
- 默认:本包可访问
继承
// 父类
public class Animal {
protected String name;
public void eat() {
System.out.println(name + "在吃东西");
}
}
// 子类继承父类
public class Dog extends Animal {
public Dog(String name) {
this.name = name;
}
public void bark() {
System.out.println(name + "在汪汪叫");
}
}
多态
// 多态:父类引用指向子类对象
Animal animal = new Dog("小黑");
animal.eat(); // 调用Dog继承的方法
// 方法重写(Override)
@Override
public void eat() {
System.out.println(name + "正在狼吞虎咽");
}
抽象类和接口
抽象类
public abstract class Shape {
protected String color;
// 抽象方法,子类必须实现
public abstract double getArea();
// 普通方法
public String getColor() {
return color;
}
}
public class Circle extends Shape {
private double radius;
@Override
public double getArea() {
return Math.PI * radius * radius;
}
}
接口
// 定义接口
public interface Flyable {
void fly(); // 默认public abstract
}
// 实现接口
public class Bird extends Animal implements Flyable {
@Override
public void fly() {
System.out.println("鸟儿在飞翔");
}
}
集合框架
Java集合框架提供了强大的数据结构支持。
List 列表
import java.util.ArrayList;
import java.util.List;
List list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
System.out.println(list.get(0)); // Java
System.out.println(list.size()); // 3
list.remove(1); // 删除Python
for (String item : list) {
System.out.println(item);
}
Map 映射
import java.util.HashMap;
import java.util.Map;
Map scores = new HashMap<>();
scores.put("张三", 90);
scores.put("李四", 85);
scores.put("王五", 95);
System.out.println(scores.get("张三")); // 90
// 遍历Map
for (Map.Entry entry : scores.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Set 集合
import java.util.HashSet;
import java.util.Set;
Set set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // 重复元素不会被添加
System.out.println(set.size()); // 2
异常处理
try {
// 可能出错的代码
int result = 10 / 0;
} catch (ArithmeticException e) {
// 处理异常
System.out.println("除数不能为0");
e.printStackTrace();
} finally {
// 无论是否异常都会执行
System.out.println("清理资源");
}
// 自定义异常
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
// 抛出异常
public void checkAge(int age) throws MyException {
if (age < 0) {
throw new MyException("年龄不能为负数");
}
}
Lambda表达式(Java 8+)
🔥 Lambda表达式
Lambda表达式让代码更简洁,是函数式编程的重要特性。
// 传统写法
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello");
}
};
// Lambda写法
Runnable r2 = () -> System.out.println("Hello");
// 使用Stream API
List numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.filter(n -> n % 2 == 0) // 过滤偶数
.map(n -> n * 2) // 乘以2
.forEach(System.out::println); // 输出
💡 进阶学习建议
深入理解面向对象思想,多练习设计模式。尝试用Java实现一些小项目,如学生管理系统、图书管理系统等。