Java运行时环境(Java Runtime Environment,简称JRE)是一个软件包,提供了运行Java应用程序所需的核心组件。它是Java平台的一部分,主要用于执行Java程序,而不是用于开发。以下是关于JRE的详细信息:
1. JRE的组成
JRE主要由以下几个部分组成:
-
Java虚拟机(JVM): JVM是JRE的核心部分,负责执行Java字节码。它提供了Java程序的运行环境,包括内存管理、垃圾回收和线程管理等功能。
-
Java类库: JRE包含了Java标准类库(Java Standard Library),这些类库提供了Java程序所需的基本功能,如输入输出、网络编程、数据结构等。
-
Java命令行工具: JRE还包括一些命令行工具,如
java
(用于运行Java程序)和javaw
(用于在没有控制台窗口的情况下运行Java程序)。
2. JRE的功能
-
执行Java程序: JRE的主要功能是执行Java应用程序。用户可以通过命令行或图形界面启动Java程序。
-
提供运行环境: JRE为Java程序提供了一个跨平台的运行环境,使得Java程序可以在不同的操作系统上运行,而无需修改代码。
-
支持多种Java版本: JRE支持不同版本的Java,包括Java SE(标准版)、Java EE(企业版)和Java ME(微型版)。
3. JRE与JDK的区别
-
JRE(Java Runtime Environment): 仅包含运行Java程序所需的组件,不包括开发工具。适合普通用户和运行Java应用的环境。
-
JDK(Java Development Kit): 包含JRE以及用于开发Java应用程序的工具,如编译器(javac)、调试器和其他开发工具。适合开发人员。
4. 安装JRE
-
下载: 用户可以从Oracle官方网站或其他提供Java的官方网站下载JRE。通常,JRE会与JDK一起提供。
-
安装: 下载后,按照安装向导的指示进行安装。安装完成后,用户可以通过命令行或图形界面运行Java程序。
5. 使用JRE
-
运行Java程序: 使用命令行运行Java程序的基本命令如下:
java -jar your_application.jar
其中
your_application.jar
是要运行的Java应用程序的JAR文件。 -
设置环境变量: 在某些操作系统中,可能需要设置
JAVA_HOME
和PATH
环境变量,以便系统能够找到Java命令。
6. JRE的版本
JRE的版本通常与Java SE的版本相对应。例如,Java SE 8对应的JRE版本是1.8,Java SE 11对应的JRE版本是11,依此类推。用户应根据需要选择合适的版本。
总结
Java运行时环境(JRE)是执行Java应用程序所需的核心组件,包含Java虚拟机、Java类库和一些命令行工具。它为Java程序提供了一个跨平台的运行环境,适合普通用户和运行Java应用的环境。对于开发人员,则需要安装Java开发工具包(JDK),其中包含JRE和开发工具。
Java标准类库(Java Standard Library)使用流程
Java标准类库(Java Standard Library)是Java开发中不可或缺的一部分,提供了丰富的类和接口,帮助开发者实现各种功能。使用Java标准类库的基本步骤如下:
1. 设置开发环境
在使用Java标准类库之前,确保你已经安装了Java开发工具包(JDK)和一个合适的集成开发环境(IDE),如Eclipse、IntelliJ IDEA或NetBeans。
2. 创建Java项目
在你的IDE中创建一个新的Java项目。通常,IDE会提供向导来帮助你设置项目结构。
3. 导入类库
Java标准类库中的大多数类都在java
和javax
包中。你可以直接在代码中使用这些类,而不需要额外的导入步骤(对于java.lang
包中的类,IDE会自动导入)。对于其他包,你需要使用import
语句。
例如,如果你想使用ArrayList
类,你需要在代码的顶部添加以下导入语句:
import java.util.ArrayList;
4. 使用类库中的类和方法
你可以直接创建类的实例并调用其方法。以下是一些常见的使用示例:
示例 1: 使用ArrayList
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 创建一个ArrayList
ArrayList<String> list = new ArrayList<>();
// 添加元素
list.add("Hello");
list.add("World");
// 遍历元素
for (String item : list) {
System.out.println(item);
}
}
}
示例 2: 使用File
和FileReader
进行文件操作
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
public class FileReadExample {
public static void main(String[] args) {
File file = new File("example.txt");
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
示例 3: 使用Socket
进行网络编程
import java.io.*;
import java.net.*;
public class SimpleClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 12345)) {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("Hello Server");
String response = in.readLine();
System.out.println("Server response: " + response);
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结
使用Java标准类库非常简单,只需导入所需的类,创建实例并调用方法。通过查阅文档和编写示例程序,你可以快速掌握如何使用这些类库来实现各种功能。
导入类库
在Java中,导入类库是使用Java标准类库的第一步。以下是关于如何导入类库的详细说明,包括import
语句的使用和一些示例。
1. 自动导入的类
在Java中,java.lang
包中的类是自动导入的。这意味着你可以直接使用这些类,而无需显式地使用import
语句。例如,String
、System
、Math
等类都属于java.lang
包。
public class Example {
public static void main(String[] args) {
String message = "Hello, World!";
System.out.println(message);
double result = Math.sqrt(16);
System.out.println("Square root of 16 is: " + result);
}
}
2. 使用import
语句导入类
对于其他包中的类,你需要使用import
语句来导入它们。import
语句通常放在Java文件的顶部,类定义之前。
2.1 导入单个类
如果你只需要使用一个特定的类,可以使用以下语法:
import package_name.ClassName;
例如,导入java.util.ArrayList
类:
import java.util.ArrayList;
public class Example {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
System.out.println(list);
}
}
2.2 导入整个包
如果你需要使用包中的多个类,可以使用通配符*
来导入整个包:
import package_name.*;
例如,导入java.util
包中的所有类:
import java.util.*;
public class Example {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
HashMap<String, Integer> map = new HashMap<>();
list.add("Apple");
list.add("Banana");
map.put("Apple", 1);
map.put("Banana", 2);
System.out.println(list);
System.out.println(map);
}
}
3. 导入静态成员
如果你想直接使用某个类的静态成员(方法或变量),可以使用import static
语句。例如,导入java.lang.Math
类的静态方法:
import static java.lang.Math.*;
public class Example {
public static void main(String[] args) {
double result = sqrt(16); // 直接使用sqrt方法
System.out.println("Square root of 16 is: " + result);
}
}
4. 注意事项
-
导入顺序: 通常,
import
语句的顺序是先导入Java标准库的类,然后是第三方库的类,最后是自定义类。 -
避免命名冲突: 如果导入了两个不同包中同名的类,编译器会报错。在这种情况下,你需要使用全限定名(即包括包名的类名)来消除歧义。
5. 示例代码
以下是一个完整的示例,展示了如何导入类库并使用它们:
import java.util.ArrayList;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// 使用ArrayList
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
System.out.println("Fruits: " + fruits);
// 使用HashMap
HashMap<String, Integer> fruitCount = new HashMap<>();
fruitCount.put("Apple", 5);
fruitCount.put("Banana", 3);
System.out.println("Fruit Count: " + fruitCount);
}
}
总结
在Java中,导入类库是使用标准类库的基础。通过使用import
语句,你可以轻松地访问和使用不同包中的类和接口。了解如何导入类库将帮助你更高效地编写Java程序。
import`语句运行机制
在Java编译过程中,import
语句的处理是一个重要的步骤。以下是对编译时处理import
语句的详细说明,包括每个步骤的具体内容和相关概念。
1. 解析import
语句
当Java编译器开始处理源代码时,它首先会读取文件中的所有内容,包括import
语句。编译器会识别出哪些类是被导入的,并将这些信息存储在内部数据结构中,以便后续使用。
- 语法检查: 编译器会检查
import
语句的语法是否正确,例如,确保包名和类名的拼写是正确的。 - 重复导入: 如果同一个类被多次导入,编译器会忽略重复的
import
语句,因为它只需要一次引用。
2. 查找类文件
在解析完import
语句后,编译器会根据导入的类名查找相应的类文件。这一过程涉及以下几个方面:
- 类路径(Classpath): 编译器会在指定的类路径中查找被导入的类。类路径是一个或多个目录和JAR文件的集合,编译器会在这些位置查找类文件。
- 包结构: 编译器会根据包名的层次结构查找类文件。例如,
java.util.ArrayList
类的文件路径应该是java/util/ArrayList.class
。 - 错误处理: 如果编译器在类路径中找不到某个被导入的类,它会抛出编译错误,提示开发者该类未找到。
3. 生成字节码
一旦编译器成功找到并解析了所有的类,接下来它会生成字节码。这个过程包括以下几个步骤:
- 字节码生成: 编译器将源代码转换为字节码,字节码是Java虚拟机(JVM)可以理解的中间代码。字节码文件的扩展名为
.class
。 - 不包含
import
语句: 在生成的字节码中,import
语句不会被包含。字节码只包含类的名称和方法的实现,而不需要知道哪些类被导入。编译后的字节码文件只关心类的定义和实现,而不关心源代码中的导入信息。 - 优化: 编译器可能会对字节码进行一些优化,以提高运行时的性能。
4. 示例
以下是一个简单的示例,展示了import
语句的编译过程:
import java.util.ArrayList;
public class Example {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Hello");
System.out.println(list);
}
}
编译过程:
- 解析
import
语句: 编译器识别到import java.util.ArrayList;
,并准备查找ArrayList
类。 - 查找类文件: 编译器在类路径中查找
java/util/ArrayList.class
,如果找到,则继续。 - 生成字节码: 编译器将
Example
类的源代码转换为字节码,生成Example.class
文件。此文件中不包含import
语句。
5. 总结
在Java编译过程中,import
语句的处理是一个重要的步骤,涉及解析、查找和生成字节码。理解这一过程有助于开发者更好地管理类的引用,避免命名冲突,并确保代码的正确性。通过合理使用import
语句,开发者可以提高代码的可读性和可维护性。
Java命令行工具
Java Runtime Environment (JRE) 除了提供运行 Java 程序所需的核心库和虚拟机外,还包括一些命令行工具,这些工具可以帮助开发者和用户更方便地运行和管理 Java 应用程序。以下是一些主要的 Java 命令行工具的介绍:
1. java
命令
java
命令是 JRE 中最常用的工具之一,用于运行 Java 应用程序。它的基本语法如下:
java [options] class [args...]
- options: 可选的参数,用于设置 Java 虚拟机的行为,例如内存设置、系统属性等。
- class: 要运行的 Java 类的名称(不带
.class
后缀)。 - args: 传递给主方法的参数。
示例
假设有一个名为 HelloWorld
的 Java 类,包含一个 main
方法:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
可以使用以下命令编译并运行它:
javac HelloWorld.java # 编译
java HelloWorld # 运行
2. javaw
命令
javaw
命令与 java
命令类似,但它用于在没有控制台窗口的情况下运行 Java 应用程序。通常用于图形用户界面(GUI)应用程序,因为它不会打开命令行窗口。
示例
如果你有一个 GUI 应用程序,可以使用 javaw
来运行它:
javaw MyGuiApplication
3. 其他常用命令行工具
除了 java
和 javaw
,JRE 还包括其他一些有用的命令行工具:
-
javac
: Java 编译器,用于将 Java 源代码文件(.java
)编译成字节码文件(.class
)。javac MyClass.java
-
jar
: 用于创建、查看和提取 JAR(Java Archive)文件的工具。JAR 文件是将多个 Java 类文件和相关资源打包在一起的压缩文件。jar cf myapp.jar *.class # 创建 JAR 文件 jar tf myapp.jar # 查看 JAR 文件内容
-
javadoc
: 用于生成 Java 代码的 API 文档。它会根据代码中的注释生成 HTML 格式的文档。javadoc -d doc MyClass.java
-
jconsole
: Java 监控和管理工具,用于监控 Java 应用程序的性能和资源使用情况。 -
jps
: Java 进程状态工具,用于列出当前运行的 Java 进程。jps
-
jstack
: 用于打印 Java 进程的线程堆栈信息,通常用于调试。
4. 总结
Java 命令行工具为开发者和用户提供了强大的功能,使得编译、运行和管理 Java 应用程序变得更加方便。通过使用这些工具,开发者可以更高效地进行 Java 开发和调试。了解这些工具的用法和功能是学习 Java 的重要部分。
执行Java程序
Java Runtime Environment (JRE) 的主要功能之一是执行 Java 应用程序。无论是通过命令行还是图形用户界面,JRE 都能够有效地加载和运行 Java 程序。以下是关于如何执行 Java 程序的详细说明,包括命令行和图形界面的使用。
1. 通过命令行执行 Java 程序
使用命令行执行 Java 程序是最常见的方式之一。以下是执行 Java 程序的基本步骤:
1.1 编写 Java 程序
首先,编写一个简单的 Java 程序并保存为 .java
文件。例如,创建一个名为 HelloWorld.java
的文件,内容如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
1.2 编译 Java 程序
在命令行中,使用 javac
命令编译 Java 源代码文件:
javac HelloWorld.java
这将生成一个名为 HelloWorld.class
的字节码文件。
1.3 执行 Java 程序
使用 java
命令运行编译后的 Java 程序:
java HelloWorld
输出将是:
Hello, World!
2. 通过图形用户界面执行 Java 程序
许多 Java 应用程序,尤其是图形用户界面(GUI)应用程序,可以通过图形界面启动。以下是一些常见的方式:
2.1 使用 Java Web Start
Java Web Start 是一种技术,允许用户通过 Web 浏览器下载和运行 Java 应用程序。用户只需点击链接,Java Web Start 将自动下载并启动应用程序。
2.2 使用桌面快捷方式
对于已安装的 Java 应用程序,用户可以创建桌面快捷方式。双击快捷方式将启动相应的 Java 应用程序。
2.3 使用集成开发环境(IDE)
许多开发者使用集成开发环境(IDE)如 Eclipse、IntelliJ IDEA 或 NetBeans 来开发和运行 Java 程序。在这些 IDE 中,用户可以通过点击“运行”按钮来执行 Java 程序,而不需要手动编译和运行。
3. JRE 的执行过程
无论是通过命令行还是图形界面,JRE 执行 Java 程序的过程大致如下:
- 加载类: JRE 根据类的名称查找并加载相应的字节码文件(
.class
文件)。 - 链接: JRE 将类的字节码与其他类的字节码进行链接,确保所有依赖的类都已加载。
- 初始化: JRE 初始化类的静态变量和静态代码块。
- 执行: JRE 调用
main
方法,开始执行程序的逻辑。
4. 总结
JRE 的主要功能是执行 Java 应用程序,用户可以通过命令行或图形用户界面启动 Java 程序。命令行方式适合开发和调试,而图形用户界面则更适合普通用户使用。无论使用哪种方式,JRE 都能够有效地加载和运行 Java 程序,确保其在不同平台上的可移植性和一致性。
JRE 的执行过程
Java Runtime Environment (JRE) 执行 Java 程序的过程是一个系统化的步骤,确保 Java 应用程序能够正确地加载、链接、初始化和执行。以下是 JRE 执行 Java 程序的详细过程:
1. 加载类
在执行 Java 程序时,JRE 首先需要加载所需的类。这个过程包括以下几个步骤:
- 查找类: JRE 根据用户提供的类名(通常是包含
main
方法的类)查找相应的字节码文件(.class
文件)。它会在类路径(Classpath)中查找这些文件。 - 加载字节码: 一旦找到相应的
.class
文件,JRE 会将其字节码加载到内存中。这个过程是通过类加载器(ClassLoader)完成的,类加载器负责将字节码转换为 JVM 可以理解的格式。
2. 链接
在类被加载后,JRE 进行链接操作。链接过程包括以下几个步骤:
- 验证: JRE 验证字节码的正确性,确保它符合 Java 语言规范,并且没有安全问题。这一步是为了防止恶意代码的执行。
- 准备: JRE 为类的静态变量分配内存,并将其初始化为默认值(例如,数字类型为 0,布尔类型为 false,引用类型为 null)。
- 解析: JRE 将类中的符号引用(如方法和字段的名称)解析为直接引用,确保所有依赖的类和方法都已加载并可以被访问。
3. 初始化
在链接完成后,JRE 进入初始化阶段:
- 初始化静态变量: JRE 会执行类的静态初始化块和静态变量的赋值操作。这些操作在类被首次使用时执行。
- 执行静态代码块: 如果类中定义了静态代码块,这些代码块会在类初始化时被执行。静态代码块通常用于执行一些一次性的初始化操作。
4. 执行
最后,JRE 开始执行 Java 程序的逻辑:
- 调用
main
方法: JRE 查找并调用main
方法,这是 Java 程序的入口点。main
方法的签名通常是public static void main(String[] args)
。 - 传递参数: 如果在命令行中提供了参数,这些参数会被传递给
main
方法的args
数组。 - 执行程序逻辑: JRE 按照
main
方法中的代码顺序执行程序的逻辑,调用其他方法、创建对象等。
5. 结束执行
当 main
方法执行完毕后,JRE 会进行以下操作:
- 清理资源: JRE 会释放与程序相关的资源,例如内存和文件句柄。
- 退出 JVM: 如果没有其他非守护线程在运行,JRE 将退出 Java 虚拟机(JVM),结束程序的执行。
总结
JRE 执行 Java 程序的过程包括加载类、链接、初始化和执行四个主要步骤。这个过程确保了 Java 应用程序能够在不同平台上以一致的方式运行,充分利用了 Java 的跨平台特性和安全性。理解这个执行过程对于开发和调试 Java 应用程序至关重要。
JRE 的执行过程代码逻辑实现
Java Runtime Environment (JRE) 的执行过程涉及多个步骤,包括类的加载、链接、初始化和执行。虽然 JRE 的具体实现是由 Java 虚拟机(JVM)提供的,且其内部逻辑相对复杂,但我们可以通过一些简单的代码示例来模拟这个过程的逻辑。
以下是一个简化的示例,展示了如何在 Java 中实现类似于 JRE 执行过程的逻辑。请注意,这只是一个概念性的示例,实际的 JRE 和 JVM 实现要复杂得多。
1. 加载类
我们可以创建一个简单的类加载器来模拟类的加载过程。
import java.util.HashMap;
import java.util.Map;
class ClassLoader {
private Map<String, Class<?>> loadedClasses = new HashMap<>();
public Class<?> loadClass(String className) throws Exception {
if (loadedClasses.containsKey(className)) {
return loadedClasses.get(className);
}
// 模拟加载类的过程
System.out.println("Loading class: " + className);
Class<?> clazz = Class.forName(className);
loadedClasses.put(className, clazz);
return clazz;
}
}
2. 链接
链接过程可以通过验证和准备静态变量来模拟。
class Linker {
public void link(Class<?> clazz) {
// 验证
System.out.println("Verifying class: " + clazz.getName());
// 准备
System.out.println("Preparing class: " + clazz.getName());
// 这里可以初始化静态变量等
}
}
3. 初始化
初始化过程可以通过执行静态代码块和静态变量的赋值来模拟。
class Initializer {
public void initialize(Class<?> clazz) throws Exception {
System.out.println("Initializing class: " + clazz.getName());
// 执行静态代码块
// 这里可以调用静态方法或初始化静态变量
}
}
4. 执行
执行过程可以通过调用 main
方法来模拟。
class Executor {
public void execute(Class<?> clazz) throws Exception {
System.out.println("Executing main method of class: " + clazz.getName());
clazz.getMethod("main", String[].class).invoke(null, (Object) new String[]{});
}
}
5. 示例程序
最后,我们可以创建一个示例程序,展示整个执行过程。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
public class JRESimulation {
public static void main(String[] args) {
try {
ClassLoader classLoader = new ClassLoader();
Linker linker = new Linker();
Initializer initializer = new Initializer();
Executor executor = new Executor();
// 加载类
Class<?> clazz = classLoader.loadClass("HelloWorld");
// 链接
linker.link(clazz);
// 初始化
initializer.initialize(clazz);
// 执行
executor.execute(clazz);
} catch (Exception e) {
e.printStackTrace();
}
}
}
6. 运行结果
当你运行 JRESimulation
类时,输出将是:
Loading class: HelloWorld
Verifying class: HelloWorld
Preparing class: HelloWorld
Initializing class: HelloWorld
Executing main method of class: HelloWorld
Hello, World!
总结
这个示例展示了 JRE 执行 Java 程序的基本逻辑,包括类的加载、链接、初始化和执行。虽然实际的 JRE 和 JVM 实现要复杂得多,但这个简化的示例可以帮助理解 JRE 的执行过程。
提供运行环境
Java Runtime Environment (JRE) 是 Java 平台的重要组成部分,它为 Java 程序提供了一个跨平台的运行环境,使得 Java 应用程序能够在不同的操作系统上运行,而无需修改代码。这一特性是 Java 语言设计的核心之一,通常被称为“编写一次,处处运行”(Write Once, Run Anywhere,WORA)。
JRE 的跨平台特性
-
平台无关性:
- Java 程序在编译后生成的是字节码(
.class
文件),而不是特定于某一平台的机器代码。字节码是中间代码,可以在任何安装了 JRE 的设备上运行。 - JRE 提供了 Java 虚拟机(JVM),它负责将字节码转换为特定平台的机器代码。这样,Java 程序可以在 Windows、macOS、Linux 等不同操作系统上运行,而无需修改源代码。
- Java 程序在编译后生成的是字节码(
-
标准化的 API:
- JRE 提供了一组标准的 Java API(应用程序编程接口),这些 API 在不同平台上具有相同的功能和行为。这使得开发者可以编写与平台无关的代码,利用 JRE 提供的功能。
-
内存管理和垃圾回收:
- JRE 负责内存管理,包括对象的分配和垃圾回收。这一特性使得开发者不需要关心底层的内存管理细节,从而提高了开发效率。
-
安全性:
- JRE 提供了一个安全模型,允许开发者在受控的环境中运行 Java 应用程序。通过沙箱机制,JRE 可以限制 Java 程序对系统资源的访问,增强了安全性。
如何使用 JRE 运行 Java 程序
以下是使用 JRE 运行 Java 程序的基本步骤:
-
安装 JRE:
- 首先,用户需要在其操作系统上安装 JRE。可以从 Oracle 官方网站 或其他提供 JRE 的网站下载并安装。
-
编写 Java 程序:
- 使用文本编辑器或集成开发环境(IDE)编写 Java 程序。例如,创建一个名为
HelloWorld.java
的文件,内容如下:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
- 使用文本编辑器或集成开发环境(IDE)编写 Java 程序。例如,创建一个名为
-
编译 Java 程序:
- 使用
javac
命令编译 Java 源代码文件,生成字节码文件:
javac HelloWorld.java
这将生成一个名为
HelloWorld.class
的字节码文件。 - 使用
-
运行 Java 程序:
- 使用
java
命令运行编译后的 Java 程序:
java HelloWorld
输出将是:
Hello, World!
- 使用
示例:跨平台运行
假设你在 Windows 上编写并编译了 Java 程序,生成了 HelloWorld.class
文件。你可以将这个 .class
文件复制到其他操作系统(如 macOS 或 Linux)上,只需确保在目标系统上安装了 JRE,然后使用相同的 java
命令运行它:
java HelloWorld
无论在哪个平台上,输出都将是相同的:
Hello, World!
总结
JRE 为 Java 程序提供了一个跨平台的运行环境,使得 Java 应用程序能够在不同的操作系统上运行,而无需修改代码。这一特性使得 Java 成为一种非常流行的编程语言,广泛应用于企业级应用、移动应用、Web 应用等多个领域。通过 JRE,开发者可以专注于业务逻辑的实现,而不必担心底层平台的差异。