java基础

该博客围绕Java基础展开,涵盖源文件组成、输出语句、注释等内容。介绍了CLASSPATH配置、关键字、标识符等知识,讲解了变量、数据类型、类型转换,还阐述了各类运算符及程序流程控制的三大结构,如if选择、switch case等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Day1

1.1 源文件组成部分

  • 编写,也叫外部结构
  • 编写main方法,也叫主方法程序的入口
    注意:
    • 编写在
    • 在一个类中main方法是可有可无
    • 如果编写main方法,则在一个类中最多有一个
  • 编写代码
    注意:
    • 暂时将代码写在入口处
    • 可以在入口中编写N条语句,语句也就是以英文分号结束
    • 建议:一行编写一条语句

1.2 输出语句

System.out.print("编写大小写字母、汉字、数字、特殊符号。但是输出后不换行");
System.out.println("") // 表示空一行
System.out.println("输出后换行:先输出后换行");

1.3 注释

  • 作用:解释说明,在程序中并不运行
  • 目的:增加程序的可读性
  • 注释分类:
     单行注释://
     多行注释:/* 内容 /
     文档注释:/
    * 注释内容 */

1.4 public class和class的区别

  • 一个类前面的public是可有可无
  • 如果一个类使用public修饰文件名必须与类名一致
  • 如果一个类前面没有使用public修饰,则文件名和类名可以不一致,当编译成功后会生成对应类名的字节码文件(.class)
  • 一个类中的main方法是可有可无的,如果没有编写main方法编译成功,但是不能运行
  • 一个源文件编写任意多个类,当编译成功后会自动生成对应类的个数的字节码文件,并可以运行每个字节码文件(必须保证有入口:main方法)
  • 一个源文件中,最多有一个类前面使用public修饰

Day2

2.1 CLASSPATH

字节码文件路径

注意:当在默认情况下,运行每个字节码文件时在当前目录下找,如果找到则运行,否则报错

配置claspath

临时配置classpath
1.使用set命令完成临时配置classpath:
set classpath=F:\javacourse\javalearning\src\javapack找到运行,找不到就报错;
set classpath=F:\javacourse\javalearning\src\javapack;找到就运行,找不到就在当前目录下找,找到运行找不到报错;
set classpath=F:\javacourse\javalearning\src\javapack;F:\javacourse从前往后找
2.使用set命令完成查看c是否lasspath配置:set classpath
3.使用set命令完成删除classpath配置:set classpath=
永久配置classpath
永远去你配置的路径找,不建议配置永久classpath

2.2 关键字

在java中具有特殊意义的,全部小写
如:class,public,static,void…

2.3 标识符

也就是名字,对类名、变量名、方法名、参数名的修饰

标识符命名规则

 以字母、下划线或$开头,其后可以是字母、数字、下划线或美元符号。区分大小写,不能使用关键字

标识符命名规范

  • 建议:见名知意,就是说最好编写单词,如name,age
  • 建议:类名的每个单词首字母大写,如Hello,HelloWorld,Student
  • 建议:变量名称、方法名称、参数名称采用驼峰命名法,如,age,getInfo
  • 建议:标识符长度不要超过15个字符,如:HelloWorld,args,avg

2.4 字面值

  • 整数类型字面值:100,9,-1,0
  • 浮点类型字面值:0.1,3.14159,-98.2
  • 字符串类型字面值:必须使用英文双引号引起来,如"你好"
  • 字符类型字面值:‘a’,‘1’,‘男’
  • 布尔类型字面值:表示只有两个取值,分别是true,false

2.5 进制以及进制之间的转换

常用进制:二进制(0,1),八进制(0-7),十进制(0-9),十六进制(0-9,A-F)

2.6 字符编码

按某种格式某种规定将数据存在计算机中

常用的字符编码:

ASCII:‘a’--------->97 ‘b’------------->98 ‘A’------>65 ‘0’------->48…
iso8859-1:西欧语言编码,兼容ASCII码
GBK/GB2312:中文编码
Unicode:统一全球所有国家的文字
 常用的有:utf-8 utf-16 utf-32
 注意:java源代码采用unicode编码
 乱码、编码、解码

2.7 变量

变量:
存放数据,且该变量中的数据时可以发生改变的

常用的数据类型

  整数类型int,浮点类型double,字符串类型string,字符类型char,布尔类型Boolean

变量的操作步骤

  • 声明变量,即确定当前变量存放数据的类型
    语法格式:数据类型 变量名称; 如,int a
  • 赋值,也就是将=右侧值赋给等号左边的变量名称
    语法格式:变量名称=值;如a=18
  • 使用,暂时使用输出变量的值
class Var{
	public static void main(String[] args){
		//变量操作步骤
		//第一步,声明变量
		int a;
		double b;
		String c;
		//第二步,赋值
		a = 100;
		b = 3.14;
		c = "北京市";
		//第三步,使用
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
	}
}

声明的同时完成赋值:
语法格式:数据类型 变量名称 = 值

class Var01{
	public static void main(String[] args){
		//优化Var代码,在声明的同时完成赋值
		//第一步,声明变量并且赋值
		int a = 100;
		double b = 3.14;
		String c = "北京市";
		
		//第二步,使用
		System.out.println("a = "+ a); // +表示连接
		System.out.println("b = "+ b);
		System.out.println("c = "+ c);
	}
}

多个变量类型相同,可以一次声明多个变量,之间使用逗号隔开:

class Var02{
	public static void main(String[] args){
		//将0.1,99.87,-1,59.9存放在变量中,并输出变量的值
		//如果有多个变量类型相同,可以一次声明多个变量,之间使用逗号隔开
		double a = 0.1,b = 99.87,d = 59.9;
		int c = -1;

		//第二步,使用
		System.out.println("a = "+ a + "\nb = "+b+"\nc = "+c+"\nd = "+d);
	}
}

2.8 转义序列符

转义符含义
\n换行符
\t制表符
\\\
\""
\'
\u0000Unicode转义符
class Var03{
	public static void main(String[] args){

		System.out.println("Hello\nWorld");//换行符
		System.out.println("Hello\n\nWorld");
		System.out.println("Hello\tWorld");//水平制表符
		System.out.println("F:\\学习视频\\Java视频");//F:\学习视频\Java视频
		System.out.println("\"F:\\学习视频\\Java视频\"");//"F:\学习视频\Java视频"
		System.out.println("\'F:\\学习视频\\Java视频\'");
		System.out.println("'F:\\学习视频\\Java视频'");//'F:\学习视频\Java视频'
		System.out.println("Hello\u0000World");//Hello World
		System.out.println("Hello\u2605World");//Hello★World
	}
}

2.9 变量分类

  • 按声明位置(作用范围)分为:
    局部变量:在方法中声明的,如main
    全局变量:在类中声明,class下

  • 按数据类型范围:
    基本数据类型变量:在内存中存放真正的值
    引用数据类型变量:在内存中存放地址(引用)

变量的内存分析

1.当运行程序时,在内存中JVM会自动分配空间

2.内存中包含
 栈:存放方法以及方法中的局部变量
 堆:存放方法对象
 方法区:代码片段、常量池、静态属性

class Var04{
	public static void main(String[] args){
		int i;
		double j;
		i = 123;
		String s;
		char ch;
		ch = '男';
		j = 3.14;
		s = "李四";
	}
}

内存分析图:
变量内存分析图
结论:
基本数据类型的变量
在内存中存放真正的值,比如int、char、double

引用数据类型变量
在内存中存放地址,比如:String

2.10 基本数据类型

又分为4大类共计8种

整数类型: byte,short,int,long

 整数类型中默认为int
 整数类型各自取值范围

类型占用存储空间存储范围
byte1字节-128~127
short2字节 [ − 2 15 , 2 15 − 1 ] [-2^{15},2^{15}-1] [215,2151]
int4字节 [ − 2 31 , 2 31 − 1 ] [-2^{31},2^{31}-1] [231,2311]
long8字节 [ − 2 63 , 2 63 − 1 ] [-2^{63},2^{63}-1] [263,2631]
class Var05{
	public static void main(String[] args){
		//byte
		byte a = 1;//注意:在java中,当对byte,short,char类型赋值,若没超范围则直接赋值
		a = 5;
//		a = 128; // 超过了范围
		System.out.println("a = "+a);
		
		//long
		long d = 6;
		d = 123456;
//		d = 123456789009;//出现编译错误,因为默认类型为int
		d = 123456789009L;//就变成了long,l或L
	}
}

浮点类型: float,double(默认)

类型占用内存空间存储范围
float4字节-3.404E38~3.404E38
double8字节-1.789E308~1.789E308
class Var06{
	public static void main(String[] args){
		//浮点类型
		double x = 0.1;
		x = 999.99;
		System.out.println("x="+x);
		
//		float y = 0.87;//取值大的类型不能直接给小的赋值
		float y = 0.87f;//解决办法1
		float y = (float)0.87;//解决办法2:强制类型转换
	}
}

字符类型: char

  • 一次只能存放一个,并且使用英文的单引号引起来
  • 一个汉字表示一个字符
  • 整数类型和字符类型是可以相互转换的
  • 字符类型取值范围0------>65535占两个字节
class Var07{
	public static void main(String[] args){
		//字符类型
		char ch = 'a';
		ch = '好';
		ch = 100;//注意整数值直接给字符赋值,存放的是ASCII码对应的字符
//		ch = -1;//注意字符类型是有取值范围的:0---->65535
		System.out.println("ch = "+ch);
		
		int i = 6;
		i = 'a';//字符也可以给int赋值,存放的是对应的ASCII码值 
		System.out.println("i = "+i);
	}
}

布尔类型: boolean

  • 布尔类型只有两种取值,分别是true、false
  • 布尔类型占一个字节
class Var08{
	public static void main(String[] args){
		//布尔类型
		boolean x = true;
		System.out.println("x = "+x);
	}
}

2.11 类型之间的转换

  • 强制类型转换:也叫显式类型转换
     当取值范围大的类型赋给取值范围小的类型,必须进行强制类型转换,但是可能存在精度损失,3.14------->3
  • 自动类型转换:也叫隐式类型转换
     当取值范围小的类型赋给取值范围大的类型
class Var09{
	public static void main(String[] args){
		//自动类型转换也叫隐式类型转换
		byte a = 1;
		int b = a;//构成自动类型转换
		float c = a;//1.0
		
		int i = (int)3.14;//构成强制类型转换 
	}
}

Day3

3.1 类型转换的6条规则

  • 基本数据类型中除了boolean类型以外,剩余7种类型可以进行相互转换
  • 当取值范围小的类型赋值给取值大的类型,构成自动类型转换,也叫隐式类型转换
    byte,short,char,int,long,float,double
  • 当取值范围大的类型不能直接给类型小的赋值,则必须强制类型转换,但可能有精度损失
  • 当对byte,short,char类型赋值时,如果没超过该类型取值范围则可以直接赋值
  • 当对byte,short,char类型进行混合运算时,先转为int类型再进行计算
  • 当多种数据类型混合,先转为取值范围大的类型再进行计算
public class Datatype {
	public static void main(String[] args){
		byte a = 3;
		short b = a;
		int c = a + b;
		System.out.println("c="+c);
		
		int i = 5;
		long j = 6;
		double k = 1.2;
		double x = i+j+k;
	}
}

3.2 算术运算符:

+ - * / %(求余,取模) ++ --

public class Datatype {
	public static void main(String[] args){
		//当+两边操作数都是数值类型时,则做加法运算
		System.out.println(10 + 20);//30
		System.out.println(10 + 20.0);//30.0
		
		int a = 3,b = 4;
		int sum = a + b;
		double k = 1.2;
		//当+两边操作数中有一个为非数值型,则做连接
		System.out.println("sum="+sum);//sum=7
		System.out.println("sum="+a +b);//sum=34
		System.out.println("sum="+(a+b));//sum=7
		
		//-,必须保证两个操作数都是数值类型
		System.out.println(10-20);
		System.out.println(6-4.3);
		int x = 5,y=6;
		int z=x-y;
		System.out.println("z="+z);//z=-1
		System.out.println("z="+(x-y));//z=-1
		
		//*
		System.out.println(5*6);
		System.out.println(5.0*6);
		int m=3,n=4;
		int l = m*n;
		System.out.println("l="+l);//12
		System.out.println("l="+m*n);//12
		
		System.out.println(10/2);//5
		System.out.println(10/3);//3
		System.out.println(7/2.0);//3.5
		System.out.println("s结果="+20/6);//3
		
		System.out.println(10%5);//0
		System.out.println(9%3.0);//0.0
		System.out.println(4%6);//4
		System.out.println(0%10);//0
		System.out.println(6%0);//除数不能为0
	}
}

综合案例:

class Operator{
	public static void main(String[] args){
		//练习:计算123各个位之和
		int num=123;
		int gw=num%10;
		int sw=num/10%10;
		int bw=num/100;
		int sum=gw+sw+bw;
		System.out.println("sum="+sum);//sum=6
	}
}

++
++:表示自身加一
  前置++:将++编写在变量名称前面,例如++a;先自身加1再做其他运算
  后置++:将++编写在变量名称后面,例如a++;先做其他运算再加一

--

–:自身减一,也分为前置减减和后置减减

class Operator01{
	public static void main(String[] args){
		//++
		int a = 3;
		int b = ++a;
		System.out.println("a="+a+"\nb="+b);//a=4,b=4
		
		int x = 5;/*
		int y = x++;
		System.out.println("x="+x+"\ny="+y);//x=6,y=5
		*/
		
		int z = x++ +2;
		System.out.println("x="+x+"\nz="+z);//x=6,z=7
	}
}

3.3 连接运算符:+

求和、连接

class Operator02{
	public static void main(String[] args){
		int a = 12;
		int b = 3;
		String s =""+a+b;//有非数值就是拼接
		System.out.println("s="+s);//s=123
	}
}

3.4 赋值运算符: =

扩展赋值运算符:+=,-=,*=,/=

class Operator03{
	public static void main(String[] args){
		int x = 5;
		x += 0.5;//自动类型转换。x=x+0.5会出现编译错误。
		System.out.println("x="+x);//x=5

		int a = 123,s=0;
		s = s*10+a%10;//s=3
		//s *= 10+a%10;//s=s*(10+a%10)
		System.out.println("s="+s); 
	}
}

3.5 关系运算符:

优先级别:算术运算符>关系运算符>赋值运算符

class Operator04{
	public static void main(String[] args){
		//关系运算符,结果为布尔类型的值
		System.out.println(1>2); //false
		System.out.println(10>9); //true
		System.out.println(5 != 3); //true
		//优先级别:算术运算符>关系运算符>赋值运算符
		System.out.println(9 % 2==0); //false
		System.out.println(2 + 3/6 <= 4*2%5);//true,2<=3
		boolean b = 7/4+5%2 == 16/8-5*2%3;//false
		
	}
}

3.6 逻辑运算符:

逻辑与&,逻辑或|,逻辑异或^,逻辑非!,短路与&&,短路或||

逻辑异或:
当两个条件的值不同时,则结果为true,否则为false

逻辑非!:
对布尔类型取反

class Operator05{
	public static void main(String[] args){
		//逻辑运算符
		System.out.println(9>1 & 0 != 1); //true
		System.out.println(3 <= 1 & 100 > 10);//false
		System.out.println(8 != 9 ^ 12 >10);//false
		System.out.println(!false);//true
		System.out.println(!(1>9));//true
		//优先级别:算术运算符>关系运算符>逻辑运算符
		System.out.println(9/6 -4%2 > 0 & 18%9 == 0);//true
		
		//短路与和逻辑与运行结果一样,执行过程不同
		System.out.println(3>19 && 0<1);//第一个为false就为false,否则继续判断
		System.out.println(3>19 & 0<1);//每一个都要判断
		
		//短路或和逻辑或运行结果一样,短路或第一个结果为true,直接输出true
		System.out.println(1 != 2 || 55>66);//true
		System.out.println(1 != 2 | 55>66);//true
	}
}

3.7 三目运算符:

也叫条件运算符:
条件 ? 代码1:代码2

class Operator06{
	public static void main(String[] args){
		//三目运算符
		String s = 10>20 ? "大于":"不大于";
		System.out.println("s="+s);//s=不大于
		
		int num = -3;
		int i = num > 0 ? 1 : num < 0 ? -1 : 0;//三种情况嵌套
		System.out.println("i="+i);//i=-1
	}
}

3.8 键盘接收用户输入

源文件首行输入:

package day03;
import java.util.Scanner;
class Input07{
	public static void main(String[] args){
		//输入一个数并将概数输出
		//第二步:创建Scanner对象
		Scanner input = new Scanner(System.in);
		//第三步:友好提示
		System.out.println("请输入一个数:");
		//第四步:键盘输入
		int num = input.nextInt();//等待接收用户键盘输入值,回车键结束
		System.out.println("num="+num);
	}
}
class Input08{
	public static void main(String[] args){
		//计算两个数的和
		Scanner input = new Scanner(System.in);
		System.out.println("请输入第一个数:");
		int num1 = input.nextInt();
		System.out.println("请输入第二个数:");
		int num2 = input.nextInt();
		int sum = num1 + num2;
		System.out.println(num1 + "+" + num2 + "=" + sum);
	}
}

输入学生信息

class Input09{
	public static void main(String[] args){
		//输入某个学生的信息(姓名,年龄,性别,成绩,现住址,婚否),输出所有信息
		Scanner input = new Scanner(System.in);
		
		System.out.print("请输入姓名:");
		String name = input.next();//注意:在java中,键盘接收字符串类型时没有nextString(),而使用的是next()
		
		System.out.print("请输入年龄:");
		int age = input.nextInt();
		
		System.out.print("请输入性别:");
		String s = input.next();//先接收字符串类型,然后再字符串获取第0个位置的值,则使用charAt(0)
		char sex = s.charAt(0);
		
		System.out.print("请输入成绩:");
		double score = input.nextDouble();
		
		System.out.print("请输入现住址:");
		String address = input.next();
		
		System.out.print("请输入现婚否(true表示已婚,false表示未婚):");
		boolean isFlag = input.nextBoolean();
		
		System.out.println("\n学生信息如下:");
		System.out.println("姓名:"+name+"\n年龄:"+age+"\n性别:"+sex+"\n成绩:"+score+"\n现住址:"+address+"\n婚否:"+isFlag);
	}
}

Day4

4.1 程序流程控制的三大结构

顺序结构: 按顺序逐行进行执行
选择结构:
循环结构:

4.2 if选择结构

语法格式:

if (条件) {
	代码块
}

4.3 if else选择结构

if (条件) {
	代码块1
}else{
	代码块2
}  

4.4 多重if选择结构

当做两种或两种以上的情况时,则可以使用多重if选择结构完成

if(条件1){
 	代码块1
}else if(条件2){
	代码块2
}
class If02 {
	public static void main(String[] args){
		//练习:加入张三参加java考试,判断如果在95分以上有奖励,否则发红包
		Scanner input = new Scanner(System.in);
		
		System.out.print("请输入成绩:");
		double score = input.nextDouble();
		
		/* 法一:使用两个if块
		if(score>95){
			System.out.println("有奖励");
		}
		if(score<=95){
			System.out.println("发红包");
		}
		*/
		
		/* 法二:使用if else
		if(score>95){
			System.out.println("有奖励");
		}else{
			System.out.println("发红包");
		}
		*/
		
		/* 法三:使用三目运算符完成
		System.out.println(score>95 ? "有奖励" : "发红包");
		*/
		
		// 法四:多重if
		if(score>95){
			System.out.println("有奖励");
		}else if(score<=95){
			System.out.println("发红包");
		}
	}
}

练习:根据输入的年龄,输出老年,中年,青年还是少年

1.注意条件的顺序
2.注意最后else(可省略)

class If03 {
	public static void main(String[] args){
		//练习:根据输入的年龄,输出老年,中年,青年还是少年,注意条件的顺序
		Scanner input = new Scanner(System.in);
		System.out.print("请输入年龄:");
		int age = input.nextInt();
		if(age >= 55){
			System.out.println("老年");
		}else if(age >= 30){
			System.out.println("中年");
		}else if(age >= 18){
			System.out.println("青年");
		}else if(age < 18 && age > 0){
			System.out.println("少年");
		}
			System.out.println("错误的输入");
	}
}

练习:判断一个数是奇数还是偶数

class If04 {
	public static void main(String[] args){
		//练习:判断一个数是奇数还是偶数
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一个数:");
		int num = input.nextInt();
		
		//判断当前数num是否是奇数还是偶数
		if(num % 2 == 0){
			System.out.println(num+"是偶数");
		}else{
			System.out.println(num+"是奇数");
		}
	}
}

4.5 if嵌套

if(){
	if(){

	}else{

	}
}else if(){

}

练习:判断一个三位正整数是否为水仙花数

class If05 {
	public static void main(String[] args){
		//练习:判断一个三位正整数是否为水仙花数
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一个数:");
		int num = input.nextInt();
		
		//判断当前数num是否是三位正整数
		if(num >= 100 && num <= 999){
			
			//获取各个位上的数
			int bw = num/100,sw = num%100/10,gw = num%10;
			
			//计算各个位的立方和
			int sum = bw*bw*bw+sw*sw*sw+gw*gw*gw;
			
			//判断是否相等
			if(sum == num){
				System.out.println(num+"是水仙花数");
			}
				System.out.println(num+"不是水仙花数");
		}else{
			System.out.println(num+"不是三位正整数");
		}
	}
}

字符串进行比较

案例:第一名奖励10w,第二名奖励5w,第三名奖励2w,其他情况不奖励

class If06 {
	public static void main(String[] args){
		//练习:输入名次输出奖励
		Scanner input = new Scanner(System.in);
		System.out.print("请输入名次:");
		String info = input.next();
		
		/*
		if(info == "第一名"){
			System.out.println("奖励10w");
		}else if(info == "第二名"){
			System.out.println("奖励5w");
		}else if(info == "第三名"){
			System.out.println("奖励2w");
		}else{
			System.out.println("对不起,没有任何奖励");
		}
		*/
		
		//java中使用==比较的是地址是否一致,如果在字符串中比较必须使用equals
		//当字符串进行比较内容时,建议固定值编写在前面
		if("第一名".equals(info)){
			System.out.println("奖励10w");
		}else if("第二一名".equals(info)){
			System.out.println("奖励5w");
		}else if("第三名".equals(info)){
			System.out.println("奖励2w");
		}else{
			System.out.println("对不起,没有任何奖励");
		}
	}
}

4.6 switch case

当做等值操作时,可以使用switch case
语法格式:

switch(表达式){
case 常量值1:
	操作1;
	break;
case 常量值2:
	操作2;
	break;
default:
}

注意:

  • 表达式可以是byte、short、int、char类型,在JDK7.0及以后还可以是String类型、枚举
  • 在switch中编写任意多个case
  • 常量值类型必须与表达式类型一致
  • 当遇到break则执行switch case外面的语句
  • default可有可无,如果有一个switch只有一个
class Switch07 {
	public static void main(String[] args){
		//练习:输入名次输出奖励
		Scanner input = new Scanner(System.in);
		System.out.print("请输入名次:");
		String info = input.next();
		
		switch(info){
		case "第一名":
			System.out.println("奖励10w");
			break;//表示中断,当遇到break则执行switch case外面的语句
		case "第二名":
			System.out.println("奖励5w");
			break;
		case "第三名":
			System.out.println("奖励2w");
			break;
		default:
			System.out.println("对不起,没有任何奖励");
			break;
		}
	}
}

常见的注意事项:

  • case后面顺序可以任意
  • default位置也可以任意,建议在最后面
  • break可有可无,当没有break则从当前第一个匹配的case一直向下执行(就是穿透)。因此根据题意适当添加break
  • case也可以合并
class Switch08 {
	public static void main(String[] args){
		//练习:输入每天该做的事情
		Scanner input = new Scanner(System.in);
		System.out.print("请输入字符类型星期(一~日):");
		char week = input.next().charAt(0);
		
		switch(week){
		case '一':
		case '二':
		case '四':
		case '六':
			System.out.println("学习");
			break;
		case '三':
		case '五':
			System.out.println("自习");
			break;
		case '日':
			System.out.println("休息");
			break;
		}
	}
}

4.7 多重if和switch case区别

多重if:可以做等值操作,也可以做区间操作
switch case:只能做等值操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值