资源名称:Java学习指南(第4版)(下册)

内容简介:

Java学习指南(第4版)(上、下册)》是畅销Java学习指南的最新版,详细介绍了Java 6和Java 7的语言特性和API。本书全面介绍了Java的基础知识,力图通过完备地介绍Java语言、其类库、编程技术以及术语,从而成为一本名符其实的入门级图书。

《Java学习指南(第4版)(上、下册)》加入了从Java 6和Java 7发布以后的变化,包括新的语言功能、并发工具(Fork-Join框架)、新的NIO Files API、Java Servlet(3.0)等新主题,作者通过精心挑选的、富有实用性和趣味性的示例,进行细致深入的讲解。本书的最后一部分,将Java放入到Web应用程序、Web服务和XML处理的环境中进行了介绍。

《Java学习指南(第4版)(上、下册)》适合Java语言初学者阅读,对于有一定经验的Java程序员,也可以作为了解Java 7的编程手册参考。

资源目录:

第1章 一种现代语言 1

1.1 进入Java世界 2

1.1.1 Java的起源 2

1.1.2 成长 3

1.2 虚拟机 4

1.3 Java与其他语言的比较 7

1.4 设计安全 10

1.4.1 语法简单性 10

1.4.2 类型安全和方法绑定 11

1.4.3 递增开发 12

1.4.4 动态内存管理 13

1.4.5 错误处理 14

1.4.6 线程 14

1.4.7 可伸缩性 15

1.5 实现安全 15

1.5.1 校验器 17

1.5.2 类加载器 18

1.5.3 安全管理器 18

1.6 应用和用户级安全性 19

1.7 Java路线图 20

1.7.1 过去:Java 1.0到Java 1.6 20

1.7.2 如今:Java 7 21

1.7.3 将来 23

1.7.4 可用性 24

第2章 第一个应用 25

2.1 Java工具和环境 25

2.2 配置Eclipse并且创建项目 26

2.2.1 导入本书示例 28

2.3 HelloJava 29

2.3.1 类 32

2.3.2 main()方法 32

2.3.3 类和对象 34

2.3.4 变量与类类型 34

2.3.5 HelloComponent 35

2.3.6 继承 36

2.3.7 JComponent类 37

2.3.8 关系与指向 38

2.3.9 包与导入 39

2.3.10 paintComponent() 方法 40

2.4 HelloJava2:余波未平 41

2.4.1 实例变量 43

2.4.2 构造函数 43

2.4.3 事件 45

2.4.4 repaint()方法 47

2.4.5 接口 48

2.5 HelloJava3:按钮的震撼 49

2.5.1 方法重载 51

2.5.2 组件 52

2.5.3 容器 52

2.5.4 布局 53

2.5.5 派生子类与子类型 53

2.5.6 更多事件和接口 54

2.5.7 颜色的说明 55

2.5.8 静态成员 55

2.5.9 数组 56

2.5.10 颜色的相关方法 56

2.6 HelloJava4:Netscape的反戈一击 58

2.6.1 线程 60

2.6.2 Thread类 60

2.6.3 Runnable接口 61

2.6.4 启动线程 62

2.6.5 在线程中运行代码 62

2.6.6 异常 63

2.6.7 同步 64

第3章 使用工具 66

3.1 JDK环境 66

3.2 Java虚拟机 67

3.3 运行Java应用程序 67

3.4 类路径 69

3.5 Java编译器 71

3.6 JAR Files 73

3.6.1 文件压缩 73

3.6.2 jar工具 74

3.6.3 Pack200工具 77

3.7 策略文件 78

3.7.1 默认的安全性管理器 78

3.7.2 policytool工具 79

3.7.3 通过默认的安全管理器使用策略文件 81

第4章 Java语言 82

4.1 文本编码 82

4.2 注释 83

4.3 类型 85

4.3.1 基本类型 86

4.3.2 引用类型 89

4.3.3 字符串的有关问题 91

4.4 语句和表达式 92

4.4.1 语句 93

4.4.2 表达式 99

4.5 异常 103

4.5.1 异常和错误类 104

4.5.2 异常处理 106

4.5.3 逐级上浮 108

4.5.4 栈轨迹 109

4.5.5 受查和非受查异常 110

4.5.6 抛出异常 111

4.5.7 try的“潜伏”功用 114

4.5.8 finally子句 115

4.5.9 带有资源的Try 116

4.5.10 性能问题 118

4.6 断言 118

4.6.1 启用和禁用断言 119

4.6.2 使用断言 120

4.7 数组 121

4.7.1 数组类型 122

4.7.2 数组的创建和初始化 122

4.7.3 使用数组 124

4.7.4 匿名数组 126

4.7.5 多维数组 126

4.7.6 深入数组 128

第5章 Java中的对象 129

5.1 类 130

5.1.1 访问字段和方法 132

5.1.2 静态成员 133

5.2 方法 136

5.2.1 局部变量 137

5.2.2 遮蔽 137

5.2.3 静态方法 138

5.2.4 初始化局部变量 139

5.2.5 参数传递与引用 140

5.2.6 基本类型的包装器 142

5.2.7 基本类型的自动装箱和拆箱 144

5.2.8 可变长度的参数列表 145

5.2.9 方法重载 146

5.3 对象创建 148

5.3.1 构造函数 148

5.3.2 使用重载构造函数 149

5.3.3 静态和非静态初始化块 151

5.4 对象销毁 152

5.4.1 垃圾回收 152

5.4.2 最终化 153

5.4.3 弱引用和软引用 154

5.5 枚举 155

5.5.1 枚举值 156

5.5.2 定制化枚举 156

第6章 类之间的关系 158

6.1 派生子类和继承 158

6.1.1 被遮蔽变量 160

6.1.2 覆盖方法 162

6.1.3 特殊引用:this和super 169

6.1.4 类型强制转换 170

6.1.5 使用超类构造函数 172

6.1.6 完全揭密:构造函数和初始化 173

6.1.7 抽象方法和类 173

6.2 接口 174

6.2.1 作为回调的接口 176

6.2.2 接口变量 177

6.2.3 子接口 178

6.3 包与编译单元 179

6.3.1 编译单元 179

6.3.2 包名 180

6.3.3 类可见性 180

6.3.4 导入类 181

6.4 变量和方法的可见性 183

6.4.1 基本访问修饰符 184

6.4.2 子类和可见性 185

6.4.3 接口和可见性 186

6.5 数组和类的层次体系结构 186

6.6 内部类 188

6.6.1 内部类作为适配器 190

6.6.2 方法中的内部类 192

第7章 使用对象和类 198

7.1 Object类 198

7.1.1 相等性与等价 199

7.1.2 散列码 200

7.1.3 复制对象 200

7.2 Class类 203

7.3 反射 205

7.3.1 安全性 208

7.3.2 访问字段 209

7.3.3 访问方法 210

7.3.4 访问构造函数 212

7.3.5 关于数组 213

7.3.6 访问泛型类型信息 213

7.3.7 访问注解数据 214

7.3.8 动态接口适配器 214

7.3.9 反射适用之处 215

7.4 注解 216

7.4.1 使用注解 217

7.4.2 标准注解 218

7.4.3 Apt工具 219

第8章 泛型 220

8.1 容器:构建一个更好的捕鼠器 221

8.2 走进泛型 222

8.3 根本就没有勺子 226

8.3.1 擦除 226

8.3.2 原始类型 228

8.4 参数化类型关系 229

8.5 类型转换 232

8.6 编写泛型类 233

8.6.1 类型变量 233

8.6.2 子类化泛型 234

8.6.3 异常和泛型 235

8.6.4 参数类型限制 236

8.7 边界 237

8.8 通配符 239

8.8.1 所有实例化的超类型 240

8.8.2 有界限通配符 240

8.8.3 思考容器 240

8.8.4 下边界 241

8.8.5 读、写和算术 242

8.8.6 、和原始类型 243

8.8.7 通配符类型关系 244

8.9 泛型方法 245

8.9.1 泛型方法的引入 246

8.9.2 根据参数进行类型推断 247

8.9.3 根据赋值环境做类型推断 248

8.9.4 显示类型调用 249

8.9.5 通配符捕获 249

8.9.6 通配符类型和泛型方法 249

8.10 参数化类型的数组 250

8.10.1 使用数组类型 251

8.10.2 泛型类型的数组有何优点 252

8.10.3 数组类型中的通配符 252

8.11 案例学习:Enum类 253

8.12 案例学习:sort()方法 254

8.13 结论 255

第9章 线程 256

9.1 线程简介 257

9.1.1 Thread类和Runnable接口 258

9.1.2 控制线程 262

9.1.3 线程的消亡 264

9.2 applet中线程的实现 266

9.3 同步 268

9.3.1 对方法的串行化访问 269

9.3.2 访问多线程中的类和实例变量 271

9.3.3 wait()和notify()方法 272

9.3.4 传递消息 274

9.3.5 ThreadLocal对象 278

9.4 调度和优先级 279

9.4.1 线程状态 280

9.4.2 时间片划分 281

9.4.3 优先级 282

9.4.4 让步 283

9.5 线程组 283

9.5.1 使用ThreadGroup类 284

9.5.2 未捕获的异常 284

9.6 线程性能 285

9.6.1 同步的开销 285

9.6.2 线程资源消费 286

9.7 并发工具 287

9.7.1 执行器 288

9.7.2 锁 300

9.7.3 同步构造 303

9.7.4 原子操作 308

9.8 结论 310

第10章 文本处理 311

10.1 其他与文本相关的API 312

10.2 String 312

10.2.1 String构造函数 313

10.2.2 事物的字符串表示 314

10.2.3 字符串比较 315

10.2.4 查找 317

10.2.5 编辑 318

10.2.6 String方法小结 319

10.2.7 StringBuilder和StringBuffer 320

10.3 国际化 321

10.3.1 java.util.Locale类 321

10.3.2 资源包 322

10.4 解析与格式化文本 324

10.4.1 解析基本数字 325

10.4.2 文本分词 326

10.5 Printf式格式化 328

10.5.1 Formatter 329

10.5.2 格式字符串 329

10.5.3 字符串转换 330

10.5.4 基本类型和数字转换 332

10.5.5 标志 334

10.5.6 其他 334

10.6 用java.text包格式化 334

10.7 正则表达式 338

10.7.1 regex记法 339

10.7.2 java.util.regex API 349

第11章 核心实用工具 356

11.1 数学实用工具 356

11.1.1 java.lang.Math类 357

11.1.2 Big/Precise Numbers 359

11.1.3 浮点数组成部分 359

11.1.4 随机数 360

11.2 日期和时间 361

11.2.1 使用日历 362

11.2.2 Time Zones 363

11.2.3 解析和格式化日期 365

11.2.4 Printf式的日期和时间格式化 367

11.3 定时器 368

11.4 集合 370

11.4.1 Collection接口 371

11.4.2 迭代器 374

11.4.3 Collection类型 375

11.4.4 Map接口 378

11.4.5 集合实现 380

11.4.6 哈希码和键值 385

11.4.7 同步和只读集合 386

11.4.8 同步和只读集合 387

11.4.9 WeakHashMap 388

11.4.10 EnumSet和EnumMap 388

11.4.11 排序的集合 389

11.4.12 一个令人激动的例子 389

11.5 特性 391

11.5.1 加载和存储 392

11.5.2 系统特性 393

11.6 首选项API 394

11.6.1 类的首选项 395

11.6.2 首选项存储 395

11.6.3 修改通知 396

11.7 日志API 397

11.7.1 概述 397

11.7.2 日志级别 399

11.7.3 一个简单的例子 400

11.7.4 日志建立特性 401

11.7.5 记录器 403

11.7.6 性能 404

11.8 Observers和Observables 404

第12章 输入/输出功能 406

12.1 流 406

12.1.1 终端I/O 409

12.1.2 字符流 411

12.1.3 流包装器 413

12.1.4 管道 416

12.1.5 流与String的转换 418

12.1.6 Implementing a Filter Stream 420

12.2 文件 421

12.2.1 java.io.File类 422

12.2.2 文件流 427

12.2.3 Random AccessFile 429

12.2.4 Resource Paths 430

12.3 NIO File API 432

12.3.1 FileSystem和Path 433

12.3.2 NIO文件操作 435

12.3.3 目录操作 438

12.3.4 监控路径 440

12.4 串行化 441

12.4.1 使用readObject()初始化 443

12.4.2 SerialVersionUID 443

12.5 数据压缩 444

12.5.1 压缩数据 445

12.5.2 解压缩数据 446

12.5.3 作为文件系统的Zip归档文件 448

12.6 NIO包 449

12.6.1 异步I/O 450

12.6.2 性能 450

12.6.3 映射和加锁文件 450

12.6.4 通道 451

12.6.5 缓冲区 451

12.6.6 字符编码器和解码器 455

12.6.7 FileChannel 457

12.6.8 利用NIO实现可伸缩I/O 463

第13章 网络编程 464

13.1 套接字 466

13.1.1 客户端和服务器 467

13.1.2 DateAtHost客户端 471

13.1.3 TinyHttpd服务器 473

13.1.4 套接字选项 478

13.1.5 代理和防火墙 479

13.2 数据报套接字 481

13.2.1 The HeartBeat Applet 482

13.2.2 InetAddress 486

13.3 简单串行化对象协议 487

13.4 远程方法调用 491

13.4.1 现实的用法 492

13.4.2 远程和非远程对象 492

13.4.3 一个RMI示例 495

13.4.4 RMI and CORBA 504

13.5 使用NIO的可伸缩I/O 504

13.5.1 可选择通道 505

13.5.2 使用select 506

13.5.3 LargerHttpd 508

13.5.4 非阻塞客户端端操作 512

第14章 Web编程 514

14.1 统一资源定位器(URL) 514

14.2 URL类 515

14.2.1 流数据 516

14.2.2 将内容获取为对象 517

14.2.3 Managing Connections 518

14.2.4 实用的处理器 519

14.2.5 其他处理器框架 519

14.3 与Web应用通信 520

14.3.1 使用GET方法 521

14.3.2 使用POST方法 521

14.3.3 The HttpURLConnection 524

14.3.4 SSL和安全Web通信 525

14.3.5 URL、URN和URI 525

14.4 Web Services 526

14.4.1 XML-RPC 527

14.4.2 WSDL 527

14.4.3 工具 527

14.4.4 Weather Service客户端 528

第15章 Web应用与Web服务 530

15.1 Web应用技术 531

15.1.1 面向页面的应用和单页应用 531

15.1.2 JSP 532

15.1.3 XML和XSL 533

15.1.4 Web应用框架 533

15.1.5 Google Web Toolkit 534

15.1.6 HTML5、AJAX以及更多 534

15.2 Java Web应用 534

15.2.1 servlet生命期 535

15.2.2 Servlets 536

15.2.3 The HelloClient Servlet 537

15.2.4 servlet响应 538

15.2.5 servlet参数 540

15.2.6 The ShowParameters Servlet 541

15.2.7 用户会话管理 543

15.2.8 ShowSession Servlet 543

15.2.9 ShoppingCart Servlet 545

15.2.10 Cookies 548

15.2.11 ServletContext API 549

15.2.12 异步Servlets 550

15.3 WAR文件和部署 554

15.3.1 使用web.xml和注解配置 555

15.3.2 URL模式映射 557

15.3.3 部署HelloClient 558

15.3.4 错误和索引页面 559

15.3.5 安全性和鉴别 561

15.3.6 为用户指定角色 561

15.3.7 安全数据传输 562

15.3.8 用户鉴别 563

15.3.9 过程性安全 565

15.4 servlet过滤器 566

15.4.1 一个简单的过滤器 567

15.4.2 一个测试servlet 568

15.4.3 声明和映射过滤器 569

15.4.4 过滤servlet请求 570

15.4.5 过滤servlet响应 572

15.5 使用Ant构建WAR文件 575

15.5.1 面向开发的目录布局 575

15.5.2 使用Ant部署和重新部署WAR 577

15.6 实现Web Services 577

15.6.1 定义服务 578

15.6.2 回显服务 578

15.6.3 使用服务 579

15.6.4 数据类型 581

15.7 结论 582

第16章 Swing 583

16.1 组件 586

16.1.1 对等对象 588

16.1.2 模型-视图-控制器框架 589

16.1.3 绘制 590

16.1.4 启用和禁用组件 591

16.1.5 焦点 591

16.1.6 其他组件方法 592

16.1.7 布局管理器 594

16.1.8 边距 594

16.1.9 Z顺序(组件入栈) 595

16.1.10 revalidate()和doLayout()方法 595

16.1.11 管理组件 596

16.1.12 监听组件 596

16.1.13 窗口和框架 596

16.1.14 控制框架的其他方法 598

16.1.15 使用内容格 598

16.1.16 桌面集成 599

16.2 事件 601

16.2.1 事件接收者和监听者接口 602

16.2.2 事件源 603

16.2.3 事件发送 605

16.2.4 事件类型 606

16.2.5 java.awt.event.InputEvent类 606

16.2.6 InputEvent中的鼠标和按键修饰符 606

16.2.7 焦点事件 608

16.3 事件总结 609

16.3.1 适配器类 612

16.3.2 哑适配器 615

16.4 AWT Robot 615

16.5 Swing中的多线程 616

第17章 使用Swing组件 620

17.1 按钮和标签 620

17.1.1 按钮和标签中的HTML文本 623

17.2 复选框和单选钮 624

17.3 列表框和组合框 626

17.4 增减器 629

17.5 边框 632

17.6 菜单 635

17.7 PopupMenu类 638

17.8 JScrollPane类 642

17.9 JSplitPane类 644

17.10 JTabbedPane类 646

17.11 滚动条和滑块 650

17.12 对话框 652

17.12.1 文件选择对话框 654

17.12.2 颜色选择器 657

第18章 再谈Swing组件 658

18.1 文本组件 658

18.1.1 TextEntryBox应用 659

18.1.2 格式化文本 661

18.1.3 过滤输入 662

18.1.4 验证数据 664

18.1.5 有关密码的问题 665

18.1.6 共享数据模型 666

18.1.7 自由地使用HTML和RTF 667

18.1.8 自行管理文本 670

18.2 焦点导航 673

18.2.1 树 674

18.2.2 节点和模型 675

18.2.3 保存树 675

18.2.4 树事件 675

18.2.5 一个完整的例子 676

18.3 表 679

18.3.1 第一步:不劳而获 679

18.3.2 第二步:创建一个表模型 681

18.3.3 第三步:一个简单的电子表格应用 684

18.3.4 排序和过滤 687

18.3.5 打印JTables 689

18.4 桌面 690

18.5 可插拔观感 691

18.6 创建定制组件 694

18.6.1 生成事件 694

18.6.2 Dial组件 695

第19章 布局管理器 700

19.1 FlowLayout 702

19.2 GridLayout 703

19.3 BorderLayout 704

19.4 BoxLayout 707

19.5 CardLayout 708

19.6 GridBagLayout 710

19.6.1 GridBagConstraints类 710

19.6.2 表格坐标 712

19.6.3 填充约束 713

19.6.4 行跨度和列跨度 715

19.6.5 权值 716

19.6.6 锚定 718

19.6.7 间距和边距 719

19.6.8 相对定位 720

19.6.9 组合布局 721

19.7 非标准布局管理器 725

19.8 绝对定位 725

第20章 使用2D API绘图 727

20.1 整体结构 727

20.2 表现通道 729

20.3 2D API快速浏览 732

20.3.1 填充形状 732

20.3.2 绘制形状轮廓 732

20.3.3 便利方法 733

20.3.4 绘制文本 734

20.3.5 绘制图像 734

20.3.6 完整的Iguana 735

20.4 填充形状 738

20.4.1 纯色 738

20.4.2 颜色渐变 739

20.4.3 纹理 739

20.4.4 桌面颜色 739

20.5 描画形状轮廓 740

20.6 使用字体 741

20.7 显示图像 746

20.7.1 Image类 746

20.7.2 图像观察者 748

20.7.3 缩放和大小 749

20.8 绘制技术 750

20.8.1 双缓冲 752

20.8.2 使用剪裁的有限绘制 753

20.8.3 屏幕外绘制 756

20.9 打印 759

第21章 使用图像及其他媒体 761

21.1 Loading Images 762

21.1.1 ImageObserver 762

21.1.2 MediaTracker 764

21.1.3 ImageIcon 766

21.1.4 ImageIO 767

21.2 生成图像数据 768

21.2.1 绘制动画 768

21.2.2 BufferedImage剖析 771

21.2.3 颜色模型 773

21.2.4 创建图像 774

21.2.5 更新BufferedImage 776

21.3 过滤图像数据 779

21.3.1 ImageProcessor如何工作 781

21.3.2 将Image转换为BufferedImage 782

21.3.3 使用RescaleOp类 782

21.3.4 使用Affine TransformOp类 783

21.4 保存图像数据 784

21.5 简单音频 784

21.6 Java媒体框架 786

第22章 JavaBeans 789

22.1 什么是Bean 789

22.2 The NetBeans IDE 791

22.3 特性和定制器 795

22.4 事件关联和适配器 797

22.4.1 控制Juggler 798

22.4.2 分子运动 800

22.5 绑定特性 801

22.6 构建Bean 803

22.6.1 The Dial Bean 803

22.6.2 特性的设计模式 806

22.7 可视化设计的限制 807

22.8 串行化与代码生成 808

22.9 使用BeanInfo进行定制 809

22.10 用手写代码使用Bean 813

22.10.1 Bean实例化和类型管理 813

22.10.2 使用串行化Bean 814

22.10.3 使用反射完成运行时事件关联 816

22.11 BeanContext和BeanContextService 818

22.12 Java激活框架 818

22.13 Enterprise JavaBeans和POJO-Based Enterprise Frameworks 819

第23章 Applets 820

23.1 基于浏览器的应用政治 820

23.2 Applet支持和Java插件 822

23.3 JApplet类 822

23.3.1 Applet生命期 824

23.3.2 Applet安全沙箱 826

23.3.3 获得Applet资源 827

23.3.4 标签 831

23.3.5 属性 832

23.3.6 参数 832

23.3.7 Applet的替代品 833

23.3.8 完整的标签 833

23.3.9 加载类文件 835

23.3.10 包 835

23.3.11 查看applet 836

23.4 Java Web Start 836

23.5 结论 837

第24章 XML 838

24.1 本章主题 838

24.2 背景知识点拨 839

24.2.1 文本与二进制 840

24.2.2 通用解析器 840

24.2.3 XML的状态 840

24.2.4 The XML APIs 841

24.2.5 XML和Web浏览器 841

24.3 XML基础 841

24.3.1 属性 842

24.3.2 XML文档 843

24.3.3 编码 843

24.3.4 命名空间 844

24.3.5 验证 845

24.3.6 HTML向XHTML的转换 845

24.4 SAX 845

24.4.1 The SAX API 846

24.4.2 使用SAX构建模型 847

24.4.3 XML编码器/ 解码器 853

24.5 DOM 854

24.5.1 DOM API 854

24.5.2 试验DOM 855

24.5.3 用DOM生成XML 856

24.5.4 JDOM 857

24.6 XPath 858

24.6.1 节点 859

24.6.2 谓词 860

24.6.3 函数 861

24.6.4 XPath API 861

24.6.5 XMLGrep 862

24.7 XInclude 863

24.8 验证文档 865

24.8.1 使用文档验证 866

24.8.2 DTDs 866

24.8.3 XML Schema 868

24.8.4 验证API 872

24.9 JAXB和代码生成 874

24.9.1 注解我们的模型 874

24.9.2 从一个XML架构生成一个Java模型 880

24.9.3 从Java模型生成一个XML架构 880

24.10 用XSL/XSLT转换文档 880

24.10.1 XSL基础知识 881

24.10.2 转换动物园名册 883

24.10.3 XSLTransform 885

24.10.4 浏览器中的XSL 886

24.11 Web服务 886

24.12 本书的结尾 887

附录A Eclipse IDE 888

A.1 IDE战争 889

A.2 Eclipse入门 889

A.3 使用Eclipse 890

A.3.1 获取源代码 891

A.3.2 布局 892

A.3.3 运行示例 893

A.3.4 构建基于Ant的示例 894

A.3.5 独特示例 894

A.4 Eclipse功能 894

A.4.1 编码快捷 894

A.4.2 自动更正 895

A.4.3 重构 896

A.4.4 区分文件 897

A.4.5 组织导入 897

A.4.6 格式化源代码 897

A.5 结语 897

附录B BeanShell:简单Java脚本 898

B.1 运行BeanShell 898

B.2 Java语句和表达式 899

B.3 BeanShell命令 900

B.4 脚本化方法和对象 901

B.5 修改类路径 903

B.6 更多内容 903

资源截图:

1.jpg

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。