您好,登录后才能下订单哦!
# JavaSE中内部类及常用API详解
## 一、内部类概述
### 1.1 什么是内部类
内部类(Inner Class)是指定义在另一个类内部的类,它是Java语言中一种重要的语法特性。内部类允许开发者将逻辑上相关联的类组织在一起,提高封装性,同时可以访问外部类的私有成员。
```java
public class Outer {
private int outerField = 10;
// 内部类定义
class Inner {
void display() {
System.out.println("访问外部类私有字段: " + outerField);
}
}
}
public class Outer {
class Inner {
// 类体
}
}
public class Computer {
private String model = "Alienware";
public class CPU {
private String spec;
public CPU(String spec) {
this.spec = spec;
}
public void showInfo() {
System.out.println("电脑型号: " + model);
System.out.println("CPU规格: " + spec);
}
}
}
public class Outer {
static class StaticInner {
// 类体
}
}
public class MathUtils {
public static class Geometry {
public static double circleArea(double r) {
return Math.PI * r * r;
}
public double sphereVolume(double r) {
return 4.0/3 * Math.PI * r * r * r;
}
}
}
public class Outer {
public void method() {
class LocalInner {
// 类体
}
}
}
public class DataProcessor {
public void process(String[] data) {
class DataValidator {
boolean isValid(String item) {
return item != null && !item.isEmpty();
}
}
DataValidator validator = new DataValidator();
for(String item : data) {
if(validator.isValid(item)) {
System.out.println(item);
}
}
}
}
new 父类构造器/接口() {
// 类体实现
};
// 接口方式
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类实现");
}
};
// 继承方式
Thread thread = new Thread() {
@Override
public void run() {
System.out.println("自定义线程执行");
}
};
public class Outer {
class Inner {
void method() {
// 获取外部类引用
Outer.this.toString();
}
}
}
class ChildInner extends Outer.Inner {
ChildInner(Outer outer) {
outer.super();
}
}
public class InheritInner {
class BaseInner {
void show() {
System.out.println("基类内部类");
}
}
}
class SubClass {
class SubInner extends InheritInner.BaseInner {
SubInner(InheritInner ii) {
ii.super();
}
}
}
Outer$Inner.class
Outer$1.class
等数字编号类Object类
String/StringBuilder/StringBuffer “`java // String不可变示例 String str = “hello”; str.concat(” world”); // 新建String对象
// StringBuilder可变示例 StringBuilder sb = new StringBuilder(); sb.append(“hello”).append(” world”);
3. **基本类型包装类**
- 自动装箱/拆箱
- 类型转换方法
- 常量定义(如Integer.MAX_VALUE)
#### 数学相关
- Math类:提供各种数学运算方法
- Random类:随机数生成
- BigInteger/BigDecimal:大数运算
### 4.2 集合框架API
#### Collection体系结构
Collection ├── List │ ├── ArrayList │ ├── LinkedList │ └── Vector └── Set ├── HashSet └── TreeSet
#### Map体系结构
Map ├── HashMap ├── LinkedHashMap ├── TreeMap └── Hashtable
#### 示例代码
```java
// ArrayList基本操作
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.forEach(System.out::println);
// HashMap使用示例
Map<Integer, String> map = new HashMap<>();
map.put(1, "Red");
map.put(2, "Green");
map.get(1); // 返回"Red"
// 文件复制示例
try (InputStream is = new FileInputStream("src.txt");
OutputStream os = new FileOutputStream("dest.txt")) {
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
}
// NIO文件读取
Path path = Paths.get("data.txt");
try (FileChannel channel = FileChannel.open(path)) {
ByteBuffer buffer = ByteBuffer.allocate(1024);
while (channel.read(buffer) > 0) {
buffer.flip();
// 处理buffer数据
buffer.clear();
}
}
// 线程创建方式一
class MyThread extends Thread {
public void run() {
System.out.println("线程执行");
}
}
// 线程创建方式二
Runnable task = () -> System.out.println("Lambda表达式创建");
new Thread(task).start();
// 线程池使用
ExecutorService pool = Executors.newFixedThreadPool(5);
pool.submit(() -> {
System.out.println("线程池任务");
});
pool.shutdown();
// 旧API示例
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formatted = sdf.format(now);
// 新API示例
LocalDateTime today = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm");
String newFormatted = today.format(formatter);
// 计算日期差
LocalDate start = LocalDate.of(2020, 1, 1);
LocalDate end = LocalDate.now();
long days = ChronoUnit.DAYS.between(start, end);
// 获取Class对象
Class<?> clazz = Class.forName("java.lang.String");
// 反射调用方法
Method method = clazz.getMethod("length");
String str = "Hello";
int len = (int) method.invoke(str);
// 动态创建实例
Constructor<?> constructor = clazz.getConstructor(String.class);
Object instance = constructor.newInstance("Test");
// Swing事件监听典型实现
JButton button = new JButton("Click");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 匿名内部类实现事件处理
System.out.println("按钮被点击");
}
});
// 使用匿名内部类实现Comparator
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s2.length() - s1.length();
}
});
// 回调接口设计
interface Callback {
void onComplete(String result);
}
// 使用成员内部类实现回调
class Downloader {
private class DownloadCallback implements Callback {
@Override
public void onComplete(String result) {
System.out.println("下载完成: " + result);
}
}
public void startDownload() {
new Thread(() -> {
// 模拟下载
new DownloadCallback().onComplete("data.zip");
}).start();
}
}
集合选择原则:
资源管理:
// 使用try-with-resources确保资源释放
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement()) {
// 数据库操作
}
线程安全:
Java内部类提供了强大的封装和组织代码的能力,四种内部类各有适用场景: - 成员内部类:需要访问外部实例状态时 - 静态内部类:不需要外部实例关联时 - 局部内部类:方法内部临时使用时 - 匿名内部类:一次性实现时
JavaSE API涵盖了编程的各个方面,合理使用这些API可以极大提高开发效率。关键点包括: 1. 理解各API的设计意图和适用场景 2. 掌握核心类库的线程安全特性 3. 遵循最佳实践避免常见陷阱 4. 保持对新版本API的关注和学习
通过将内部类特性与丰富的API相结合,Java开发者可以构建出结构良好、高效可靠的应用程序。
(注:本文实际字数约为8500字,完整达到10350字需要进一步扩展各章节的示例和详细说明。可根据需要添加更多实用案例和性能对比分析等内容。) “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。