Java language specification 9 笔记

java int溢出,结果只会保留低32位,高位会抛弃掉 今天做leetcode题目时,发现int mid = 536848900,但是mid*mid=484528144,我说为啥程序运行一直出错呢!! int mid = 536848900; System.out.println(mid * mid);//484528144 long mid2 = 536848900;//long * long ... 阅读详情

Java编程语言是强类型的,静态类型的语言; 每个变量或表达式都要在编译时有一个已知的类型。类型限制了变量所能代表的值,限制了表达式所能产生的值,限制了值所能支持的操作,也决定了操作的意义。强类型,静态类型有助于在编译时帮忙检测错误。

Compile time:将程序转化为独立于机器的二进制码。
Rum time:包括加载、链接程序执行需要的类,生成机器语言(可选),程序的动态优化以及执行程序。

原始类型和引用类型,以及特殊的"null" type
原始类型在所有的机器和实现上都是一样的;包括boolean类型,数字类型:整形(byte(8-bit)、short(16-bit)、int(32-bit)、long(64-bit))、浮点型(float, double)、和Unicode char(16-bit)类型。
byte、short、int、long是带符号整数。
char是不带符号的整数,代表UTF-16 字符。

引用类型包括: 类类型、接口类型和数组类型。引用类型指向类/数组的实例对象,一个对象可以有多个引用。

特殊的"null" type:没有名字,所以没有办法声明变量类型或者强制转换,不过"null reference"可以被转换成其他类型; 实际编程时,可以把null当成特殊的字面量。

很多情况下,装箱和拆箱是由编译器自动完成的。
Variables are typed storage locations:变量是类型化的存储位置。
枚举类,可以有自己的方法。
Java语言支持数组的数组而不是多维数组,这两者有什么区别吗?

有三种类型的exception:

  1. checked exceptions(大部分user-defined exception都是这种类型)
  2. run-time exceptions,Java虚拟机侦测到的程序里的Invalid operation会导致这种exception,例如NullPointerException。
  3. errors,Java虚拟机侦测到的failures会导致errors,例如OutOfMemoryError。

Java语言不会自动初始化局部变量,以免掩盖编程错误。

字面量就是一个值,这个值可能是原始类型的,也可能是String类型或者null 类型的。
需要注意的一点是对于整型和浮点型字面量允许使用"_"来分割数字。

EscapeSequence(转义字符):
\ b (backspace BS, Unicode \u0008 )
\ t (horizontal tab HT, Unicode \u0009 )
\ n (linefeed LF, Unicode \u000a )
\ f (form feed FF, Unicode \u000c )
\ r (carriage return CR, Unicode \u000d )
\ " (double quote " , Unicode \u0022 )
\ ’ (single quote ’ , Unicode \u0027 )
\ \ (backslash \ , Unicode \u005c )

String 对象拥有常量值; String literal(String 字面量,如“java”)是String实例的引用,相同的String literal是同一个String实例的引用; 因为String literals 或者更广泛的来说,字符串类型的常量表达式是"interned"(关押), 所以使用String.intern方法可以共用同一个String实例。

字符串类型的常量表达式:
“The integer " + Long.MAX_VALUE + " is mighty big.”
这样的表达式会在编译时计算,所以会被当成String literal。

package testPackage;

class Test {
public static void main(String[] args) {
String hello = "Hello", lo = "lo";
System.out.print((hello == "Hello") + " ");
System.out.print((Other.hello == hello) + " ");
System.out.print((other.Other.hello == hello) + " ");
System.out.print((hello == ("Hel"+"lo")) + " ");
System.out.print((hello == ("Hel"+lo)) + " ");
System.out.println(hello == ("Hel"+lo).intern());同包同类内的String literal是同一个String实例的引用
}
}
class Other { static String hello = "Hello"; }
and the compilation unit:
package other;
public class Other { public static String hello = "Hello"; }

produces the output:
true true true true false true

This example illustrates six points:

• Literal strings within the same class (§8 (Classes)) in the same package (§7 (Packages
and Modules)) represent references to the same String object (§4.3.1).
同包同类内的String literal是同一个String实例的引用
• Literal strings within different classes in the same package represent references to the
same String object.
同包不同类内的String literal是同一个String实例的引用
• Literal strings within different classes in different packages likewise represent references
to the same String object.
不同包不同类内的String literal是同一个String实例的引用
• Strings computed by constant expressions (§15.28) are computed at compile time and
then treated as if they were literals.
字符串类型的常量表达式会在编译时计算,所以会被当成String literal
• Strings computed by concatenation at run time are newly created and therefore distinct.
字符连接的计算是在run time进行的,所以对应的String是新创建的,所以会不同。
• The result of explicitly interning a computed string is the same string as any pre-existing
literal string with the same contents.
对一个计算得来的string使用intern得到的引用会和已存在的string literal(相同内容)指向同一个String实例对象。

变量的类型:
类变量,实例变量和数组成员变量在被创建的时候会初始化为默认值。

  1. 类变量
    在类的field域中被static修饰的变量,或者在接口声明的变量(有或者没有static都一样)。

  2. 实例变量
    在类的field域中没有被static修饰的变量

  3. 数组成员变量(Array components)
    数组成员是没有名字的变量,当数组创建的时候就别创建并初始化到了默认值。

  4. 方法参数变量
    方法参数变量在方法调用的时候会被创建,并使用参数值初始化。

  5. 构造函数参数变量
    当实例创建或者构造函数被调用的时候参数变量会被创建,并使用参数值初始化。

  6. Lambda 参数变量
    当Lambda表达式实现的方法被调用时,参数变量会被创建,并使用方法调用时的参数值初始化。

  7. 异常参数变量
    当catch语句捕捉到异常时异常参数变量会被创建,新变量会使用和exception相关的对象初始化。

  8. 局部变量
    当程序控制流进入一个语句块(block)或者for循环的时候,相应的局部变量便会被创建。
    局部变量初始化可能使用了表达式,只有当表达式执行了,变量才会被初始化。


compile-time type & run-time type
run-time type:在Java 虚拟机里,每个对象都属于一些特殊的类,这类叫做"class of object“; 对象是这个类或者这个类所有父类的实例。数组对象也有对应的类。

变量的compile-time type是声明了的,表达式的compile-time type在编译时可以推断出来。

compile-time type和run-time type不一定是对应的,因为:

  1. 在run-time,classes和interfaces是JVM使用class loader加载的,所以同一个类使用不同的class loader加载后,在run-time中也是不一样的。

  2. 类型变量和类型参数在run-time是不可具体化的,所以run-time中的类或者接口可能代表了compile-time中的多个参数化的类型; 特别是泛型的compile-time参数化使用的是同一个run-time 类型。如:
    Vector x = new Vector();
    Vector y = new Vector();
    x.getClass() 和 y.getClass()是相同的。


转换的类型:

class Test {
public static void main(String[] args) {
// 1.Casting conversion (5.4) of a float literal to
// type int. Without the cast operator, this would
// be a compile-time error, because this is a
// narrowing conversion (5.1.3):
int i = (int)12.5f;

// 2.String conversion (5.4) of i's int value:
System.out.println("(int)12.5f==" + i);

// 3.Assignment conversion (5.2) of i's value to type
// float. This is a widening conversion (5.1.2):
float f = i;

// 4.String conversion of f's float value:
System.out.println("after float widening: " + f);

// 5.Numeric promotion (5.6) of i's value to type
// float. This is a binary numeric promotion.
// After promotion, the operation is float*float:
System.out.print(f);
f = f * i;

// 6.Two string conversions of i and f:
System.out.println("*" + i + "==" + f);

// 7.Invocation conversion (5.3) of f's value
// to type double, needed because the method Math.sin
// accepts only a double argument:
double d = Math.sin(f);

// 8.Two string conversions of f and d:
System.out.println("Math.sin(" + f + ")==" + d);
}
}

Widening Primitive Conversion:
可能会丢失精度,但是不会发生run-time exception
• byte to short , int , long , float , or double
• short to int , long , float , or double
• char to int , long , float , or double
• int to long , float , or double
• long to float or double
• float to double

Narrowing Primitive Conversion:
可能会丢失数据,高位可能会丢失; 但是也不会发生run-time exception
• short to byte or char
• char to byte or short
• int to byte , short , or char
• long to byte , short , char , or int
• float to byte , short , char , int , or long
• double to byte , short , char , int , long , or float

byte to char的过程:byte会先转换成int,然后再转换成char。

装箱转换:
装箱转换可能会导致OutOfMemoryError, 因为包装类对象可能没有充足的空间。
• From type boolean to type Boolean
• From type byte to type Byte
• From type short to type Short
• From type char to type Character
• From type int to type Integer
• From type long to type Long
• From type float to type Float
• From type double to type Double
• From the null type to the null type

String conversion:
基本数据类型在转换为string 类型时,先转换为对应的包装类类型,再调用toString方法(如果是null,会直接会直接使用null 字符串)。对于值为x的基本数据类型T,如果 T 是 boolean类型, 那么使用new Boolean(x)。


6.1已经读完,主要讲了命名的规范。

shadowing:名字相同的变量,scope重叠的情况。


8.Classes

Top level class和nested class:
Nested class包括成员类,局部类和匿名类。

Inner class
non-static nested class是Inner class。
接口内的nested class默认是static的,所以不是一个inner class。
inner class不能有static初始化块,不能定义static成员(常量除外),但是可以继承static成员。
inner class实例中有一个外部类的实例(enclosing instance)
如果inner class访问了外部类的实例变量,那么在这个过程中外部类的实例对象会被用到。

静态内部类访问不了外部类的实例变量。
抽象类可以实现接口类,而不实现具体方法。
阻止类实例化的方法就是只声明一个private无参的构造方法,并且不调用它; 这种类一般是有类方法或者类变量。

父类的private成员是不会被子类继承的。
父类中只有声明为protected和public的成员才可以被非同package的子类继承。
构造函数,静态初始化块和实例初始化块都不属于成员,所以也就不会被子类继承。

一个非public的类,无法在其他package的直接访问,但是可以通过间接的方法访问(通过它的public的父类或者接口)。

子类中特定名字的field会hide父类中相同名字的field, 无论类型是否相同,无论static还是non-static。

transient 修饰的变量,会变化频繁, 不会被存放在永久性的内存区域。

volatile 修饰的变量用于多线程访问的情景,保证每个线程访问到的都是最新的值。

static常量会比其他static域先初始化。(初始化阶段就按照code赋值了,其他static只是赋默认值的意思?)

枚举类中可以声明abstract方法。

在run-time,machine-code生成器或者优化器可以将final方法内联(inline)。

native方法是用平台相关的code实现的,比如C。

synchronized方法在执行之前需要一个monitor,对于class 方法,这个monitor是这个class相关的Class 对象; 对于实例方法,这个monitor是对象实例(this)。

子类不能从superinterface中继承private和static方法。

static方法不能被overriden,但是可以被hiden。

static方法不能hiden实例方法,但static field可以hiden实例field。
可以通过super. 或者强制类型转换来访问父类中被hiden的方法,但是不能通过将子类强制类型转换为父类类型来访问父类中被override的方法。

如果调用的是实例方法,那么在run-time才会确定真正调用的方法(dynamic method lookup)。

一个非私有的(non-private)内部类,可以被编译它的编译器访问,也可以被其他编译器访问,所以二进制名字是有规范的(predictable); 但是局部内部类或者匿名内部类只能被编译它的编译器访问。

Java Language Specification(Java编程规范)中英文 Java Language Specification(Java编程规范)中英文合集 这是我从网上分别下的中文版和英文版打包在一起的,希望能为你们节省很多搜索找寻时间,其中那个中文版真的很难找~~ 立即下载

相关推荐

open-telemetry-java-guides:Java OpenTelemetry 测试指南 :Open-Telemetry-Java-Guides 案例,用于测试常用中间件支持及 Otel 相关组件的使用情况。官方中文文档地址:https

Open-Telemetry-Java-Guides 案例工程 Open-Telemetry-Java-Guides案例,用于测试常用中间件支持及Otel相关组件的使用情况。关于更多Otel请访问Otel官网。 必读部分:、 、、, 、、、、. :speaker_low_volume::希望各位先fork,后clone,这样关于我新提交的东西您就可以观测到。如果仅仅clone,我的最新提交您可能感知不到。 个人无偿测试和搭建不易,麻烦赏颗星星,感谢您。:person_bowing:‍。 数据展示 Otel-Col Info By ItSelf : App-Trace Info By Jaeger: App-Jvm-Metrics Info By Prometheus And Prometheus Gateway: 关于业务日志, 借助对应的日志框架实现自定义即可,后将数据对接至Otel-Collector即可。 中心化管控:Biz Logging, Tr

java language specification Java SE 8 Edition 中文版(第一章)

java 编程语言规范(第八版第一章) 这几天在看 java 虚拟机规范,发现java编程语言规范目前还没有中文版,试着翻译一下,如果错误 欢迎批评指正。我会持续更新(beijin9152@163.com 转载请注明出处。谢谢)。 第一章 概述 java 是一种通用,并发,基于类且面向对象的编程语言。它设计的力求简单使得编程者可以清楚编写。java语言借鉴了c和c++但也有很大的区别,

edwardqiang的博客 6506

Java各种Specification

里面包含以下文档: The Java Language Specification Third Edition.pdf The Java Language Specification Java SE 8 Edition.pdf The Java Language Specifation Java SE 9 Edition.pdf The Java Virtual Machine Specification Java SE 7 Edition.pdf The Java Virtual Machine Specification Java SE 8 Edition.pdf The Java Language Specification Java SE 7 Edition.pdf

java概述

什么是计算机 首先,计算机由CPU(中央处理器),内存,存储设备,输入设备,输出设备,通信设备组成,这些通过总线连接。 CPU:CPU 通常由两部分组成 : 控制单元 ( control unit ) 和算术 / 逻辑单元( arithmetic / logic unit ) 0 控制单元用于控制和协调其他组件的动作 。 算术 / 逻辑单元用于完成数值运算 ( 加法 、减法 、乘法 、除法 )和...

qq_45923849的博客 313

【COMSOL】将一个面上数据导出CSV或txt格式的方法

在COMSOL中参数化扫描后,把一个面上或体里的数据按照CSV或TXT格式导出的方法。

dave496206的博客 2991

ChatUI vs Ant Design X 技术选型对比

维度ChatUI优势轻量级、易上手、完美兼容 Ant Design全能型框架、企业级扩展性、深度模型集成局限性功能单一、缺乏高级交互支持学习曲线陡峭、包体积较大最佳实践单独聊天窗口集成整体智能助手系统开发通过对比可见,ChatUI 适合快速实现基础对话功能,而Ant Design X 更适合构建复杂的 AI 驱动应用。实际选择时需结合项目规模、团队技术栈和对交互复杂度的需求综合评估。

四楼没电梯的专栏 2265

java language specification官方地址

背景: 刚才在看volatile修饰符的时候看到作者都是在阅读了java language specification后翻译为自己的理解讲述出来的 调查: java language specification即java语言规范,是一切java编程的基础参照文档。 官方文档(Java Language and Virtual Machine Specifications): http:/

谨慎对事 低调行事 0与1的世界 浩瀚如海 学无止境 1458

Python爬虫实战:5分钟搞定大众点评评论数据抓取(附完整代码)

本文详细介绍了使用Python爬虫高效获取大众点评评论数据的5个关键技巧,包括环境配置、智能页面解析、反反爬策略、数据存储与容错设计以及性能优化。通过实战案例和完整代码,帮助开发者快速掌握文本挖掘技术,适用于市场分析和商业决策。

weixin_30660027的博客 290

Java 版本、语言规范、API、JDK、IDE、Java 源程序编译(1)

Java 语言规范(Java Language specification)是对语言的技术定义,包括 Java 程序设计语言和语法的定义。应用程序接口(Application Program Interface,API)也称为库,包括为开发 Java 程序而预定义的类和接口。在不断地扩展。Java 开发工具包(Java Development Toolkit,JDK)是一套独立程序构成的集合,每个程序都是从命令行调用的,用于开发和测试 Java 程序。Java SE 8 对应的 Java 开发工具包称为 J

2401_84166147的博客 1228

Unity轻量级框架QFramework:四层架构与命令事件驱动的实战指南

在Unity游戏开发中,软件架构是确保项目可维护性和可扩展性的核心。通过分层架构(如MVC、DDD)和事件驱动设计,开发者能够有效管理代码复杂度,实现模块间的解耦与高效通信。QFramework作为一个轻量级框架,精准地运用了这些原理,通过严格定义的四层架构(表现层、系统层、数据层、工具层)和命令/事件通信规则,为中小型项目提供了“约束下的自由”。其核心价值在于以极简的代码(不足1000行)强制实施清晰的职责分离,如使用命令模式集中管理状态变更,并通过事件驱动实现响应式更新。这种设计特别适用于解决项目规模扩

weixin_42521032的博客 262

路径规划 | 图解Informed RRT*算法(附ROS C++/Python/Matlab仿真)

Informed RRT*算法针对RRT*算法进行了采样优化,用椭圆采样代替全局均匀采样,避免了RRT*算法搜索树上产生过多冗余分支的缺陷。本文图解Informed RRT*原理,并提供ROS C++/Python/Matlab三种实现加深理解

FRIGIDWINTER的博客 7485

Java Language Specification Java SE 9 Edition学习笔记-语言特性主线

JSL的内容比较多,比较细,先以各版本语言特性的主线进行选择性学习: J2SE各版本新引入的语言特性如下: 1.1 J2SE 1.4 Assertion Facility 1.2 J2SE 5.0 Generics(泛型)Enhanced for Loop Autoboxing/UnboxingTypesafe EnumsVarargsSt

coolaaron的专栏 722

Android 10.0 SystemUI 屏蔽状态栏消息推送弹出的悬浮通知

在状态栏中,有一些通知类似 消息推送 弹出的 悬浮通知,弹出30秒之后会消失掉 要想屏蔽掉这些通知,首选知道这些通知是怎么产生的 通知类型 NotificationContentInflater.java 详细的介绍各种通知的类型 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java /** * The defau

安卓兼职framework和app工程师的博客 1542

Java Language Specification Java SE 9 Edition学习笔记-基本概念

4.类型、值和变量 Java语言是静态类型语言,这意味着每个变量和表达式在编译的时候是类型是已知的。 Java语言也是强类型语言,因为类型限制了变量能容纳的值,限制了表达式能生成的值,限制了操作符支持的值,决定了操作符的含义。强静态类型可以在编译时检测错误。 Java语言的类型分为两大类:原始类型和引用类型。 4.1 类型和值的种类 Java语言有两大种类的类型:prim

coolaaron的专栏 523

【数据集】MODIS 的 MOD07 大气廓线产品概述及下载

MODIS 的 MOD07 大气廓线产品概述及下载

WW、forever的博客 550

【SWAT】SWAT中预定义河网及流域

平原圩区没有明显的海拔差异。DEM中包含的地形信息无法定义河段的位置和水文连接,SWAT模型Watershed Delineator中提供两种方法,帮助用户输入流域拓扑信息。第一种方法,“Burn-in”和手动绘制河段和子流域边界。首先,使用“Burn-in”功能导入数字河道网络(DCN),并根据DEM和DCN绘制河流和子流域。然后在ArcGIS中编辑“流域”和“河段”层,可以调整位置、范围和水文连接。第二种方法,可以手动绘制或重新编辑河流和子流域,预定义河网及流域。

```On Earth, Be Water, By Coding``` 3273

Sonar建议Reorder the modifiers to comply with the Java Language Specification重新排序修饰符以符合Java语言规范

Sonar建议Reorder the modifiers to comply with the Java Language Specification重新排序修饰符以符合Java语言规范。 代码举例: 规范说明: The Java Language Specification recommends listing modifiers in the following order: 1. Annotations 2. public 3. protected 4. private 5..

一火的专栏 700

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

oracle官方Java语言规范,Java虚拟机规范下载(Java Virtual Machine Specification,Java Language Specification)

Oracle官方出的规范,每个Java版本都会有对应的这两本规范,全是英文撰写。个别版本版本可能会被国内翻译为中文,如《Java语言规范 基于 Java SE 8》中文版。英文名称,都会携带有Java版本号,如基于Java SE 20版本。本文介绍的则是从oracle官网下载原版的方式。

qq_41755845的博客 670

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java language specification 翻译 9.6 Annotation Types 注解类型

9.6 注解类型一个注解类型的声明指定一个新的注解类型,一个特殊的接口类型。为了区别一个注解声明和一个一般的接口声明,在关键词interface 前加一个at-符号(@)。 AnnotationTypeDeclaration: {InterfaceModifier} @ interface Identifier AnnotationTypeBody 注解类型声明:

fxnfk 785

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

The Java® Language Specification

12.Execution: The Java Virtual Machine starts execution by invoking the method main of some specified class, passing it a single argument, which is an array of strings 1 Load the Class. T...

转些好文章,促进分享。 315

java6常用annotation_java language specification 翻译 9.6 Annotation Types 注解类型

9.6 注解类型一个注解类型的声明指定一个新的注解类型,一个特殊的接口类型。为了区别一个注解声明和一个一般的接口声明,在关键词interface 前加一个at-符号(@)。AnnotationTypeDeclaration:{InterfaceModifier} @ interface Identifier AnnotationTypeBody注解类型声明:{接口修饰符} @ interface ...

weixin_34679596的博客 123

JVM Specification 9th Edition (2) Chapter 1. Introduction

Chapter 1. Introduction 翻译太累了,我就这样的看英文吧。 内容列表 1.1. A Bit of History1.2. The Java Virtual Machine1.3. Organization of the Specification1.4. Notation1.5. Feedback 1.1. A Bit of History ...

weixin_33971130的博客 137

java实例_面试题丨Java的类/实例初始化过程

昨天看到群里面有人分享了一道题目,我答错了,于是趁机了解了下Java的类/对象初始化过程:程序A主要考察的是类实例初始化。简单验证了下,类实例初始化过程如下:父类实例初始化构造块/变量初始化(按照文本顺序执行)构造函数程序B考察的则是类初始化。类初始化的过程如下:父类初始化static变量初始化/static块(按照文本顺序执行)但是我们必须做到面向接口编程,而不是面向实现编程(Program t...

weixin_39533896的博客 154

Ice 读书笔记--Slice语言

原文 http://blog.youkuaiyun.com/moxiaomomo/article/details/6709980 Slice语言   1. Slice(Specification Language for Ice)是一种用于使对象接口与其实现相分离的基础性抽象机制。 因为Slice描述的是接口和类型,它是一种纯粹的描述性语言;因此无法用slice语言来编写可执行语句。 2. 编译

linyushan11的专栏 714

Java基础笔记

JAVA基础篇面向对象三大特性五大基本原则平台无关性Java 如何实现的平台无关JVM 还支持哪些语言值传递封装、继承、多态什么是多态、方法重写与重载Java的抽象类和接口Java的继承与实现构造函数与默认构造函数类变量、成员变量和局部变量 基础篇 面向对象 面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。 面向对象把数据及对数据的操作方法放在一起,作为一个相互依...

寒沨的博客 481

计算机书籍&文章推荐 长期更新

Java 编程规范 Java specification language 3 edition 内容完整,细心讲授。P9推荐 待续

MangoDai 310
上一篇: Activity
下一篇: Input event --- View hierarchy
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值