Java编程基础

学习目标:

1.掌握java基本语法,常量,变量,流程控制语句,方法以及数组。

2.熟悉java运算符的使用。

3.了解java代码的基本格式。

java的基本语法

java代码的基本格式

java中的程序的必须放在一个类中。类需要使用class关键字定义,在class前面可以有一些修饰符,格式如下:

 修饰符 class 类名{

           程序代码

}

>在编写Java代码时,需要特别注意下列几个关键点:

(1)Java中的程序代码可分为结构定义语句和功能执行语句,其中,结构定义语句用于声明一个类或方法,功能执行语句用于实现具体的功能。每条功能执行语句的最后都必须用分号(;)结束。

System.out.println("这是第一个 Java 程序!");

(2)Java语言严格区分大小写。例如,定义一个类时,Computer和computer是两个完全不同的符号,在使用时务必注意。

(3)虽然Java没有严格要求用什么样的格式来编排程序代码,但是,出于可读性的考虑,应该让自己编写的程序代码整齐美观、层次清晰。以下两种方式都可以,但是建议使用后一种。

方式一:

public class Helloworld {public static void 

main(String [

] args){System.out.println(”这是第一个 Java程序!");}}

 方式二:

public class Helloworld {

       public atatic void main(String[] args) {

              System.out.printin("这是第一个 Java程序!");

       {

}

(4)Java程序中一句连续的字符串不能分开在两行中书写,例如,下面这条语句在编译时将会出错:

System.out.println("这是第一个Java 程序!");

如果为了便于阅读,想将一个太长的字符串分在两行中书写,可以先将这个字符串分成两个字符串,然后用加号(+)将这两个字符串连起来,在加号(+)处断行,上面的语句可以修改成如下形式:

System.out.println(”这是第一个”+"Java程序!");

Java中的注释

在编写程序时,为了使代码易于阅读,通常会在实现功能的同时为代码加一些注释。

注释是对程序的某个功能或者某行代码的解释说明,它只在Java源文件中有效,在编译程序时编译器会忽略这些注释信息,不会将其编译到class字节码文件中去。

Java中的注释有三种类型,具体如下:

单行注释:通常用于对程序中的某一行代码进行解释,用符号“//”表示,“//”后面为被注释的内容,具体示例如下:

int c = 10; //定义一个整型变量 

多行注释:顾名思义就是在注释中的内容可以为多行,它以符号“/*”开头,以符号“*/”结尾,多行注释具体示例如下:

/* int c=10;

int x=5; */

文档注释:以“/**”开头,并在注释内容末尾以“*/”结束。

Java中的标识符

在编程过程中,经常需要在程序中定义一些符号来标记一些名称,如,包名、类名、方法名、参数名、变量名等,这些符号被称为
标识符。
标识符可以由任意顺序的大小写字母、数字、下划线(_)和美元符号(S)组成,但不能以数字开头,不能是Java中的关键字。

定义标识符时还应该遵循以下规则:

1、包名所有字母一律小写。如:cn.itcast.test。

2、类名和接口名每个单词的首字母都要大写。如:ArrayList、Iterator。

3、常量名所有字母都大写,单词之间用下划线连接。例如:DAY OF MONTH。

4、变量名和方法名的第一个单词首字母小写,从第二个单词开始每个单词首字母大写。例如:lineNumber、getLineNumber。

·5、在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读。例如使用userName表示用户名,password表示密码。

Java中的关键字

关键字是编程语言里事先定义好并赋予了特殊含义的单词,也称作保留字。和其它语言一样,Java中保留了许多关键字,例如, class、public等,下面列举的是Java中所有的关键字。

47106e0fc6ed41a998c036b160f3f0c7.png

一、Java中的常量

常量就是在程序中固定不变的值,是不能改变的数据。

在Java中,常量包括整型常量、浮点数常量、布尔常量、字符常量等。

1.整数常量

整型常量是整数类型的数据,它的表现形式有四种,具体如下:

①二进制:由数字o和1组成的数字序列如:00110101。

②八进制:以o开头并且其后由0~7范围(包括0和7)内的整数组成的数字序列,如:0342。

③十进制:由数字0~9范围(包括0和9)内的整数组成的数字序列。如:198。整数以十进制表示时,第一位不能是o,0本身除外

④十六进制:以0x或者ox开头并且其后由0~9、A~F(包括0和9、A和F)组成的数字序列,如0x25AF。

2.浮点数常量

浮点数常量就是在数学中用到的小数,分为float单精度浮点数和double双精度浮点数两种类型。其中,单精度浮点数后面以F或f结尾,而双精度浮点数则以D或d结尾。当然,在使用浮点数时也可以在结尾处不加任何的后缀,此时虚拟机会默认为double双精度浮点数。浮点数常量还可以通过指数形式来表示。具体示例如下:

2e3f    3.6d     0f    3.84d     5.022e+23fv

3.字符常量

字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引号('')引起来,它可以是英文字母、数字、标点符号、以及由转义序列来表示的特殊字符。具体示例如下:

'a'       '1'     '&'    '\r'    'lu000'

上面的示例中,"\u0000'表示一个空白字符,即在单引号之间没有任何字符。之所以能这样表示是因为,Java采用的是Unicode字符集,Unicode字符以\u开头,空白字符在Unicode码表中对应的值为'\uO000'

4.字符串常量

字符串常量用于表示一串连续的字符,一个字符串常量要用一对英文半角格式的双引号(" ")引起来,具体示例如下:

"HelloWorld"     "123"     "Welcome \n XXX"     " "

一个字符串可以包含一个字符或多个字符,也可以不包含任何字符,即长度为零。

5.布尔常量

布尔常量即布尔型的两个值true和false,该常量用于区分一个事物的真与假。

6.null常量

null常量只有一个值null,表示对象的引用为空。

二、java中的变量

变量的定义

在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元我们称之为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。

下面的代码中,第一行代码的作用是 定义了两个变量x和y,也就相当于分配了两块内存单元,在定义变量的同时为变量x分配了一个初始值0,而变量y没有分配初始值,变量x和y在内存中的状态如图所示。

int x= 0,y;

y= x+3;

9714c9605f2940f18babde237c361de0.png

 变量的数据类型

Java是一门强类型的编程语言,它对变量的数据类型有严格的限定。在定义变量时必须声明变量的类型,在为变量赋值时必须赋予和变量同一种类型的值,否则程用字会报错。

73838595bf4940cf833905c5c8162079.png

 1.整数类型的变量

①用来存储整数数值,即没有小数部分的值。

②整数类型分为4种不同的类型:字节型 (byte)、短整型(short)、整型(int)和长整型(long)。

7dc635961b7841399a34ef1f33057cb4.jpg

 ③占用空间指的是不同类型的变量分分别占用的内存大小

④取值范围是变量存储的值不能超出出的范围为一个long类型的变量赋值时需要注意- 点,所赋值的后面要加上 一个字母“L”(或小写“1”),说明赋值为long类型。如果赋的值未超出int型的取值范围,则可以省略字字母“L”(或小写“1”)。

long num =2200000000L; // 所赋的值 超出了 int 型的取值范围,后面必须加上字母 L 

long num =198L; // 所赋的值未 未超出int型的取值范围,后面可以加上字母心 

long num=198; // 所赋的值未 未超出int型的取值范围,后面可以省略字母L

2.浮点数类型变量

①浮点数类型变量用来存储小数数值。

②浮点数类型分为两种:单精度浮点数(float)、双精度浮点数(double),double型所表示的浮点数比float型更精确。

6b73394dd0bc45e0912f9d20e2213ab4.jpg

 ③在取值范围中,E表示以10为底的指数,E后面的“+”号和“_”号

④代表正指数和负指数,例如1.4E-45表示1.4*10-45。

⑤在为一个float类型的变量赋值时需要注意一点,所赋值的后面一定要加上字母“F”(或“f”),而为double类型的变量赋值时,可以在所赋值的后面加上字符“D”(或“d”),也可不加。

⑥float f-123.4f //为一个float类型的变量赋值,后面必须加上字母f+ 

float f-123.4f; //为一个float类型的变量赋值,后面必须加上字母f

double d1 = 100.1; //为一个double类型的变量赋值,后面可以省略字母 d

double d2 = 199.3d; //为一个double类型的变量赋值,后面可以加上字母 d

⑦在程序中也可以为一个浮点数类型变量赋予一个整数数值。

3.字符类型变量

①用于存储一个单一字符,在Java中用char表示。
②每个char类型的字符变量都会占用2个字节。
③赋值时,要用英文半角格式的单引号(' ')把字符括起来,如'a'.
④也可以赋值为0~65535范围内的整数,计算机会自动将这些整数转化为所对应的字符,如数值97对应的字符为'a'。

char c='a';// 为一个char类型的变量赋值字符 a
char ch =97;// 为一个char类型的变量赋值整数 97,相当于赋值字符 a

4.布尔类型

布尔类型变量用来存储布尔值,在Java中用boolean表示,该类型的变量只有两个值,即true和false。具体示例如下:

boolean flag = false;    // 声明一个boolean类型的变量,初始值为false+    
flag = true;    // 改变 flag变量的值为 true

变量的类型转换

①当把一种数据类型的值赋给另一种数据类型的变量时,需要进行数据类型转换。

②根据转换方式的不同,数据类型转换可分为两种:自动类型转换和强制类型转换。

1.自动类型转换

①也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显式地进行声明。

②要实现自动类型转换,必须同时满足两个条件。

第一是两种数据类型彼此兼容

第二是目标类型的取值范围大于源类型的取值范围。

byte b =3;

intx=b;//程序把byte类型的变量b转换成了int类型,无须特殊声明

(1)整数类型之间可以实现转换,如byte类型的数据可以赋值给 short、int、long类型的变量,short、char类型的数据可以赋值给int long类型的变量,int类型的数据可以赋值给long类型的变量

(2)整数类型转换为float类型,如byte、char、short、int类型的数据可以赋值给float类型的变量。

(3)其它类型转换为double类型,如byte、char、short、int、long float类型的数据可以赋值给double类型的变量。

2.强制类型转换

①强制类型转换也叫显式类型转换,指的是两种数据类型之间的转换需要进行显式地声明。

②当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,自动类型转换无法进行,这时就需要进行强制类型转换。

③强制类型转换的格式如下所示:

目标类型   变量=   (目标类型)  值

d7dd6916faed417c822b5044d97e3dd6.png

0d57885ec4534bf6a0e6ec2fbc028568.png 

 变量的作用域

①变量需要在它的作用范围内才可以被使用, 这个作用范围称为变量的作用域。

②在程序中,变量一定会被定义在某一对大括号中,该大括号所包含的代码区域便是这个变量的作用域。

a562c844dcc74324949f0ba62e966995.png

 三、java中的运算符

算术运算符

算术运算符就是用来处理四则运算符的符号,这是最简单,最常用的运算符号。

a306971a6457410e9807206d932fc73b.png

 74370979757c438dbc1cab7d696c72c5.png

 

算术运算符看上去比较简单,也很容易理解,但在实际使用时有很多需要注意的问题,具体如下:

(1)在进行自增(++)和自减(--)的运算时,如果运算符放在操作数的前面则是先进行自增或自减运算,再进行其它运算。反之,如果运算符放在操作数的后面则是先进行其它运算再进行自增或自减运算。

(2)在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数。如果除法运算有小数参与,得到的结果会是一个小数。

(3)在进行取模(%)运算时,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关。

赋值运算符

赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量,表中列出了Java中的赋值运算符及用法。

0114cac7cb6f46118922bd70804e739b.png

在赋值运算符的使用中,需要注意以下几个问题:

(1)在Java中可以通过一条赋值语句对多个变量进行赋值

int_x;Y,z;+

x=y=z=5; // 为三个变量同时赋值 

int x=y=z=5; // 这样写是错误的 

(2)除了“=”,其它的都是特殊的赋值运算符,以“+=”为例,x+=3就相当于x=x+3,首先会进行加法运算x+3,再将运算结果赋值给变量x。

-=、*=、/=、%=赋值运算符都可依此类推。

05915c1075094e0fa850b4b4a0af8e61.png

比较运算符

比较运算符用于对两个数值或变量进行比较, 其结果是一个布尔 值,即true或false。

ddf9a94907574ec0be1c657efbde440a.png

 比较运算符在使用时需要注意一个问题,不不能将比较运算符“==”误写成赋值运算符“=”。

逻辑运算符

逻辑运算符用于布尔型数据进行操作,其结果仍是一个布尔型。

d30cc81943b642abb28609ed56b2d346.png

 在使用逻辑运算符的过程中,需要注意以下几个细节:

(1)逻辑运算符可以针对结果为布尔值的表达式进行运算。如:x>3&&y!=0。

(2)运算符“&”和“&&”都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则结果为false。当运算符“&”和“&&”的右边为表达式时,两者在使用上还有一定的区别。在使用“&”进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用“&&”进行运算,当左边为false时,右边的表达式不会进行运算,因此“&&”被称作短路与。

d32bf07478f34f1398a5536de2849d49.png

 (3)运算符“1”和“11”都表示或操作,当运算符两边的操作数任何一边的值为true时,其结果为true,当两边的值都为false时,其结果才为falseo同与操作类似,“11”表示短路或,当运算符“11”的左边为true时,右边的表达式不会进行运算。

(4)运算符“^”表示异或操作,当运算符两边的布尔值相同时(都为true或都为false),其结果为false。当两边布尔值不相同时,其结果为true。

运算符的优先级

在对一些比较复杂的表达式进行运算时,要要明确表达式中所有运算符参与运算的先后顺序,把这种顺序称们作运算符的优先级。

be9fcc12a4904f54aeba5ff2de3d7ee1.png

 任务一、商城库存清单程序设计

6b9359ad72e848e9ada411d51d554d05.png

 47a6b63d07b948a7bb8651a03b0a3837.png

 四、选择结构语句

if条件语句

if条件语句分为三种语法格式,具体如下:

(1)if语句

(2)if...else语句

(3)if...else if...else语句

1.if语句:

if语句是指如果满足某种条件,其语法格式如下:

      if   (条件语句){

                代码块

}

当判断条件是一个布尔值,且值为true时,才会执行{ }中的语句。

if语句的执行流程如下:

7cfac45763a44091bdc61c4a8796396a.png

 1667f508e7c449dba762e64fbd812ea3.png

 2.if...else语句

if...else语句是指如果满足某种条件,就进行某种处理,否则就进行另一种处理,其语法格式如下所示:

if(判断条件){

     执行语句1

}else{

     执行语句 2

}

if...else语句的执行流程如下:

eda335cbbf1e40ab9e1b7e2b0b2ceef7.png

 64564e17cb6a41e18efc41bfb9889dc6.png

 在Java中有一种特殊的运算叫做三元运算,它和if-else语句类似,语法如下:

判断条件?   表达式1   :   表达式2

三元运算通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式1的值,否则结果为表达式2的值。

int x=0;

int y=1;

int max;

if(x>y){

        max=x;

} else {

      max=y;

}

等价于

int max=x>y?x:y;

3.if...else...else语句

if...else if….else语句用于对多个条件进行判断,进行多种不同的处理,其语法格式如下所示:

if (判断条件1){

      执行语句1

} else if(判断条件2){

     执行语句2

}

...

else if(判断条件n){

        执行语句n

} else {

     执行语句n+1

}

2023fa6699c3443a9788ca27ab15df57.png

switch条件语句

switch语句也是一种很常见的选择语句。和if条件语句不同,它只能针对某个表达式的值做出判断,从而决定执行哪一段代码。

在switch语句中,使用switch关键字来描述一个表达式,使用case关键字来描述和表达式结果比较的目标值,当表达式的值和某个目标值匹配时,会执行对应case下的语句。

需要注意的是,在switch语句中的表达式只能是byte、short、char、int、枚举(JDK1.5引入的)、String类型(JDK1.7引入的)的值,如果传入其他值,程序会报错。

fc40384f28dc4ffdb1cd223dc2d5de8c.png

 在使用switch语句的过程中,如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可。

例如,要判断一周中的某一天是否为工作日,同样使用数字1~7来表示星期一到星期天,当输入的数字为1、2、3、4、5时就视为工作日,否则就视为休息日。

0c9949ef5c7b4952b60f5bf37fccb2db.png

五、循环结构语句

 while循环语句

while语句和if条件语句有点类似,都是根据条件判断来决定是否执行后面的代码,区别在于,while循环语句会反复地进行条件判断,只要条件成立,"内的执行语句就会执行,直到条件不成立,while循环结束。

7f1a4ab2d93e44779b4e0beb60569390.png

2f90c8a0daaa4946916294f9fa872c07.png 

 do...while循环语句

do...while循环语句和while循环语句功能类似。

aa8d1f8e56e3461484d99d24ced0547f.png

 8c8437fb92974ed282d62ee25bc858b1.png

 for循环语句

or循环语句是最常用的循环语句,一般用在循环次数己知的情况下,其语法格式如下所示:

for(初始化表达式;循环条件;操作表达式){

        执行语句

         ......

}

在上述语法格式中,for后面的()中包括三部分内容,初始化表达式、循环条件和操作表达式,它们之间用“;”分隔,{}中的执行语句为循环体

如果用①表示初始化表达式、②表示循环条件、③表示操作表达式、④表示循环体,则for循环的执行流程如下所示:

for (① ; ② ;③) {

        ④

}

第一步,执行①

第二步,执行②,如果判断结果为true,执行第三步,如果判断结果为false,执行第五步

第三步,执行④

第四步,执行③,然后重复执行第二步。第五步,退出循环。

10b6d9c924244c2383562a4dd2c5b962.png

 循环嵌套

嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do..while、for循环语句都可以进行嵌套,并旦它们之间也可以互相嵌套,如最常见的在fo or循环中嵌套for循环。

ef2596f8b92b491cbcf4a6a54cec75ea.png

 跳转语句(break、continue)

跳转语句用于实现循环执行过程中程序流程的跳转,在Java中的跳转语句有break语句和continue语句

1、break语句:用在switch条件语句和循环语句中,它的作用是终止某个case并跳出switch结构。

2、continue语句:用在循环语句中,它的作用是终止本次循环,执行下一次循环

5066b1712af249e298237d73c340fc7b.png

e22ada82f2734bbe883f0ad90e9317ec.png 

 4a789423d0f549e39b798b54621e2569.png

 任务二:猜数字游戏

8826c753d46b4b3f96021be4f270b966.png

ad3a78b340c34a96bd892d599e71eb86.png 

 六、方法

什么是方法

①假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹。发射炮弹的动作需要编写100行的代码,在每次实现发射炮弹的地方都需要重复地编写这100行代码,这样程序会变得很臃肿,可读性也非常差。

②为了解决代码重复编写的问题,可以将发射炮弹的代码提取出来放在一个1中,并为这段代码起个名字,这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了。

③上述过程中,所提取出来的代码可以被看作是程序中定义的一个方法,程序在需要发射炮弹时调用该方法即可。

0b6789bfa6824093a16c866d980b7153.png

c7336e49bab64ffb94760ebddfd69390.png 

①修饰符:是对访问权限的限定,例如,public、static都是修饰符

②返回值类型:用于限定方法返回值的数据类型

③参数类型:用于限定调用方法时传入参数的数据类型

④参数名:是一个变量,用于接收调用方法时传入的数据

⑤return关键字:用于结束方法以及返回方法指定类型的值

⑥返回值:被return语句返回的值,该值会返回调用者

61b86f4e26d04335a75e58f6e1b80599.png

 方法的重载

ad10f6f9424448bdadc93c1476e79276.png

 Java允许在一个程序中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。

七、数组

数组的定义

数组是指一组数据的集合,数组中的每个元素被称为元素,在数组中可以存放任意类型的元素,但同一个数组中存放的元素类型必须一致。

在Java中,可以使用下列格式定义一个数组,具体示例如下:

int[]x= new int [100];

上述语句就相当于在内存中定义了100个int类型的变量,第一个变量的名称为x[0],第二个变量的名称为x[1],以此类推,第100个变量的名称为x[99],这些变量的初始值都是0。

在Java中,为了方便我们获得数组的长度,提供了一个length属性,在程序中可以通过“数组名.length”的方式来获得数组的长度,即元素的个数。

5060f7cc9d0d4f0f8351a077e51513ca.png

 当数组被成功创建后,数组中元素会被自动力赋予一个默认值,根据元素类型的不同,默认初始化的值也是不一 样的。

86ecfcadf6944290a5d3fad156dd75f7.jpg

 8348fd53a4fc4b8c86991da34c018ce4.png

 在初始化数组时还有一种方式叫做静态视始化,就是在定义数组的同时就为数组的每个元素赋值。数组的静态初始化有两种方式:

1.类型[]数组名=new类型[]{元素,元素,……};

2.类型[]数组名={元素,元素,元素,..…};

0bc31446a68345089fc9befff7e35467.png

 数组的常见操作

1.数组遍历

在操作数组时,经常需要依次访问数组中的每一个元素,这种操作叫数组的遍历。

1f167184a22a4ba3b888d1517327b867.png

259ab24f869346ba8887acc9aaa94590.png 

 2.数组排序

在操作数组时,经常需要对数组中的元素进行排序,其中冒泡排序是比较常见的一种算法。冒泡过程中,不断比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似。

数组排序的过程如下所示:

(1)从第一个元素开始,将相邻的两个元素依次比较,直到最后两个元素完成比较,如果第一个元素比后一个大,则交换位置。整个过程完成后,数组中最后一个元素就是最大值。

(2)除最后一个元素,将剩余的元素继续进行两两比较,过程与第一步类似,这样数组中第二大的元素放在了倒数第二个位置。

(3)以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一个元素需要比较为止。

68cb15adb0fc417a90e02771b37cad94.png

 2755bcbe37fb470b90e0d3cdc6cf02b0.png

 756ffffca1434f22885c0487dd10bc7e.png

 3.数组最值

在操作数组时,经常需要获取数组中元素的最值。

35159a18cd9a477a98b6ec903a1f1c2f.png

 8d2c5be252c844aaa2580fac38c292e8.png

多维数组

多维数组可以简单地理解为在数组中嵌套数组。在程序中比较常见的就是二维数组。

二维数组的定义有很多方式,具体如下:

方式一:

int[][] arr = new int[3][4];

上面的代码定义了一个3行4列的二维数组,它的结构如下图所示。

e8ce687ddb654ffc8dc15525366b2eaa.jpg

 方式二:

int[][] arr= new int[3][];

上述方式与第一种方式类似,只是数组中每个元素的长度不确定,采用第二种方式常见的数组结构如下图所示。

4056f433feab45038f87608b56325545.jpg

 方式三:

int[][] arr ={{1,2},{3,4,5,6},{7,8,9}};

采用上述方式定义的二维数组有三个元素,这三个元素都是数组,分别是{1,2}、{3,4,5,6}、{7,8,9}。

b4050d66833146bc880c042016101c38.jpg

 多维数组对元素的访问也是通过角标的方式 例如,访问二维数组中 第一个元素数组的第二个元素的方式如下所示:

arr[0][1];

89906dd607784d46b505ffcbe391f11d.png

 任务三:随机点名器

c9885b0606fe4c86a96d632afafde7fd.png

e120e7042de74e1f9d63fe66bab5d093.png 

2c1c5828b4e04ff3b5fe769bce597662.png 

7889b031e4b9441eacd1edaeeb59ae3d.png 

b7d8d2015fe049c5bab776cbe45256b6.png 

 

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值