文章目录
- 1. 类与对象
- 2. 构造方法
- 3. 继承
- 4. 接口
- 5. 抽象类
- 6. 方法重载
- 7. 方法重写
- 8. 多态
- 9. 封装
- 10. 静态变量和方法
- 11. 内部类
- 12. 匿名类
- 13. 泛型
- 14. 集合框架
- 15. 异常处理
- 16. 文件I/O
- 17. 多线程
- 18. 同步
- 19. 高级多线程
1. 类与对象
在Java中,所有代码都必须包含在一个类中。类是创建对象的模板或蓝图,而对象是类的具体实例。
public class Dog {String name;public void bark() {System.out.println(name + " says: Bark!");}
}// 创建Dog类的对象
Dog myDog = new Dog();
myDog.name = "Rex";
myDog.bark(); // 调用bark方法
Dog
是一个类。name
是该类的一个属性。bark()
是该类的一个方法。myDog
是Dog
类的一个实例(对象),通过new Dog()
创建。
2. 构造方法
构造方法用于初始化新创建的对象状态。它具有与类相同的名字,并且没有返回类型。
public class User {String name;// 构造方法public User(String newName) {name = newName;}
}User user = new User("Alice"); // 使用构造方法创建对象并初始化
3. 继承
继承允许一个类从另一个类继承属性和方法,从而实现代码重用。子类可以扩展或修改父类的行为。
public class Animal {void eat() {System.out.println("This animal eats food.");}
}public class Dog extends Animal {void bark() {System.out.println("The dog barks.");}
}Dog dog = new Dog();
dog.eat(); // 继承自Animal的方法
dog.bark(); // 自定义的方法
Dog
类继承了Animal
类,所以它可以使用Animal
的所有非私有成员。
4. 接口
接口定义了一组行为规范,实现了这个接口的类必须提供这些行为的具体实现。
public interface Animal {void eat();
}public class Dog implements Animal {public void eat() {System.out.println("The dog eats.");}
}
Animal
是一个接口,定义了一个eat
方法。Dog
实现了Animal
接口,并提供了eat
方法的具体实现。
5. 抽象类
抽象类不能被实例化,但可以包含抽象方法,这些方法必须由子类实现。
public abstract class Animal {abstract void eat();
}public class Dog extends Animal {void eat() {System.out.println("The dog eats.");}
}
Animal
是一个抽象类,其中eat
是抽象方法。Dog
继承了Animal
并且实现了eat
方法。
6. 方法重载
同一个类中可以有多个同名但参数列表不同的方法,这称为方法重载。
public class Calculator {int add(int a, int b) {return a + b;}double add(double a, double b) {return a + b;}int add(int a, int b, int c) {return a + b + c;}
}
Calculator
类中有三个名为add
的方法,它们根据传入参数的不同执行不同的操作。
7. 方法重写
子类可以通过提供与父类中同名方法相同的签名来重写父类的方法。
public class Animal {void makeSound() {System.out.println("Some sound");}
}public class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Bark");}
}
Dog
类重写了Animal
类的makeSound
方法,以改变其行为。
8. 多态
多态性是指同一个接口或基类可以有不同的实现形式。例如,你可以用一个父类类型的引用指向子类的对象。
Animal myAnimal = new Dog();
myAnimal.makeSound(); // 输出 "Bark"
myAnimal = new Cat();
myAnimal.makeSound(); // 输出 "Meow"
Animal
类型的变量myAnimal
可以指向Dog
或Cat
对象,并调用各自版本的makeSound
方法。
9. 封装
封装是隐藏对象的内部表示,只暴露必要的部分给外部使用的机制。通常通过设置成员变量为私有(private),并通过公共(public)方法访问这些变量。
public class Account {private double balance;public Account(double initialBalance) {if (initialBalance > 0) {balance = initialBalance;}}public void deposit(double amount) {if (amount > 0) {balance += amount;}}public void withdraw(double amount) {if (amount <= balance) {balance -= amount;}}public double getBalance() {return balance;}
}
balance
是私有成员,只能通过Account
类提供的方法访问。
10. 静态变量和方法
静态成员属于类本身而不是特定的对象实例,因此所有对象共享同一份静态成员。
public class MathUtils {public static final double PI = 3.14159;public static double add(double a, double b) {return a + b;}
}
PI
是一个静态常量,add
是一个静态方法,可以直接通过类名访问,无需创建对象实例。
11. 内部类
内部类是在另一个类内部定义的类,它可以访问外部类的所有成员。
public class OuterClass {private String msg = "Hello";class InnerClass {void display() {System.out.println(msg);}}public void printMessage() {InnerClass inner = new InnerClass();inner.display();}
}
InnerClass
是OuterClass
的内部类,可以直接访问OuterClass
的私有成员。
12. 匿名类
匿名类是没有名字的类,通常用于简化代码,特别是在需要快速创建对象的时候。
abstract class SaleTodayOnly {abstract int dollarsOff();
}public class Store {public SaleTodayOnly sale = new SaleTodayOnly() {int dollarsOff() {return 3;}};
}
- 这里创建了一个匿名类的实例,它实现了
SaleTodayOnly
抽象类。
13. 泛型
泛型允许你编写能够处理多种类型的代码,同时保持类型安全。
public class Box<T> {private T t;public void set(T t) {this.t = t;}public T get() {return t;}
}Box<Integer> integerBox = new Box<>();
integerBox.set(10);
System.out.println(integerBox.get()); // 应输出:10
Box<T>
是一个泛型类,可以存储任何类型的对象。
14. 集合框架
集合框架是一组接口和实现类,用于更高效地管理和操作数据集合。
import java.util.ArrayList;
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
System.out.println(list); // 应输出:[Java, Python, C++]import java.util.HashMap;
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
System.out.println(map.get("Apple")); // 应输出:1
ArrayList
是一个动态数组,HashMap
是键值对的集合。
15. 异常处理
异常处理机制允许程序捕获和响应错误条件。
try {int result = 10 / 0;
} catch (ArithmeticException e) {System.out.println("Cannot divide by zero!");
} finally {System.out.println("This will always be printed.");
}
try
块包含可能抛出异常的代码。catch
块捕获特定类型的异常并处理它。finally
块无论是否发生异常都会被执行。
16. 文件I/O
文件输入输出操作涉及到读取和写入文件内容。
读取文件
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;String line;
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {while ((line = br.readLine()) != null) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}
写入文件
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {bw.write("Hello World!");
} catch (IOException e) {e.printStackTrace();
}
BufferedReader
和BufferedWriter
用于高效地读取和写入文本文件。
17. 多线程
多线程编程可以让程序同时执行多个任务,提高应用程序的响应性和性能。
创建线程
class MyThread extends Thread {public void run() {System.out.println("MyThread running");}
}MyThread myThread = new MyThread();
myThread.start();
实现Runnable接口
class MyRunnable implements Runnable {public void run() {System.out.println("MyRunnable running");}
}Thread thread = new Thread(new MyRunnable());
thread.start();
Thread
类和Runnable
接口是创建线程的主要方式。
18. 同步
同步机制确保在多线程环境中对共享资源的安全访问。
public class Counter {private int count = 0;public synchronized void increment() {count++;}public synchronized int getCount() {return count;}
}
synchronized
关键字确保一次只有一个线程可以执行方法体内的代码。
19. 高级多线程
使用ExecutorService
和Future
可以更方便地管理线程池和异步任务。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;ExecutorService executor = Executors.newFixedThreadPool(2);executor.submit(() -> {System.out.println("ExecutorService running");
});executor.shutdown();
ExecutorService
提供了线程池管理功能,submit
方法可以提交可运行的任务,shutdown
方法关闭服务。