黑马javaweb

javaweb

7

获取Class对象的方法:

1.Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象

多用于配置文件,将类名定义在配置文件中。读取文件,加载类

2.类名.class:通过类名的属性class获取

多用于参数的传递

3.对象.getClass( ):gatClass( )方法在object类中定义着。

多用于对象的获取字节码的方式

结论:同一个字节码文件(*.class)在一次程序运行工程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。

8

Class对象功能:

获取功能:

1.获取成员变量们

Field[] getFields() 获取所有public修饰的成员变量

Field getField(string name) 获取指定名称的public修饰的成员变量

Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符

Field getDeclaredField(string name)

2.获取构造方法们

Construction<?>[] getConstructors()

Construction getConstructor(类<?>… parameterTypes)

Construction getDeclaredConstructor(类<?>… parameterTypes)

Construction<?>[] getDeclaredConstructors()

3.获取成员方法们

Method[] gatMethods()

Method getMethods(String name,类 <?>… parameterTypes)

Method[] gatDeclaredMethods()

Method getDeclaredMethods(String name,类 <?>… parameterTypes)

4.获取类名

String getName()

Field:成员变量

操作:

1.设置值

void set(Object obj,Object value)

2.获取值

get(Object obj)

3.忽略访问权限修饰符的安全检查

setAccessible(true) 暴力反射

9

Construction:构造方法

创建对象: T newInstance(Object… initargs)

如果使用空参数构造方法创建对此昂,操作可以简化:Class对象的newInstance方法

10

不带declare只可以返回公共的不带declare的可以返回全部

Method:方法对象

执行方法:invoke(Object obj,Object… args)

获取方法名称:String getName:获取方法名

11

案例

需求:写一个“框架”,在不改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法

实现:1.配置文件2.反射

步骤:1.将需要创建对象的全类名和需要执行的方法定义在配置文件中

2.在程序中加载读取配置文件

3.使用反射技术来加载类文件进内存

4.创建对象

5.执行方法

20.JavaWeb课程介绍

课程介绍30天

数据库5天

网页前端5天

web核心技术15天

旅游管理系统5天

21

数据库基本概念

MySQL数据库软件1.安装2.卸载3.配置

22

数据库的基本概念

1.DataBase 简称DB

2.用于存储和管理数据的仓库

3.数据库的特点:1.持久化存储数据 其实数据库就是一个文件系统 2.方便存储和管理数据 3.使用了统一的方式操作数据可–SQL

23

常见的数据库软件

24-25安装和卸载

26配置

MySQL服务启动

1.手动 2.cmd–services.msc 打开服务的窗口 3.使用管理员打开cmd net strat mysql:启动mysql的服务器

27登录和退出

29.SQL

定义了操作所有关系型数据库的规则

每一种数据库操作的方式存在不一样的地方称为“方言”

30-33

P113-P130今日内容

软件架构:

C/S:客户端/服务器端

B/S:浏览器/服务器端

B/S架构详解

资源分类:

1.静态资源:使用静态网页开发技术发布的资源

特点:所有用户访问,得到的结果是一样的

如:文本,图片,音频,视频,HTML,CSS,JavaScript

如果用户请求的是静态资源,那么服务器会直接俄将静态资源发送给浏览器。浏览器中内置了静态资源的解析引擎,可以展示静态资源

2.动态资源:

使用动态网页及时发布的资源。

特点:所有用户访问,得到的结果可能不一样。

如:jsp/servle,php,asp…

如果用户请求的是动态资源,南无服务器会执行动态资源,转换为静态资源,在发送给浏览器。

我们要学习动态资源,必须先学习静态资源!

静态资源:

HTML:用于搭建基础网页,展示网页的内容

CSS:用于美化页面,布局页面

JavaScript:控制页面的元素,让页面有一些动态的效果

HTML

1.概念

是最基础的网页开发语言

Hyper Text Marker Language 超文本标记语言

超文本:超文本使用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。

标记语言:由标签后成的语言。<标签名称> 如html,xml

标记语言不是编程语言

2.快速入门

语法:

1.html文档的后缀名 .html或者.htm

2.标签分为

​ 1.围堵标签:有开始标签和结束标签。如

​ 2.自闭和标签:开始标签和结束标签在一起。如

​ 3.标签可以嵌套:

​ 需要正确嵌套,不能你中有我,我中有你。

​ 4.在开始标签中可以定义属性。属性是由键值对构成,值需要用引号(单双都可)引起来

​ 5.html的标签不区分大小写,但是建议使用小写。

代码:

html>

zr

<body>
	<FONT color='red'>wo zhen nb</font><br/>
	<font color='green'>Hello zr</font>

</body>
3.标签学习

​ 1.文件标签:构成html最基本的标签

html:html文档的根标签

head:头标签。用于指定html文档的一些属性。引入外部的资源

title:标题标签。

body:体表签

:html5中定义该文档是html文档

​ 2.文本标签:和文本有关的标签(自动省略//呜呜)

注释:

//

to

:标题标签

h1~h6:字体大小逐渐递减

//

:段落标签

//
换行标签

//


:展示一条水平线

//


属性:color颜色 ;width宽度; size高度 ;align对齐方式 --center居中 默认居中 left 左对齐 right右对齐;

//:字体加粗

//:字体斜体

//:字体标签 属性:color:颜色;size:大小;face:字体。

属性定义:

color:1.英文单词:red,green,blue

​ 2.rgb(值1,值2,值3):值的范围:0~255 如rgb(0,0,255)

​ 3.#值1值2值3:值的范围:00-FF之间。如·:#FF00FF

width:1.数值:width=‘20’,数值的单位,默认是px(像素)

​ 2.数值%:占比相对于父元素的比例

​ 3.图片标签:

img:展示图片

例子古镇

alt是当图片找不到的时候就显示alt中的内容 相当于是一个描述?

​ 4.列表标签:

有序列表:

ol:

li:

无序列表:

ul:

li:

​ 5.链接标签:

a:定义一个超链接

属性:

href:指定访问资源的URL(统一资源定位符)

target:指定打开资源的方式

​ _self:默认值,当前页面打开

​ _blank:在空白页面打开

例子:

点我

联系我们

​ 6.div和span

div:每个div占满一整行。块级标签

span:文本信息在一行展示,行内标签 内联标签

​ 7.语义化标签:html5中为了提高程序可读性,提供了一些标签。

1.

:页眉

2.

:页脚

​ 8.表格标签:

table:定义表格

​ width:定义表格

​ border:边框

​ cellpadding:定义内容和单元格的距离

​ cellspacing:定义单元格之间的距离。如果指定为0,则单元格的线会合成为一条。

​ bgcolor:背景色

​ align:对齐方式

tr:定义行

​ bgcolor:背景色

​ align:对齐方式

td:定义单元格

​ colspan:合并列

​ rowspan:合并行

th:定义表头单元格

:表格标题 :表示表格的头部份 :表示表格的体部分 :表示表格的脚部分
案例:旅游网站首页

1.确定使用table来完成布局

2.如果某一行只有一个单元格,则使用

3.如果某一行有多个单元格,则使用

P131-P146今日内容

HTML标签:表单标签

表单:

​ 概念:用于采集用户输入的数据的。用于和服务器进行交互。

​ 使用过的标签:from

​ 用于定义表单的。可以定义一个范围,范围代表采集用户数据的范围

​ 属性:

​ action:指定提交数据的URL

​ method:指定提交方式

​ 分类:一共7中,2种比较常用的

get

​ 1.请求参数会在地址栏中显示。会封装到请求行中(HTTP协议后讲解)

​ 2.请求参数大小是有限制。

​ 3.不太安全。

post

​ 1.请求参数不会在地址栏中显示。会封装在请求体中(HTTP协议后讲解)

​ 2.请求参数的大小没有限。

​ 3.较为安全。

​ 表单项中的数据要想被提交,必须指定其name属性

表单项标签

input:可以通过type属性值,改变元素展示的样式

​ type属性:

​ text:文本输入框,默认值

​ placeholder:指定输入框的提示信息,当输入框的内容发生变化,会自动清空提示信息

​ password:密码输入框

​ radio:单选框

​ 注意:

1.要想让多个单选框实现单选的效果,则多个单选框的name属性值必须一样

2.一般会给每一个单选框提供value属性,指定其被选中后提交的值

3.checked属性,可以指定默认值

​ checkbox:复选框

​ 注意:

1.一般会给每一个单选框提供value属性,指定其被选中后提交的值

2.checked属性,可以指定默认值

​ file:文件选择框

​ hidden:隐藏域,用于提交一些信息

按钮

​ submit:提交按钮。可以提交表单

​ button:普通按钮

​ image:图片提交按钮

​ src属性指定图片的路径

​ label:指定输入项的文字描述信息

​ 注意:

​ label的for属性一般会和input的id属性值对应。如果对应了,则点击label区域,会让input输入框获取焦点。

select:下拉列表

​ 子元素:option,指定列表项

textarea:文本域

​ cols:指定列数,每一行有多少个字符

​ rows:默认多少行

CSS:页面美化和布局控制

1.概念:Cascading Style Sheets 层叠样式表

​ 层叠:多个样式可以作用在同一个html的元素上,同时生效

2.好处:

​ 1.功能强大

​ 2.将内容展示和样式控制分离

​ 降低耦合度。解耦

​ 让分工协作更容易

​ 提高开发效率

3.CSS的使用:CSS与html结合方式

​ 1.内联样式😕/了解即可,不推荐使用

在标签内使用style属性指定css代码

如:

hello css

​ 2.内部样式

在head标签内,定义style标签,style标签体内容就是css代码

如:

hello css

​ 3.外部样式

​ 1.定义css资源文件

​ 2.在head标签内,定义link标签,引入外部的资源文件

如:

a.css文件:

div{

​ color:green;

}

	<div>hello css</div>

注意:1,2,3中方式CSS作用范围越来越大

​ 1方式不常用,后期常用2,3

​ 第3种格式可以写为:

		<style>
		    @import "css/a.css";
		</style>

​ 4.CSS语法

格式:

​ 选择器{

​ 属性名1:属性值1;

​ 属性名2:属性值2;

​ …

​ }

选择器:筛选具有相同特征的元素

注意:

​ 每一对属性需要使用;隔开,最后一对属性可以不加;

​ 5.选择器:筛选具有相似特征的元素

分类:

1.基础选择器

​ 1.id选择器:选择具体的id属性值的元素。建议在一个html页面中id值唯一

语法:#id属性值{ }

​ 2.元素选择器:选择具有相同标签名称的元素

语法:标签名称{ }

注意:id选择器优先级高于元素选择器

​ 3.类选择器:选择具有相同的class属性值的元素。

语法:.class属性值{ }

注意:类选择器优先级高于元素选择器

2.扩展选择器

​ 1.选择所有元素:

语法:*{ }

​ 2.并集选择器:

选择器1,选择器2{ }

​ 3.子选择器:筛选选择器1下的选择器2

语法:选择器1 选择器2{ }

​ 4.父选择器:筛选选择器2的父元素选择器1

语法:选择器1>选择器{ }

​ 5.属性选择器:选择元素名称,属性名=属性值的元素

语法:元素名称[属性名="属性值"]{ }

​ 6.伪类选择器:选择一些元素具有的状态

语法:元素:状态{ }

如:

​ 状态:

​ link:初始化的状态

​ visited:被访问过的状态

​ active:正在访问状态

​ hover:鼠标悬浮状态

​ 6.属性

​ 1.字体,文本

font-size:字体大小

color:文本颜色

text-align:对齐方式

line-height:行高

​ 2.背景

background:

例:

div{

​ border:1px solid red;

​ height:200px;

​ width:200px;

​ background: url(“img/logo.jpg”) no-repeat center;

}

​ 3.边框

border:设置边框,符合属性

​ 4.尺寸

width:宽度

height:高度

​ 5.盒子模型:控制布局

margin:外边距

padding:内边距

​ 默认情况下内边距会影响整个盒子的大小

​ box-sizing:border-box;设置盒子的属性,让width和height就是最终盒子的大小

float:浮动

​ left

​ right

让div水平居中margin:auto;

设置边框圆角:border-radius:5px;

垂直居中:vartical-align:middle;

P147-P168今日内容

JavaScript基础

www.w3school.com

JavaScript:

概念:一门客户端脚本语言

​ 运行在刻划断浏览器中的。每个浏览器都有JavaScript的解析引擎

​ 脚本语言:不需要编译,直接就可以被浏览器解析执行了

功能:可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验

JavaScript发展史

1.1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验。命名为:c–,后来更名为:ScriptEase

2.1995年,Netscape(网景)公司,开发了一门客户端脚本语言:LiveScript。后来,请来SUN公司的专家,修改LiveScript,命名为JavaScript

3.1996年,微软抄袭JavaScript开发出JScript语言

4.1997年,ECMA(欧洲计算机制造商协会),ECMAScript,就是所有客户端脚本的标准

JavaScript=ECMAScript+JavaScript自己特有的东西(BOM+DOM)

ECMAScript

客户端脚本语言的标准

1.基本语法

​ 1.与html结合的方式

​ 1.内部JS:

定义

​ 2.外部JS:

定义

​ 注意:
1.

2.

​ 2.注释

​ 1.单行注释://注释内容

​ 2.多行注释:/注释内容/

​ 3.数据类型

​ 1.原始数据类型(基本数据类型)

​ 1.number:数字。整数/小数/NaN(not a number 一个不是数字的数字类型)

​ 2.string:字符串。字符串"abc" “a” ‘abc’

​ 3.boolean:true和false

​ 4.null:一个对象为空的占位符

​ 5.undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为underfined

​ 2.引用数据类型:对象

​ 4.变量

变量:一小块可以存储数据的内存空间

Java语言是强类型语言,而JavaScript是弱类型语言。

强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据

弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据。

语法

var 变量名=初始值;

​ 5.运算符

​ 1.一元运算符:只有一个运算数的运算符

++,–,+(正号) -(负号)

++ ==:自增(自减)

++(–)在前,先自增(自减),再运算

++(–)在后,先运算,再自增(自减)

+(-):正负号

注意:在JS中,如果运算数不是运算符所要求的类型,那么js引擎会自动的将运算数进行类型转换

其他类型转number:

​ string转number:按照字面值转换。如果字面值不是数字,则转为NaN(不是数字的数字)

​ boolean转number:true转为1,false转为0

​ 2.算数运算符

​ + - * / % …

​ 3.赋值运算符

​ = += -+…

​ 4.比较运算符

​ > < >= <= == ===(全等于)

比较方式:

1.类型相同:直接比较

​ 字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止

2.类型不同:先进行类型转换,再比较

​ ===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false

​ 5.逻辑运算符

&& :与(短路)

||:或 (短路)

!:非

其他类型转boolean:
1.number:0或NaN为假,其他为真

2.string:除了空字符串(” ”),其他都是true

3.null&undefined:都是false

4.对象:所有对象都为true

例:

obj=“123”;

if(obj!=null&&obj.lrngth>0){//防止空指针异常

​ alert(123);

}

//js中可以这样定义,简化书写。

if(obj){//防止空指针异常

​ alert(111);

}

​ 6.三元运算符

​ ? :

例子:

var a =3;

var b =4;

var c =a >b ? 1:0;

语法:

表达式?值1:值2;

判断表达式的值,如果是true则取值1,如果是false则取值2

​ 6.流程控制语句

1.if…else…

2.switch:

在java中,switch语句可以接受的数据类型:byte int shor char,枚举(1.5),String(1.7)

​ switch(变量):

​ case 值:

在JS中,switch语句可以接受任意的原始数据类型

3.while

4.do…while

5.for

​ 7.JS特殊语法

1.语句以;结尾,如果一行只有一条语句则;可以省略(不建议)

2.变量的定义使用var关键字,也可以不使用

​ 用:定义的变量是局部变量

​ 不用:定义的变量是全局变量(不建议)

​ 8.练习:99乘法表

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>99乘法表</title>
    <style>
        td{
            border:1px solid;
        }
    </style>
    
    <script>
        document.write("<table align='center'>");
        //1.完成基本的for循环嵌套,展示乘法表
        for(var i=1;i<=9;i++){
            document.write("<tr>")
            for (var j=1;j<=i;j++){
                document.write("<td>");
                //输出1*1=1
                document.write(i+"*"+j+"="+(i*j)+"&nbsp;&nbsp;&nbsp;");
                document.write("</td>");
            }
            /*//输出换行
                document.write("<br>");*/
            document.write("</tr>");
        }
        //2.完成表格嵌套
        document.write("</table>");
    </script>
</head>
<body>

</body>
</html>
基本对象

2.基本对象

​ 1.Function:函数(方法)对象

1.创建:

​ 1.var fun = new Function(形式参数列表,方法体);//忘掉吧

​ 2.function 方法名称(形式参数列表){

​ 方法体

​ }

​ 3.var 方法名 = function(形式参数列表){

​ 方法体

​ }

2.方法:

3.属性:

​ length:代表形参的个数

4.特点:

​ 1.方法定义时,形参的类型不用写,返回值类型也不写。

​ 2.方法是一个对象,如果定义名称相同的方法,会覆盖

​ 3.在JS中,方法的调用只与方法的名称有关,和参数列表无关

​ 4.在方法声明中有一个隐藏的内置对象(数组),arguments,封装所有的实际参数

5.调用:

​ 方法名称(实际参数列表);

​ 2.Array:数组对象

1.创建:

​ 1.var arr = new Array(元素列表);

​ 2.var arr = new Array(默认长度);

​ 3.var arr = [元素列表];

2.方法:

​ join(参数):将数组中的元素按照指定的分隔符拼接为字符串

​ push():向数组的末尾添加一个或更多元素,并返回新的长度。

3.属性:

​ length:数组的长度

4.特点:

​ 1.JS中,数组元素的类型可变的。

​ 2.JS中,数组长度可变的。

​ 3.Boolean

​ 4.Date:日期对象

1.创建:

​ var date = new Date( );

2.方法:

​ toLocaleString( ):返回当前date对象对应的时间本地字符串格式

​ getTime( ):获取毫秒值。返回当前日期对象秒速的时间到1970年1月1日零点的毫秒值差

​ 5.Math:数学对象

1.创建:

​ 特点:Math对象不用创建,直接使用。 Math.方法名( );

2.方法:

​ random( ):返回0~1之间的随机数。含0不含1

​ ceil(x):对数进行上舍入。

​ floor(x):对数进行下舍入。

​ round(x):把数四舍五入为最接近的整数。

3.属性:

​ PI

例:

取1~100之间的随机整数

1.Math.random()产生随机数:范围(0,1]小数

2.乘以100–>[0,99.9999]小数

3.舍弃小数部分:floor–>[0,99]整数

4.+1–>[0,99]整数[1,100]

var number=Math.floor((Math.random()*100))+1;

document.write(number);

​ 6.Number

​ 7.String

​ 8.RegExp:正则表达式对象

1.正则表达式:定义字符串的组成规则。

​ 1.单个字符:[ ]

​ 如:[a] [ab] [a-zA-Z0-9_]

​ 特殊符号代表特殊含义的单个字符:

​ \d:单个数字字符[0-9]

​ \w:单个单词字符[a-zA-Z0-9_]

​ 2.量词符号:

​ ?:表示出现0次或1次

​ *:表示出现0次或多次

​ +:表示出现1次或多次

​ {m,n}:表示m<= 数量 <=n

​ m如果缺省:{,n}:最多n次

​ n如果缺省:{m,}:最少m次

​ 3.开始结束符号

​ ^:开始

​ $:结束

2.正则对象:

​ 1.创建:

1.var reg = new RegExp(“正则表达式”);

2.var reg = /正则表达式/;

​ 2.方法:

1.test(参数):验证指定的字符串是否符合正则定义的规范

​ 9.Global

1.特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用。 方法名( );

2.方法:

encodeURI( ):url编码

decodeURI( ):url解码

encodoURIComponet( ):url编码,编码的字符更多

decodeURIComponet( ):url解码

parseInt( ):将字符串转为数字

​ 逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number

isNaN( ):判断一个值是否是NaN

​ NaN六亲不认,连自己都不认。NaN参与的==比较全部为false

​ 判断例子:

​ var a =NaN;

​ document.write(a==NaN);//返回false

​ document.write(isNaN(a));//返回true

eval( ):将 JavaScript字符串,并把它作为脚本代码来执行。

3.URL编码

传智播客=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2(12个字节)

传智播客

假设GBK编码:8个字节 1个字节8个二进制位

1001 0101 1001 0101 1001 0101 1001 0101 1001 0101 1001 0101 1001 0101 1001 0101

编码:

var str = “传智播客”;

var encode = encodeURI(str);

document,write=(encode+"
");//%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2

解码:

var s = decodeURI(encode);

document.write(s+"
");//传智播客

P169-P191今日内容

BOM

DOM

DOM简单学习:为了满足案例要求

功能:控制html文档的内容

代码:获取页面标签(元素)对象 Element

​ document.getElementById(id值):通过元素的id获取元素对象

操作Element对象:

​ 1.修改属性值:

​ 1.明确获取的对象是哪一个

​ 2.查看API文档,找其中有哪些属性可以设置

​ 2.修改标签体内容:

​ 属性:innerHTML

事件

事件简单学习

功能:某些组件被执行了某些操作后,触发某些代码的执行。

​ 造句:xxx被xxx,我就xxx

​ 我方水晶被摧毁后,我就夸奖自己。

如何绑定事件

​ 1.直接在html标签上,指定事件的属性(操作),属性值就是js代码

​ 1.事件:onclick----单击事件

​ 2.通过js获取元素对象,指定事件属性,设置一个函数

172

200
来执行。

3.URL编码

传智播客=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2(12个字节)

传智播客

假设GBK编码:8个字节 1个字节8个二进制位

1001 0101 1001 0101 1001 0101 1001 0101 1001 0101 1001 0101 1001 0101 1001 0101

编码:

var str = “传智播客”;

var encode = encodeURI(str);

document,write=(encode+"
");//%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2

解码:

var s = decodeURI(encode);

document.write(s+"
");//传智播客

P169-P191今日内容

BOM

DOM

DOM简单学习:为了满足案例要求

功能:控制html文档的内容

代码:获取页面标签(元素)对象 Element

​ document.getElementById(id值):通过元素的id获取元素对象

操作Element对象:

​ 1.修改属性值:

​ 1.明确获取的对象是哪一个

​ 2.查看API文档,找其中有哪些属性可以设置

​ 2.修改标签体内容:

​ 属性:innerHTML

事件

事件简单学习

功能:某些组件被执行了某些操作后,触发某些代码的执行。

​ 造句:xxx被xxx,我就xxx

​ 我方水晶被摧毁后,我就夸奖自己。

如何绑定事件

​ 1.直接在html标签上,指定事件的属性(操作),属性值就是js代码

​ 1.事件:onclick----单击事件

​ 2.通过js获取元素对象,指定事件属性,设置一个函数

172

200

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值