JAVA基础复习1

1.什么是软件?
软件:其实就是一系列按照特定的顺序组成的计算机数据和指令的集合。
常见的软件:
       系统软件:Windows  Linux  Unix   Dos
  应用软件:QQ   360   王者荣耀
 
2.什么是开发:
     制作软件的过程


3.人机交互
     软件的出现就实现了人与计算机之间更好的交互。
交互方式:
     1.图形化界面   (GUI) :优点:简单直观,使用者容易上手,易于接受。
 2.命令行方式    (CLI)  :需要控制台,需要去输入一些特殊的指令,使用这种方式在计算中当中
完成操作比较麻烦,因为记录这些指令。


4.命令行提示符
      dir:   列出当前目录下的文件和文件夹
 md:     创建目录
 rd:    删除目录
 cd:    进入指定目录
      cd..:  退回到上一级目录
      cd\:    退回到根目录
 del:  删除文件
      exit:  退出dos命令行


5.什么是计算机语言?
人与计算机交流的方式。


6.计算机语言的历史:
     1.机器语言
2.汇编语言   20世纪50年代  
3.早期高级语言   fortran
4.结构化高级语言  20世纪60年代  C语言   面向过程的语言
5.面向对象语言  


7.JAVA语言的概述
      1.sun公司在1995年推出的一门高级编程语言。
 2.面向internet的编程语言。
 3.随着java语言在web方面的不断成熟,已经称为web方面的首选编程语言。
 4.随着移动互联网的发展,android手机的市场占有率不断的提高,java也是android的底层语言。
 5.简单易学,完全面向对象,安全可靠,与平台无关的语言。




8.java的体系:
    JAVA SE   :Java Platform,Standard Edition
标准版:各应用平台的基础,桌面开发和低端商务应用的解决方案
JAVA EE  :Java Platform,Enterprise Edition
企业版:以企业为环境而开发应用程序的解决方案
JAVA ME  :Java Platform, Micro Edition
微型版:致力于消费产品 和嵌入式设备的最佳解决方案


9.什么是跨平台性?
      平台指的是什么?----》操作系统
 通过java语言编写的应用程序,在不同的平台上都能够运行。
 
   原理: 
      只需要在运行java应用程序的平台上先安装一个java虚拟机(JVM)即可。
 jvm虚拟机负责java程序在该操作系统上的运行。


  跨平台性还有一种说法:可移植性
  在一个平台开发之后,可以移植到另外一个平台使用。


  一个程序可以在平台上执行的条件:
  1.这个程序在平台中被识别
  2.这个程序在平台中被解析
 
10.java语言的运行机制
计算机的高级编程语言类型:
编译型
解释型
Java 语言是两种类型的结合;
先编译,再解释执行


11.java程序的执行过程
      1.编写源代码 
 2.编译源程序,生成字节码文件javac XX.java
 3.运行字节码文件
 
12.jvm特点
    JVM可以理解成一个可运行Java字节码的虚拟计算机系统 
它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信
对于不同的运行平台,有不同 的JVM。
JVM屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。


13.JAVA当中的两大核心机制
   Java虚拟机(Java Virtual Machine) JVM
   垃圾回收器(Garbage Collection) GC


14.垃圾回收器的特点:
不再使用的内存空间应当进行回收-垃圾回收。
在C/C++等语言中,由程序员负责回收无用内存
Java语言消除了程序员回收无用内存空间的责任:
JVM提供了一种系统线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可以被释放的存储空间。
垃圾回收器在Java程序运行过程中自动启用,程序员无法精确控制和干预。




15:JDK(Java Development Kits)-- Java开发工具集
JRE(Java RunTime Environment)Java运行时环境
Java编译器(javac.exe)
Java运行时解释器(java.exe)
Java文档化化工具(javadoc.exe)
其它工具及资源
JRE(JAVA  Runtime  Environment)---JAVA运行时环境
JRE的三项主要功能:
加载代码:由类加载器(class loader)完成;
校验代码:由字节码校验器(bytecode verifier)完成;
执行代码:由运行时解释器(runtime interpreter)完成。


16.配置环境:
      path:  用来指定操作系统当中可执行命令的路径
 classpath:Java虚拟机在运行某个类时会按classpath指定的目录顺序去查找这个类
验证的方法:      
   javac:Java源文件的编译工具。
   java:Java字节码解释程序。
 
17. 第一个java小程序helloworld
注意事项:
1.当类被public修饰时,类名和源文件名必须保持一致。
如果没有被public修饰,类名和源文件名可以不一致。
2.程序的入口是主函数,没有主函数的java文件能编译,但是不能运行。
3.一个源代码文件当中能生成多字节码文件,和其中包含的类的数量相关?
4.一个源文件当中包含的类的类名不能重复。




18.常见的问题:
   问题一:javac: 找不到文件:
     错误原因:1.文件名是错误的。
  2.目录是错误的。
  3.文件拓展名是错误的。
计算机---》组织---》文件夹和搜索选项---》查看----》隐藏已知文件的拓展名改为不选中,就ok了。


   问题二:java:java.lang.NoClassDefFoundError 问题
       在执行java命令时区分大小写字母  解释运行字节码文件
  在执行javac命令时不区分大小写字母  编译源程序
  总结:编译源程序时不区分文件名的大小写字母,而解释字节码文件时区分。
  
问题三:错误: 在类 Demo01 中找不到主方法, 请将主方法定义为:
public static void main(String[] args)
主函数写错了,如果没有main函数就无法运行java代码。

问题四:写代码要随时保存


问题五:注意分号的添加


问题六: 程序包system不存在
   英文字符大小写错误,应该大写时就大写,需要小写就小写。



19.JAVA语言的基础语法
       1.关键字
  2.标识符
  3.注释
  4.常量和变量
  5.运算符
  6.语句
  7.函数(方法)




20.关键字: 其实就是某一种计算机语言对于指定的单词赋予了特殊的含义。
            特点:都是英文单词,而且都是小写的字母
在Editplus当中编译时,蓝色的都是关键字,颜色和编译器相关。
   保留字:没有定义用途,但保留备用。goto、const


21. 标识符  :用来标识的符号
   就是给程序中的内容起的名字。
   标识符的分类:  类名   变量名    函数名    包名
   包含的内容:  a-z  A-Z  0-9 $和_
   语法规则:
        1.由字母,数字,下划线和美元符号组成的。
2.不能以数字开头。
3.区分大小写   class Demo   class demo
4.长度没有限制。
5.命名时不能使用java当中的关键字和保留字
命名规范
   1.驼峰式命名法   
    大驼峰式命名法 :  class SchoolName
指的是类名的规范,首字母要求大写,如果类名当中包含两个单词或以上,要求每个单词的首字母大写。
class Animal
小驼峰式命名法 :  
    通常用于函数名:单词的首字母也小写,如果函数当中包含多个单词,要求从第二个单词开始首字母大写。
eatFoodAndFruit    main
2.见名之意 :使用有意义的英文单词
3.类名的首字母大写,而方法名和变量名的首字母要小写,包名全小写
4.长度不要超过15个字符



22.注释:
注释的由来:
大家可以看到我们在写出的程序都是英文的,因为这个是美国人研究出来的,对于中国人来看呢,
可能就存在一些不好理解的问题,那我们希望在写完一段代码之后加入一些说明性的文字,
以便于其他人阅读或者日后自己阅读的时候有可读性。
注释的特点:不会参与编译
注释的好处:增强阅读性
     注释的作用:1.注解,说明,解释
2.用来调试程序:当错误没有找到解决方法时,就把错误所在的那行代码注释掉。
注释的表现形式:
    1.单行注释
    在行的开头加上  //  (这一行的内容都会被注释)
2.多行注释
    有开始有结束    /* 注释的内容 */
3.文档注释  :通常用于对于程序进行说明,并且建立说明性文档。
   java语言特有的注释
/**  注释的内容  */
javadoc.exe  可以将程序当中的文档注释和代码同时提取出来,使注释称为该代码的说明书。
   
注释的细节问题:
     1.单行注释当中可以定义单行注释。
 2.单行注释当中可以定义多行注释。
 3.多行注释当中可以定义单行注释。
 4.多行注释当中不可以定义多行注释。
  www 
    what  :这是什么
why   :为什么要做呢,为什么要这么做
how   :如何去做


    编写代码的过程,明确思路,代码仅仅是思路的体现。
1.我要做什么?
2.我为什么要这么做呢?
3.我要如何做呢?
4.用什么步骤来实现呢?
5.用代码来体现。


思想在代码当中的体现,通过注释。


23.常量
     不能够被改变的数值。
JAVA当中对于常量进行了分类:
1.整数常量     所有整数    12    38     25    -9
2.小数常量     所有小数    3.14     6.66    -9.9
3.布尔型常量   比较特殊    只有两个数值  true  false
4.字符常量     将一个数字,字母或者符号采用单引号('')标识   'a'  '1'  '+'  
5.字符串常量   将一个或者多个字符用双引号("")标识    "Hello World!!"   "13"    "今天天气好晴朗!!"
6.null常量     只有一个数值就是  null 。


整数常量:有四种表现形式
    二进制:   逢2进1   只有0和1
十进制:   逢10进1  包括0~9
八进制:   逢8进1   包括0~7  三个二进制位为一组
    十六进制: 逢16进1  包括0~9  A~F   四个二进制位为一组


十进制转换成二进制的方法:
    十进制数值除以2取余数,直到商为0为止。
二进制转换成十进制的方法:
乘以2的次幂,次幂从0开始,随着位数的递增而递增。

8的二进制是多少    1000
16的二进制是多少   10000
10011的十进制是多少:
1*1+1*2+0*4+0*8+1*16 = 16+1+2 = 19


1010   ==》10
111    ==》7
1111   ==》15


3----》11
9----》1001
    
同一个数值在不同的计数方式当中表现为不同的数。
八进制:必须以0开头    0134
十六进制:必须以0X或者0x开头    0x134
  


24.变量   :变化的数值
   //变量就是内存当中的存储区域。
   变量声明的三要素: 类型    名称    数值
   变量在内存当中的好处:数值是可变的。


   什么时候定义变量呢?
      一旦数据不确定了,就定义一个变量,来作为存储的空间,以便于随时的改变。
   为什么要定义变量?
      用来不断的存放同一种数据类型的常量,变量的空间可以不断的重复使用。
   
   声明变量的语法格式:
      数据类型  变量名[=初始化值];
 初始化值就是第一次赋得值,是可以不断改变的。

变量的数据类型的分类:
   数据类型:  基本数据类型:整数类型:byte  short  int  long   
 浮点数类型:float  double
 字符类型:  char
 布尔类型:  boolean
引用数据类型: 类(class)  接口(interface)  数组(array)


    /*Java中所有的基本数据类型都有固定的存储范围和所占内存空间的大小,而不受具体操作系统的影响,
以保证Java程序的可移植性 。*/

整数类型的取值范围和内存空间。
    
byte 1字节 8位 -128 ~ 127 
short 2字节 16位 -215 ~ 215-1 
int 4字节 32位 -231 ~ 231-1 
long 8字节 64位 -263 ~ 263-1 


Java语言的整型常量默认为int型,如:int i = 3;
要声明long型可以加‘l’或‘ L’,如:long  l = 3L;


float 4字节  32位 -3.403E38~3.403E38 
double 8字节  64位 -1.798E308~1.798E308 
Java浮点型常量默认为double型,如要声明一个常量为float型,则需在数字后面加f或F。


boolean类型适于逻辑运算,一般用于程序流程控制 
boolean类型数据只允许取值true或false,不可以用0或非0的整数替代true和false。


从声明变量的位置
变量的分类:成员变量和局部变量
成员变量:方法外部,类的内部定义的变量
局部变量:方法或者语句块内部定义的变量。


局部变量的作用域:是他所在的方法或者语句块。
在程序当中的方法被调用时,局部变量才会被创建并使用,随着方法的退出,局部变量将销毁。

成员变量的作用域是整个类体。
特别注意:类体之外不能有变量的声明


25.基本数据类型之间的转换分为以下两种
自动类型转换
强制类型转换
boolean 类型不能转换成任何其它数据类型。


自动类型转换:
容量小的类型自动转换成容量大的数据类型
byte,short,intlongfloatdouble
char
强制类型转换:

容量大的类型转换成容量小的数据类型时,要加上强制转换符


1.JAVA当中常见运算符
(1)算术运算符:+ 、 - 、 * 、 / 、 % 、 ++ 、 --
对于单独一个数字进行自增运算,符号无论放在数字的左边还是右边,结果无区别。
b = a++;
运算过程  
通过观察发现,a在前,++在后,说明除了本身的自增之外,还进行了其他的运算工作,比如赋值给b
1.在内存当中先将a当中的数值进行临时的存储   temp = a;
2.进行自增运算   a = a+1;   a = 4;
3.将临时存储的变量的数值赋值给b   b = temp;
b = ++a;
 运算过程:
1.右边  a =a+1;   a=4
2.左边  b = a;    b=4

(2)赋值运算符:= 、 += 、 -= 、 *= 、 /= 、 %=
short s = 8;
s+=3;    //没问题  +=是赋值运算符,编译器会自动转换类型
//s = s+3;   //会报错,可能缺失精度
System.out.println("s="+s);
(3)关系运算符:> 、 < 、 >= 、 <= 、 == 、 !=
关系元素符得出的表达式结果是布尔类型的,要么是true,要么是false
(4)逻辑运算符:! 、 & 、 | 、 ^ 、 && 、 ||
逻辑运算符通常适用于连接两个关系运算符组成的表达式的,
逻辑运算符最后的结果也是boolean类型的,要么是true,要么是false
&  :同真则真,其余为假
true  & true  = true
false & true  = false;
true  & false = false;
false & false = false;
|  :同假则假,其余为真
true  | true  = true
false | true  = true;
true  | false = true;
false | false = false;
^  :相同为假,不同为真
   true  ^ true  = false
false ^ true  = true;
true  ^ false = true;
false ^ false = false;
!  :用于取反
   ! true = false;
! false= true;
&&特点:
 当左边的结果为false时,右边的结果就不参与运算了,直接输出结果为false,也过和&的结果是一致的,
 但是提高了效率。
||特点:
  当左边的结果为true时,右边的结果就不参与运算了,直接输出结果为true,也过和|结果是一致的,
 但是提高了效率。
(5)位运算符:& 、 | 、 ^ 、 ~ 、 >> 、 << 、 >>>
   左移<<:乘以2的次幂的运算
   带符号右移>>:除以2的次幂的运算,右移会出现高位的空缺,原来是什么,就使用什么补充。
   无符号右移>>>:除以2的次幂的运算,右移会出现高位的空缺,无论原来的高位是什么,都是用0补充。
   左移和右移存在的意义就是为了简便计算机当中的乘法和除法。
(6)字符串连接运算符:+
(7)三目运算符:X ? Y : Z
X为boolean类型表达式,先计算x的值,若为true,整个三目运算的结果为表达式y的值,
否则整个运算结果为表达式z的值。


2.表达式:
表达式是符合一定语法规则的运算符和操作数的序列 
表达式的类型和值
对表达式中操作数进行运算得到的结果称为表达式的值 
表达式的值的数据类型即为表达式的类型 
表达式的运算顺序
首先应按照运算符的优先级从高到低的顺序进行 
优先级相同的运算符按照事先约定的结合方向进行


3.语句:
   语句的结构:
   顺序结构  :从上到下依次执行,不会缺省语句,也不会打乱顺序
   选择结构(分支结构) :if...else     switch...case
   循环结构   for while do
   {
   }
   while ();while 


4.if语句 
    语法格式:
if语句第一种格式    if(条件表达式){}
条件表达式结果为boolean型,如果满足条件,就执行语句
if第二种表现格式:if (条件语句){…}else{…}
如果。。。。否则。。。。意味着这两个语句块,肯定有一个会执行
三目运算符:其实是if...else的简写格式
好处:简化书写,增强代码的可读性
局限性:当if...else语句块,执行完有具体结果的时候,我们才能改写成三目运算符。
                因为三目运算符是一个运算符,只要是运算符运算完就必须有结果。
单条语句:
因为if当中所包含的代码只有一条,他是单条语句,所以可以省略大括号。
省略了if当中的大括号,他只能去控制离他最近的那条语句

if的第三种格式
if (条件语句){…}else if(条件语句){…}....else{…}

特点:
1.虽然他有多行代码,但是整体也是单条语句。(只有一个结果)
2、虽然他由多个代码块组成,但是只会执行其中的一个




4,课堂练习:
需求1:根据用于指定数字,打印该数字所属的星期文字提示。
需求2:根据用于指定数字,打印该月份所属的季节。
(3,4,5 春季 6,7,8 夏季  9,10,11 秋季 12, 1, 2 冬季)
需求3:不及格,及格,中,良,优秀,用if语句实现。
<60  60   70   80   90    100


5.switch语句的语法格式
switch(1){
case 0: 语句块1;break;
case 1:语句块2;break;
case 2:语句块3;break;

case 取值n: 语句块n;break;
default: 语句块n+1;break;
}

备选答案并没有指定的顺序,但是执行肯定是从第一个case开始,
把每一个case执行完,如果其中有匹配的case值,就执行匹配的case对应的语句块。
如果没有匹配的case,那么就会执行default对应的语句块。


注意事项:
一般情况下,每一个case语句块最后一定要写break语句,如果没有写break语句。
就会把下面的内容视为case要执行的内容。直到遇到break为止。才会Switch语句。


switch语句有关规则
表达式的返回值[也就是switch()中的内容]必须是下述几种类型之一:
int, byte, char, short;枚举(1.5版本) String(1.7版本)
case子句中的取值必须是常量,且所有case子句中的取值应是不同的;
default子句是可选的;
break语句用来在执行完一个case分支后使程序跳出switch语句块;


switch语句结束的情况有两种:
1.执行到了break语句
2.执行到了switch语句的结尾


if语句和switch语句的使用场景:
1.如果对于具体的数值进行判断,使用if语句可以,使用switch语句也可以。建议使用switch语句。
因为switch语句会把所有的备选答案加载进入到内存当中,选择的效率会更高。
2.如果对于数据的区间进行判断,使用if语句。
3.如果表达式的结果是boolean类型。毫无疑问,使用if语句。


6.循环结构
    while...
do...while...
for....


循环:一圈又一圈   一遍又一遍


7.while语句语法格式:
while(条件表达式语句){
    循环体语句;
}


在循环条件满足的情况下,反复执行特定代码
既要给定循环的条件,也要控制循环的次数,如果不控制循环的次数,程序就会编程无限循环,然后不停的转。


什么时候使用循环结果?
当对于一段特定的代码需要反复执行时,就使用循环。


循环的四要素:
1.变量
2.条件表达式
3.循环体内容
4.迭代部分


  do....while的语法格式:
do{
循环体语句;
迭代部分;
}while(条件表达式语句); 


8.while语句和do...while语句的区别:
(1).while语句的循环体在循环条件的下边,而do...while语句的循环体在循环条件的上边。
  while循环条件不满足时,循环体一定不会被执行。
  do...while循环无论条件是否满足,do当中的循环体都会至少执行一次。


(2).do...while循环while表达式之后需要加上分号,而while循环表达式之后不需要加分号。
    分号:表示功能性语句的结束
    大括号:表示语句之后还有执行体。


1.for循环语法格式:


for (初始化表达式1;循环的条件表达式2;循环后的表达式3){
循环体语句;



初始化表达式1  :for循环语句当中第一个执行的表达式,通常做初始化变量的操作
循环的条件表达式2:判断是否循环的依据
循环后的表达式3:本次循环结束之后要执行的内容,通常做迭代的操作
循环体语句;反复执行的部分。


变量的作用域:
在方法中或者语句当中定义的变量都称之为局部变量。


在语句当中定义的变量,会随着语句的完成,就会被内存释放,在语句外不能访问到。
在方法当中定义的变量,会随着方法的执行结束,也会被内存释放,在其他方法当中不能访问到。


2.for循环多种体现形式
//同时初始化两个变量,判断其中一个变量的条件,如果满足条件,两个变量同时自增。
for (int x=1,y=1;x<3 ;x++,y++ )
{
System.out.println("x="+x+",y="+y);
}
//x=1,y=1
//x=2,y=2


for (; ; )
{
//for循环语句当中最简单的无限循环表达式,条件表达式的结果默认是true
//如果没有循环条件,就是默认满足条件的。


}


while (true) //条件表达式的结果是boolean类型的,如果写成true,就一致满足条件,那么循环体内容就一直执行
{
//while语句的无限循环的基本格式
//无限循环何时用?当无法确定循环的次数时,就使用无限循环
}


do
{
//do...while语句的无限循环的基本格式
}
while (true);




3.循环的嵌套
  
4.break:跳出
应用场景:
1.switch语句当中case语句的末尾。
2.循环语句当中


break语句在循环当中有中断循环的作用,但是单独执行break语句时,下面不要定义任何语句,
因为它执行不到,会报编译错误,无法访问的语句。
  break语句的注意事项:
1.在单层循环当中,直接写break,就从循环当中跳出来了。同时不执行break之后的内容。
 不要直接在break语句的后面写代码。
2.如果在循环当中对于break语句的执行进行了条件判断,那么就可以在break之后加上语句了。
3.在双重循环当中,在内循环当中写入break语句,默认是跳出内循环的。
4.在双重循环当中,在内循环当中写break语句,break语句的右边有内容,那么就比较循环关键字
的标记内容,根据标记跳出指定的循环。


5.continue  :继续
应用场景:在循环语句当中。
作用:结束本次循环,继续下一次循环。
特点:当continue单独执行时,下面不要定义语句,因为它执行不到,编译会报错。
continue语句的注意事项:
1.在单层循环当中,直接写continue,就接结束了本次循环。同时不执行continue之后的内容。
 不要直接在continue语句的后面写代码。
2.如果在循环当中对于continue语句的执行进行了条件判断,那么就可以在continue之后加上语句了。
3.在双重循环当中,在内循环当中写入continue语句,默认是结束本次内循环的。
4.在双重循环当中,在内循环当中写continue语句,continue语句的右边有内容,那么就比较循环关键字
的标记内容,根据标记决定应该结束的循环。




6.函数
函数的定义
什么是函数?
类当中具有特定功能的独立小程序。
每一个函数都有自己独立的区间就是它单独存在的地方,把函数所具备的功能就定义在这个区间当中。


什么时候需要定义函数呢?
 发现打印矩形,打印一次就要写一次双重for循环代码,特别的麻烦,代码很冗余,复用性很差。
 为了提高代码的复用性,可以把打印矩形的代码封装起来,通过大括号来封装{},为了方便下次调用,
 就给封装的代码块取个名字,下次打印矩形的时候直接找这个名字对应的代码就可以了。




函数的语法格式:
   [修饰符1 修饰符2 …] 返回值类型 方法(函数)名(形式参数(参与运算的参数)列表){
程序代码;
return 返回值;
}



修饰符:通过关键字对被修饰的内容加上了指定的含义。

返回值类型:先明确什么是返回值,函数通常表现为一个功能,是功能都有对应的结果,而返回值就是对应的结果。
java的任何数据都有类型,所以返回值也有类型。


方法名(函数名):函数是一个代码区间这个区间要被使用,必须要有名字,则为函数名


形式参数列表(参数类型 参数名,参数类型  参数名....):
参与运算的数据类型,就是指定的变量的类型,指明接收的具体的数据类型

return 返回值:当功能结束,我们会将对应的结果返回,并结束这个功能。


功能定义一般都有结果,但是也有特殊的情况,没有这个功能对应的结果,返回值没有特定的内容。
此时就使用java当中特殊的关键字:void 来表示返回值类型。


主函数是程序的入口,它的存在保证了程序的独立运行,它是被JVM所调用的,所以就需要在主函数当中调用自己写
的功能函数、需要使用函数名




注意:
 函数之间是并列关系,不存在改变了定义了位置就改编执行流程的问题。
 但是不能把函数定义在函数当中,函数当中只能调用函数。



修饰符的数量是可变的,可以有0~n个


在主函数当中调用其他功能函数的方法:
1.其他功能函数是被static修饰符修饰的,在主函数可以直接调用函数名。
2.其他功能函数不是被static修饰符修饰的,就需要在主函数当中创建对象,通过使用对象调用函数名。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值