IBM Java


1、Java 平台组件

Java 平台包含以下组件。

Java 语言

跟任何编程语言一样,Java 语言拥有自己的结构、语法规则和编程范例。Java 语言的编程范例基于面向对象编程 (OOP) 的概念,该语言的特性支持这一概念。

Java 语言是 C 语言的一种衍生语言,所以它的语法规则与 C 语言的语法规则非常相似。例如,方法使代码模块化并使用花括号({和})分隔,变量需要在使用之前声明。

在结构上,Java 语言以包作为开头。包是 Java 语言的命名空间机制。包中包含类,而类中包含方法、变量、常量等。您将在本学习路径中了解 Java 语言的各个部分。

Java 编译器

在 Java 平台编写程序时,您会在 .java 文件中编写源代码,然后编译它们。编译器针对语言的语法规则来检查代码,然后将字节码写出到 .class 文件中。字节码是一组需要在 Java 虚拟机 (JVM) 上运行的指令。添加了这一抽象级别后,Java 编译器不同于其他语言编译器,其他编译器会写出适合运行程序的 CPU 芯片集的汇编语言指令。

JVM

在运行时,JVM 读取并解释 .class 文件,在编写的 JVM 的目标原生硬件平台上执行程序的指令。JVM 解释字节码就像 CPU 解释汇编语言指令一样。不同之处在于,JVM 是一个专为特定平台编写的软件。JVM 是 Java 语言的 “编写一次、随处运行” 原则的核心。您的代码可在任何拥有合适的 JVM 实现的芯片集上运行。JVM 可用于 Linux 和 Windows 等主要平台,在针对移动电话和爱好者芯片的 JVM 中也已实现了 Java 语言的子集。

垃圾收集器

Java 平台不会强制您时刻关注内存分配(或使用第三方库来完成此工作),它提供了开箱即用的内存管理功能。当您的 Java 应用程序在运行时创建一个对象实例时,JVM 会自动从堆中为该对象分配内存空间— 堆是一个专门留给您的程序使用的内存池。Java垃圾收集器在后台运行,跟踪记录应用程序不再需要哪些对象并从它们回收内存。这种内存处理方法称为隐式内存管理,因为它不需要您编写任何内存处理代码。垃圾收集是 Java 平台性能的基本特征之一。

Java 开发工具包

下载 Java 开发工具包 (JDK),您会获得 — 包括编译器和其他工具 — 包含预构建的实用程序的完整类库,以帮助您完成最常见的应用程序开发任务。了解 JDK 包和库的范围的最佳方式是查阅官方在线 Java API 文档— 也称为 Javadoc。可观看这个快速演示,了解如何浏览 Javadoc。

Java 运行时环境

Java 运行时环境(JRE;也称为 Java 运行时)包含 JVM、代码库和运行以 Java 语言编写的程序所必要的组件。JRE 可用于多种平台。您可依据 JRE 许可条款,在您的应用程序中自由地重新分发 JRE,为应用程序的用户提供一个运行您的软件的平台。JRE 包含在 JDK 中。


2、什么是对象?

Java 语言(基本上)是面向对象的。本单元使用结构化编程作为对比基础,简要介绍 OOP 语言的概念和原理。

面向对象的语言遵循的编程模式不同于结构化编程语言,比如 C 和 COBOL。结构化编程范例是高度面向数据的:您拥有数据结构,然后程序指令处理该数据。面向对象的语言(比如 Java 语言)将数据和程序指令组合到对象中。

对象是一个自成一体的实体,它仅包含属性和行为,不含任何其他内容。不需要拥有包含字段(属性)的数据结构并将该结构传递到处理它(行为)的所有程序逻辑,在面向对象的语言中,数据和程序逻辑组合在一起。这种组合可在显著不同的粒度级别上执行,从细粒度对象(比如Number)到粗粒度对象(比如一个大型银行应用程序中的FundsTransfer服务)。

父和子对象

父对象用作派生更复杂的子对象的结构基础。子对象看起来像它的父对象,但更加特殊化。在面向对象的范例中,可以重用父对象的通用属性和行为,向它的子对象添加不同的属性和行为。

对象通信和协调

对象通过发送消息(在 Java 用语中称为方法调用)来与其他对象通信。而且,在面向对象的应用程序中,程序代码协调对象之间的活动,以在特定应用程序域的上下文内执行任务。

对象摘要

一个精心编写的对象:

  • 拥有明确定义的边界
  • 执行一组有限的活动
  • 仅知道它的数据和它完成活动所需的任何其他对象

在本质上,对象是一个离散的实体,它仅包含执行其任务而必要的对其他对象的依赖关系。

是时候看看 Java 对象是什么样子了。

示例:person 对象

我首先介绍一个基于一种常见的应用程序开发场景的示例:一个由Person对象表示的人。

从对象的定义可以知道,一个对象有两个主要元素:属性和行为。下面展示了这些元素如何应用到Person对象。

作为一条经验规则,可将对象的属性视为名词,将行为视为动词。

属性(名词)

一个人可能有哪些属性?一些常见的属性包括:

  • 姓名、年龄、身高、体重、眼睛颜色、性别

您可能会想到更多(而且您始终可以在以后添加更多属性),但此列表是一个不错的开端。

行为(动词)

一个真实的人可以做各种各样的事,但对象行为通常与某种应用程序上下文相关。举例而言,在业务应用程序上下文中,您可能想询问您的Person对象,“您的身体质量指数 (BMI) 是多少?”作为响应,Person将使用它的身高和体重属性的值来计算 BMI。

Person对象背后可能隐藏着更复杂的逻辑,不过我们暂时假设Person具有以下行为:

  • 计算 BMI、打印所有属性

状态和字符串

状态是 OOP 中的一个重要概念。对象的状态在任何时刻都由它的属性值来表示。

对于Person,它的状态由姓名、年龄、身高和体重等属性来定义。如果想提供多个属性,可使用String类来完成,稍后将更详细地介绍该类。

结合使用状态和字符串的概念,可以对Person说,“通过向我提供您的属性列表(或String)来告诉我您是谁。”

OOP 的原则

如果您有结构化编程的背景,您可能还不清楚 OOP 的价值优势。毕竟,一个人的属性和检索(并转换)这些值的任何逻辑都可使用 C 或 COBOL 编写。如果理解了它的定义原则,OOP 范例的优势就会更加明显:封装、继承和多态性。

封装

回想一下,一个对象是离散的或独立的。此特征是封装的工作原理。隐藏是另一个有时用于表达对象的独立、受保护性质的术语。

无论使用哪个术语,重要的是对象在它的状态和行为与外部世界之间保持一条界线。像真实世界中的物体一样,计算机编程中使用的对象与使用它们的应用程序中的不同对象类别拥有各种各样的关系。

在 Java 平台上,可以使用访问修饰符(后面将会介绍)来区分公共与私有对象关系的性质。公共访问是完全开放的,而私有访问意味着对象的属性仅可在对象自身内访问。

公共/私有边界采取面向对象的封装原则。在 Java 平台上,可以逐个对象地改变该边界的强度。封装是 Java 语言的一个强大特性。

继承

在结构化编程中,常常会复制一个结构,为它提供一个新名称,然后添加或修改属性,使新实体(比如一个Account记录)不同于它的原始来源。随着时间的推移,此方法会生成大量重复代码,这可能带来维护问题。

OOP 引入了继承的概念,使得特殊化的类 — 无需额外的代码 — 可以 “复制” 它们要特殊化的来源类的属性和行为。如果其中一些属性或行为需要更改,您可覆盖它们。您更改的唯一的源代码是创建特殊化的类所需的代码。来源对象称为父对象,新的特殊化对象称为子对象— 我们已介绍过这些术语。

假设您在编写一个人力资源应用程序并想使用Person类作为一个名为Employee的新类的基础(也称为超类)。作为Person的子类,Employee将拥有Person类的所有属性,以及更多属性,比如:

  • 纳税人识别编号、员工编号、工资

继承使得创建新Employee类很容易,不需要手动复制所有Person代码。

多态性

多态性是一种比封装和继承更难掌握的概念。在本质上,多态性表示属于一个分层结构的同一个分支的对象,在发送相同的消息时(也即在被告知执行同一件事时),可通过不同方式表现出该行为。

要了解多态性如何应用到业务应用程序上下文,可返回查看Person示例。还记得告诉Person将它的属性格式化到一个String中吗?多态性使Person可以依据它的Person类型,以各种不同的方式表示它的属性。

多态性是您将在 Java 平台上的 OOP 中遇到的更复杂概念之一,不属于这个入门课程的介绍范畴。后续单元将更深入地探索封装和继承。

不是一种单纯的面向对象语言

有两种性质可区分 Java 语言与单纯的面向对象语言(比如 Smalltalk)。首先,Java 语言是对象和原语类型的一种混合。其次,使用 Java,您可编写代码来将一个对象的内部情况向任何其他使用它的对象公开。

Java 语言为您提供了必要的工具来遵循合理的 OOP 原则,生成合理的面向对象代码。因为 Java 不是单纯面向对象的,您必须在编写代码的方式上运用一些规则— 该语言不会强制要求您执行正确的操作,所以您必须依靠自己。您将在第 12 单元 “编写良好的 Java 代码” 中获得一些技巧。

测试您的理解情况

测试您对本单元中介绍的知识的掌握情况。答案在下方。

  1. 对象是一种面向数据的实体,任何需要的程序都可以访问对象的任何数据。
    1. 对、错、有时
  2. 哪句话最准确地描述了父对象与子对象之间的关系?
    1. 父对象包含与子对象完全相同的代码。
    2. 子对象与父对象无关。
    3. 父对象继承子对象的属性和行为。
    4. 子对象包含来自父对象的代码,但更特殊化,可以定义更多属性。
  3. 精心编写的对象可以描述为:
    1. 拥有明确定义的边界,执行一些操作,而且仅知道自己的数据。
    2. 高度面向数据,对任何需要访问它的程序开放。
    3. 仅知道它执行功能所需的其他对象的信息。
    4. a 和 b
    5. a 和 c
    6. 上述所有选项
  4. 哪句话最恰当地描述了对象的属性?
    1. 属性就像对象的名词。
    2. 属性描述对象的行为。
    3. 属性可以具有您希望它们具有的任何含义— 这就是我们所说的 “开源” 的含义。
    4. a 和 c
    5. b 和 c
    6. 上述所有选项。
  5. 选择可能包含Person的一些额外属性的选项。
    1. 计算周龄
    2. 同胞数量
    3. 静止脉搏(心率)
    4. a 和 c
    5. b 和 c
    6. 上述所有选项。
  6. 哪句话最恰当地描述了对象的行为?
    1. 行为就像对象的名词。
    2. 像属性一样,行为可以随意定义— 这就是我们所说的 “开源” 的含义。
    3. 行为就像对象的动词。
    4. 上述所有选项。
  7. 封装意味着 “向所有人开放”,表示对象的内部情况对外部世界完全可见。
    1. 对、错、有时
  8. 哪句话最恰当地描述了继承?
    1. 一个对象(子对象)一般化另一个对象(父对象)的属性和行为,让该对象更加一般化。
    2. 子对象继承父对象,添加特殊的属性和行为。
    3. 创建子对象时,一种著名的最佳实践是开发人员从父对象手动复制/粘贴所有源代码,以确保不会造成任何破坏。
    4. 当子对象继承其父对象时,只有额外的属性和行为必须编码,这是 OOP 的一个好处。
    5. b 和 b
    6. b 和 d
    7. 上述所有选项。
  9. Java 是一种单纯的面向对象语言,就像 Scala 或 Smalltalk 一样。
    1. 对、错、有时
测验的答案

1.b2.d3.e4.a5.e6.c7.b8.f9.b


以上文章来自IBM(http://www.ibm.com/developerworks/cn/topics/)

IBM Java技术学习(http://www.ibm.com/developerworks/cn/java/j-perry-getting-started-with-the-java-language/index.html)




ibm_java1.6.0 ibm_javaibm_javaibm_javaibm_javaibm_javaibm_javaibm_java 立即下载

相关推荐

ibm java sdk

java 编写 IBM MQ Client 所需 ibm-java-sdk-80-win 版本,解压即用

ibm 的java实现_IBM Java Toolbox for i 实现三种基于IBM i 的身份验证策略

从图1可以看出,作为第三方Java类库,IBM Java Toolbox for i作为中间层,为上层Web应用提供各种访问底层IBM i数据与资源的服务。这其中就包括用户身份验证服务,而这也正是本文关注的重点。广义上来说,IBM Java Toolbox for i提供以下三种用户身份验证策略:基于密码的身份验证策略基于Profile Token认证的第三方身份验证策略基于Kerberos认证的...

weixin_32892145的博客 407

IBM-JAVA教程

第一章 Java语言概述.ppt 第二章 Java 编程基础.ppt 第三章 Java 核心 API的包.ppt 第四章 软件开发周期简介.ppt 第五章 Java语言的类和对象.ppt 第六章 面向对象程序设计基础.ppt 第七章 面向对象编程的高级概念.ppt 第八章 AWT与事件处理.ppt 第九章 JFC与Swing图形组件.ppt 第十章 国际化和 Applet.ppt 第十一章 输入输出处理——流的处理.ppt 第十二章 输入输出处理——文件操作.ppt 第十三章 输入输出处理——网络编程.ppt 第十四章 多线程.ppt 第十五章 异常(Exception)处理.ppt

java ibm 版本_IBM 与 Java:8、11 及更高版本

摘要IBM 的战略定位是支持开放的云优化的 Java™ 运行时。IBM 拥抱 OpenJDK,并且向 Eclipse 基金会开源了 J9 Java 虚拟机,即 Eclipse OpenJ9。IBM 基于 OpenJDK 和 OpenJ9 JVM 构建了完全开源的 Java 库,为 AdoptOpenJDK 社区做出了积极的贡献。我们建议我们的产品、业务伙伴和客户使用这些二进制文件的 LTS 版本,...

weixin_39977642的博客 1507

IBM java 教程

IBM 的java培训教程: 第一部分 Java语言 第二部分 Java 的核心 API 第三部分 Java面向对象程序设计基础 第四部分 创建和管理 Java 图形用户界面 第五部分 输入输出处理与网络 第六部分 异常处理与多线程

Android7以上抓取https数据包-无需root

手机内装一个虚拟机,然后在虚拟机内运行我需要抓包的应用,该虚拟机内是不需要证书验证的。完美解决android7.0以上https无法抓包的问题。

qq_45764684的博客 1460

ibm面试java_IBM面试题 (java方面)

1.java的为什么使用序列化一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。而实际上,Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的...

weixin_29001655的博客 498

智能制造 | 如何快速自动生成站位表及自动与BOM校验?

一、站位表(SMT行业中)是SMT上料防错的基础信息,用于对需上料物料与产线、贴片机位置、飞达规格型号、用量,建立基础资料。 SMT站位表是否正确? 首先需要人工确认站位表与SMT程序的是否符合,上料员依照站位表安装好后,确认人员需有第三方确认者 (品管确定)核对。 站位表内容包括什么? 站位表内容为:SMT站位号相对应的物料编码,元件位号,飞达大小/间距,数量等等,根据不同公司的要求而定义。 就目前来说,基本每一款贴片机都可以输出站位清单 但对于企业来说,直接输出的站位清单一般不直接使用,需要进行手动处理

vayoinfo111的博客 4944

IBM Java 是 IBM 提供的 Java 开发工具包(JDK)和运行时环境(JRE)

IBM Java 是 IBM 提供的 Java 开发工具包(JDK)和运行时环境(JRE),基于 OpenJDK 构建,针对 IBM 硬件和操作系统进行了优化。

436

基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证

基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证 文章目录前言一、工程构架二、Xilinx IP的配置1.I2S Transmitter IP配置:2.I2S Receiver IP配置:3.WM8960的配置:总结 前言 本实验基于Xilinx ZU4EV平台,也适用于ZYNQ平台。音频验证完成,记录调过程。 ①Xilinx 音频IP只支持主模式,左对齐或右对齐方式,16bit或24bit字长。 ②WM8960器件作为从模式;24bit字长;数据传输格

weixin_45637597的博客 6815

IEEE Transaction期刊模板使用注意事项

本文将总结使用IEEE Transactions系列期刊的投稿模板时的一些注意事项,包括模板本身的使用规范、参考文献的正确格式等其他内容。

weixin_39529207的博客 2万+

WebSphere是IBM公司开发的一套基于Java的应用服务器软件

WebSphere支持多种操作系统和硬件平台,并提供了丰富的功能和工具,帮助开发人员构建和部署高性能的企业级应用。开发工具和框架支持:WebSphere提供了一系列开发工具和框架,如IBM Rational Application Developer、Eclipse等,方便开发人员进行应用程序的开发和调试。集成能力:WebSphere支持与其他企业系统和应用程序的集成,包括数据库、消息队列、企业服务总线等,实现不同系统之间的数据交换和业务流程协同。

[Blog][Domain] programb.blog.youkuaiyun.com 3146

VLA、世界模型与端到端在智驾中的本质关系与工程落地

世界模型并非3D重建,而是对环境状态转移函数的可微分建模;VLA不是视觉+语言+动作的简单拼接,核心在于跨模态语义对齐。二者共同支撑具身智能系统实现从感知到行动的闭环推演,其技术价值体现在长尾场景泛化能力提升与决策延迟降低。在自动驾驶领域,真实量产方案均采用VLA架构作为多模态感知基础,嵌入轻量级世界模型以支持反事实轨迹推演,并通过WA硬件封装保障实时性,最终由端到端控制层完成像素到扭矩的语义贯通。这种混合架构已成L2+/L3智驾系统的工程共识。

weixin_34163553的博客 366

ibm 的java实现_Java连接IBM MQ

IBM MQ实现类访问类,依赖Jar包:com.ibm.mq.jarcom.ibm.mq.soap.jar com.ibm.mqjms.jarpackage com.szboc.eces.datareceive.cfibrecv.service;import java.util.ArrayList;import java.util.List;import com.ibm.mq.MQC;import...

weixin_42350914的博客 1360

汇川Easy系列PLC系统PID指令编程应用(增量型)

增量式PIDS7-1200/1500增量式PID(输出归一化、支持PWM输出)_西门子1200pid算法公式-优快云博客文章浏览阅读1k次。本文介绍了S7-1200/1500 PLC中增量式PID算法的应用,包括输出归一化和PWM输出。通过详细解析,阐述了PID输出如何限制在0.0-1.0之间,并且如何将PID输出与PWM占空比关联,适用于温度等控制场景。

RXXW_Dor的博客 1427

AI技术在电商中的实际应用

人工智能、电商、推荐系统、个性化、机器学习、深度学习 1. 背景介绍 电子商务行业近年来发展迅速,用户数量不断增长,商品种类日益丰富。然而,随着市场竞争的加剧,电商平台面临着如何提升用户体验、提高转化率、挖掘潜在商机等一系列挑战。人工智能(AI)技术作为一种新兴技术,凭借其强大的数

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1741

ibm 的java实现_IBM Java Toolbox for 实现IBM i 消息通信

BodyIBM Java Toolbox for i 实现IBM i消息通信消息机制是IBM i重要的系统管理之一。作业之间可以通过消息交互信息,管理员可以向登录用户广播消息,消息监控硬件异常并自动发送邮件等。另一方面,作为基于IBM i平台的Java应用程序编程接口,IBM Java Toolbox for i针对IBM i消息机制提供了强大的编程支持。本文的主要目标就是指导读者使用IBM Ja...

weixin_35353904的博客 458

CT探测器普遍采用“星形拓扑+多ADC模组”架构的TDC(时间数字转换器)设计方案

本文提出一种基于TDC反馈机制的CT探测器时钟同步方法,通过延时测量、偏差计算和动态补偿三步硬件流水线,实现高精度同步。系统采用Xilinx Kintex UltraScale FPGA内置CARRY8进位链构建3.5ps分辨率的TDC,结合多级比较器和延迟单元,形成闭环反馈控制。实验表明,在512通道、1.28m传输距离下,同步精度稳定在10ps以内,较传统方案提升两个数量级,并能动态补偿干扰抖动。该方案解决了传统方法在CT旋转腔体环境下精度不足的问题,为下一代超高清CT提供了有效的时钟同步解决方案。

whm128的博客 276

ibm mq java 连接_Java连接IBM MQ

package com.hometest.IBMMqTest;import java.io.IOException;import java.io.UnsupportedEncodingException;import com.ibm.mq.MQEnvironment;import com.ibm.mq.MQException;import com.ibm.mq.MQGetMessageOption...

weixin_32074113的博客 421

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JAVA 连接IBM MQ的topic

1:java 连接ibm mq的topic首先需要在mq上建立topic,命令如下     DEFINE TOPIC(TOPIC_xx_2) TOPICSTR(NBA/LAKER) DESCR('This is a TOPIC') PUB(ASPARENT) SUB(ENABLED)  WILDCARD(PASSTHRU)至于队列管理器的创建见日志中的MQ队列管理建立日志2:java连接程序imp...

john521 1720

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ibm java_IBM i 上Java 虚拟机简介

AbstractIBM i 上Java 虚拟机简介BodyJava在IT业界有多流行?google上搜索一下java,结果一目了然(今天早上我搜索到的记录数是840000000条)。Java之所以能广泛的被应用,与它“一次编译,处处运行”,也就是跨平台性是密不可分的。JVM是Java的跨平台性实现的基础,不同平台上标准统一的JVM提供了相同虚拟运行环境,使得Java应用不用做(或很小的)修改在各个...

weixin_35572715的博客 350

java ibm mq maven_JAVA连接IBM MQ

1、配置MQ统一说明:队列管理器名字为“MyTest”使用的端口为“1414”本地队列名称为“LOCALQUEUE”服务器连接通道名称为 “SERVERCONN”1.1、创建队列管理器进入IBM MQ Explorer 创建队列管理器右键“队列管理器”–>“新建”–>”队列管理器…”添加队列管理器名字 一直下一步到这个页面,设定监听端口,点击完成成功创建队列管理器 如图所示,为队列管理...

weixin_39970855的博客 1341

ibm mq java 连接_Java远程连接IBM MQ

一、准备工作1.需要在mq服务器上新建一个队列管理器、一个发送队列、一个接收队列、一个服务器通道2.启动队列管理器(SEND)strmqm SEND--启动监听(SL)runmqlsr -m SL-p 1414 -t tcp &--用户交互管理界面程序runmqscSEND--创建本地队列DEFINE QLOCAL (Q1)--创建的服务器连接通道DEFINE CHANNEL(C)...

weixin_32256355的博客 1261

ibm java 编码_IBM Java Toolbox for i 实现Java Unicode与IBM i EBCDIC编码转换(下)

String ccsid1 = "837";String ccsid2 = "836";AS400Text textConverter1 = new AS400Text(6, ccsid1);AS400Text textConverter2 = new AS400Text(3, ccsid2);String str1 = (String) textConverter1.toObject(data1...

weixin_39573535的博客 642
上一篇: 数据结构—链表的基本操作 子函数的方式
下一篇: Nginx 教程、在Linux和windows下安装
AndyChen9988
博客等级 码龄11年 276粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值