java 基础 (一 )

                                          三天突破java (一)

一、 java 概述

 

1)为什么要学习java ?

    java 是一门很火的语言,是目前全球最受欢迎的语言之一,在整个IT行业中,java语言占有很大的市场份额,不了解java不学习java对我们编程人员来说是一个巨大的损失。

     目前,嵌入式设备中,如平板,手机所采用的操作系统大部分都是android的,而google 对android  语言和其它几种语言的对比,  和C比提供了很多的类库,方便程序员的开发,降低工程的开发周期,课C++ 相比摒弃了很多C++ 的非常复杂的语法操作,如:指针操作,多继承

 

2)Java嵌入式的关系

     正因为android 如此大的市场,所以现在很多嵌入设备都使用android系统来做图形界面,而学习android首先就要学习java


3)java 的运行机制 

   java 源码 (编译)à .class 文件 (解释、执行)à  虚拟机运行


4)虚拟机的意义 

      Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,只面向虚拟机;

   

5)虚拟机原理

     Java虚拟机(Java Virtual  Machine,简称JVM)是一种假想的计算机。从结构上看,它由抽象的指令集、寄存器组、类文件格式规定、堆栈、内存垃圾收集器和存储区六个部件组成。指令集采用与平合无关的字节码形式,寄存器组中包含程序计数器、堆栈指针、运行环境指针和变量指针,类文件也与平台无关,堆栈用来传递参数和返回运行结果,垃圾收集器收集不再使用的内存片段,存储区则用来存放字节码。JVM仅仅规定部件的功能和规格。虽然这些功能和规格是统一的,但是并没有规定这此部件的具体实现技术,就是说,可以用任何一种技术来实现。 


6)java的垃圾回收机制

     java 虚拟机会每隔一段时间去检查内存中没有被释放的内存,采用引用计数机制,如果发现计数为0,则释放它,相比于C++,C 中的用户自己回收内存,java的操作更不容易造成内存泄露

 

二、java 的开发环境配置

1)安装 java JDK

 

2)配置path 和 classpath 环境变量(注意windows 不区分大小写)

 

3)编写简单的HelloWorld.java 程序运行

javac  HelloWorld.java  // 编译

java   HelloWorld       // 运行,注意java 后面加的是类名而不是文件名


三 、java 基础学习


1. 程序设计简史

1)程序设计的几种样式

 

(1)过程化程序设计(LISP ) : 表链式语言, 如,shell

(2)结构化程序设计   如,C,FORTRAN,PASICAL   

(3)面向对象程序设计

  如:C++ , C# , java


2)程序语言发展的历史

机器 ---> 汇编 ----> 高级 ------> 面向对象

1.类和对象

1)对象:万事万物皆对象   

2)类:同一类对象的属性和行为的抽象总结

(1)类描述同一类对象应包括的数据

(2)描述同一类对象的行为特征

(3)类是一个概念模型

 注意:类是对象的模板,对象是类的实例


案例:你现在脑海中有一个一辆小轿车,但是你现在没钱买,等你工作两年后,你去4S店买了一辆奇瑞,那么这个事中“脑海中汽车”就是类,而“你买的汽车”就是对象,也就是说现在是一个类创造一个对象,如果一年之后,你又买了一辆奔驰,那么就是一个类创造两个对象、


属性:用来描述对象的数据元素成为对象的属性(也称为数据状态) 

方法:对象的属性进行操作成为对象的方法  (也称为行为操作)


3) 类的声明:

如:以一个手机为实体,说明类的定义,

手机的基本特征:

品牌 

型号

制式

重量

语法格式:

  
1
2
3
4
5
[<modifiers>]   class  <class_name>{
     [<attribute_declaration>]    // 属性声明
     [<constructor_declaration>]  // 构造器声明
     [<method_declaration>]       // 方法声明
}

4)属性的声明//相当于C中成员

1
1 [<modifiers>]type  <attr_name>[=defaultValue];

5)方法的格式:

1
2
3
4
5
6
7
8
<modifiers><return_type><name>([<argu_list>]){

 [statements]


publicclass Mobie{      //声明一个手机类
     private  String band;   //属性声明
     public  void  setBrand(String _brand){  //方法声明
     this .brand = _brand;
    }
}

案例1:调用一个手机类,设置手机的重量为200g ,并从终端打印出手机所有信息

6)构造器(constructor)的声明

语法:

1
2
3
<modifier><class_name>([<arugments_list>]){
[<statements>];
}


注意:

(1)构造器的名称必须和类名一致

(2)一个类可以有多个构造器但是构造器的参数列表必须不同

1
2
3
4
5
public  class  Mobie{
     private  int  weight; 
     public  Mobie( int  w)
        weight = w ;
}


7) 对象的创建和使用

语法:


构造器:

(1)无参构造器

(2)有参构造器

(3)如果类没有定义构造器,系统会提供默认的无参构造器


8)对象方法和属性的访问

1
<object>.<member>

案例2: 创建两个参数构造器,获取手机属性


9) 信息隐藏

 信息隐藏:对象的一种保护机制,使得它的属性或方法不被外部程序直接访问   

 

10) 信息封装

信息封装: 封装指的将对象的状态(属性)和行为(方法)捆绑为一个逻辑单元的机制

目的:

(1) 隐藏一个类的实现细节

(2) 防止对封装数据的未授权访问

(3) 有利于保持数据的完整性 

(4) 便于修改增加了代码可维护性


案例3 :设置手机属性,能够屏蔽非法设置


11) java 源文件结构

1
2
3
[<package_declaration>]  
[<import_declaration>]
<class_declaration>+
 

案例4: 构造带有main 方法PackageTest 类,打包在cn.com.farsight;中 ,在当前目录和cn.com.farsight下执行

    

(1)在当前目录运行

 Java  cn.com.farsight.PackageTest   

(2)包目录下运行

 Java cp  包的相对根目录/   cn.com.farsight.PakckageTest


 注意: 打包操作不仅仅是将包放在打包目录下,此时类的名字也改变了,运行时应该指定完整的包名


12) package (打包) 和  import(导包)

(1)package 用法

语法: packet  <top_pkg_name>[.<sub_pkg_name>]*;

作用:可以解决java开发中的类命名冲突问题

案例:

1
2
3
4
package  cn.com.farsight;
public  class  Mobie{
     .....
  }


javac -d destpath Mobie.java //编译后会自动在destpath 下新建cn\com\farsight ,并将生成的class 文件都放在 cn\com\farsight 下 

如果在当前目录下执行: java  cn.com.farsight.Mobile

 

注意: 命名的规范,你的命名要具备可读性,给人传递一些信息;

   例证: 比如你给孩子取名字,如:“李天一”,给人感觉天人合一,非常好,我这采用的是域名的倒置,因为域名具有唯一性,这样做就可以避免和别人命名重复了


(2)import 用法   

1
2
import   <pkg_name>.[.<sub_pkg_name>].<class_name>;
import   <pkg_name>.[.<sub_pkg_name>].*;


作用: 导入不同包中的类

注意:编译器如何找到指定包中的类

 

(I)在CLASS_PATH 指定的路径下面找

 

(II)默认情况下,系统会自动引入java.lang 中的类


案例5:构造带有main 方法MobileTest 类,导入 list , io,cn.com.farsight  工具包(), 在当前编译运行

案例5: 自己构造类Mobile,打包在cn.com.farsight ;在类MobileTest中导入该包,当前目录编译运行。


13)java 中一些常用的包

java.lang ==> 包含一些java 语言的核心类,如String、Math、Integer、System和Thread, 提供常用的功能,不需要再程序中显示导入

javax.sql ==>提供使用java编程语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据的API

java.net ==>包含与网路相关操作的类

java.io ===>包含能提供多种输入输出功能和文件操作的类  

java.util===>包含一些使用工具类,如定义系统特性、使用日期日历相关的函数、集合类等


这里:可以追一下源码包的相关的类

 

课外练习:

作业设计:

1. 用三种方式构造方式描述学生信息(无参数的,三个参数的,两个参数的构造方式)

 

2.写一个员工类:Employee ,每个员工有以下属性

姓名,员工号,性别,工作年限,

级别:3级:每一级薪水增加5% * (4  band

薪水

增加对应的getter 和 setter的构造方法,

员工类有以下方法:

打印员工的基本信息,

打印薪水:薪水和工作年数及级别有关

编写对应的测试类EmployeeTest 


源码Demo: 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
案例 1 
/**
  * 设置成员变量的值,并且访问
  */
  
class  Mobile{
      
     int  weight =  100 ;     // 设置成员属性
     String brand  =  "Samsung" ;
     String type   =  "SmartPhone" ;
     String model  =  "Cdma/Gsm" ;
  
}
  
  
  
public  class  MobileTest1{
      
     public  static  void  main(String [] args){
         Mobile m =  new  Mobile();
         m.weight =  100  ;   //设置成员变量属性
  
         System.out.println( "the weight of the Mobile : "  + m.weight);
         System.out.println( "the brand of the Mobile : "  + m.brand);
         System.out.println( "the type of the Mobile : "  + m.type);
         System.out.println( "the model of the Mobile : "  + m.model);
     }
}
  
  
案例 2 
  
  
/**
  *  创建构造器,构造对象
  */
  
class  Mobile{
     String brand ;
     String type =  "SmartPhone" ;
     String model ;
     int  weight ;
  
  
  
     Mobile(String _brand,String  _model){  //带两个参数的构造器
         brand = _brand;
         model = _model ;
     }
  
     public  void  show(){
         System.out.println( "brand = " +brand +  " type = " + type + " weight= "  " model " + model );
     }
}
  
  
public  class  MobileTest{
      
     public  static  void  main(String [] args){
                 
                 Mobile m =  new  Mobile( "ZTE" , "GSM" );
         m.show();
  
     }
  
}
  
  
案例 3 
  
/**
  *  信息隐藏与封装
  */
  
class  Mobile{
     private  String brand ;
     private  String type =  "SmartPhone" ;
     private  String model ;
     private  int  weight ;
  
  
  
     Mobile(String _brand,String  _model){  //带两个参数的构造器
         brand = _brand;
         model = _model ;
     }
  
     void  setWeight( int  _weight){
         if (_weight <=  0 )
             return  ;
         weight = _weight;
     }
  
     public  void  show(){
         System.out.println( "brand = " +brand +  " type = " + type + " weight= " +  weight +  " model " + model );
     }
}
  
  
public  class  MobileTest{
      
     public  static  void  main(String [] args){
                  
         Mobile m =  new  Mobile( "ZTE" , "GSM" );
         m.show();
         //weight =200 ;  // 不允许操作 
         m.setWeight( 300 );
         m.show();
     }
  
}
  
  
案例 4 
/**
  *  测试package 打包操作
  */
  
package  cn.com.farsight ;
  
public  class  PackageTest {
      
     public  static  void  main(String [] args)
     {
         System.out.println( "package success!!!!\n" );
  
     }
}
1 )在当前目录运行
Java  cn.com.farsight.PackageTest
 

2 )包目录下运行
Java –cp  包的相对根目录/  cn.com.farsight.PakckageTest
 

  
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
案例 5 
  
/***
  *  测试倒包 Mobile.java
  */
  
package  cn.com.farsight ;  // Mobile 打包成cn.com.farsight.Mobile 类在cn\com\farsight\目录下
  
public  class  Mobile{
  
     private  String brand ;
     private  String type =  "SmartPhone" ;
     private  String model ;
     private  int  weight ;
  
  
  
     public  Mobile(String _brand,String  _model){  //带两个参数的构造器
         brand = _brand;
         model = _model ;
     }
  
     public  void  setWeight( int  _weight){
         if (_weight <=  0 )
             return  ;
         weight = _weight;
     }
  
     public  void  show(){
         System.out.println( "brand = " +brand +  " type = " + type + " weight= " +  weight +  " model " + model );
     }
}
  
1 )javac –d .  Mobile.java  // 生成cn.com.farsight.Mobile.class 存放在 cn\com\farsight\
  
   
/**
  *  测试导包,MobileTest.java
  */
  
  
import  java.io.*;   // IO 相关的包
import  java.util.*;   // 工具包
  
//package cn.com.farsight ;
import  cn.com.farsight.Mobile;
  
public  class  MobileTest{
      
     public  static  void  main(String [] args){
          
         FileInputStream fp ;  //文件输入流      
         List owner ;
         // 调用 cn.com.farsight.Mobile类,如果不想用import 则可以直接使用 上述类的全称
                 Mobile m =  new  Mobile( "ZTE" , "GSM" );
         m.show();
         //weight =200 ;  // 不允许操作 
         m.setWeight( 300 );
         m.show();
     }
  
}
2 )当前目录编译运行 MobileTest.java
  

 
3 ) 若不适用 import  cn.com.farsight.Mobile ; 将 Mobile 替换为cn.com.farsight.Mobile ,编译运行正常通过
 
4 )若不在当前目录编译运行
编译: javac   -cp   打包的相对根目录   .java 文件路径
运行: Java   –cp   类所在目录          类名
注意: -cp / -classpath 指定的是. class  路径而不是 .java 路径
    

 

5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54



作业 1
  
/**
  *  三种方式构造学生类
  */
  

class  Student{
   
     private  String name ;
     private  int  id ;
     private  int  score ;
   
     public  Student()  // 无参构造器
     {
         this ( "james" , 1000 , 100 );
     }
   
     public  Student(String _name, int  _id){   // 二参构造器
             this (_name,_id, 0 );
   
     }
       
     public  Student(String _name , int  _id, int  _score)  //三参构造器
     {
         name = _name;
         id = _id;
         score = _score;
     }
     void  show(){
         System.out.println( "name= " +name +  " id= " + id +  " score= "   + score);
           
     }
   
}
  
public  class  StudentTest{
  
     public  static  void  main(String [] args)
     {
         Student s =  new  Student( "lily" , 2000 , 99 );      
         s.show();
  
         Student p =  new  Student();    
         p.show();
    
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
作业 2 
  
/**
  *javadoc 演示程序<b> JavaDoc</b>
  *@author xiaopangzi313
  *@version 1.0 2014/03/12
  *@测试员工信息
  */
  
class  Employee{
     private  String name;  //员工信息属性
     private  int  id ;
     private  char  sex;
     private  int  workexperience;
     private  int  band;
     private  int  salary;
  
         /**
      *  员工类构造器
      */
  
     public  Employee(){
         name =  "zhang" ;
         id=   128 ;
         sex =  'f' ;
         workexperience =  3 ;
         band =  3 ;
         salary =  3000  ;
     }
  
     /**
      *  获取员工信息
      */
  
     public  void  getter()
     {
         System.out.println( " name= " +name +  " id = " +id +  " sex = " +
                 sex +  " workexperience = "  + workexperience +
                 " band = " +band +  "  salary = " +salary );
     }
      
     /**
      *  设置员工信息
      */
  
     public   void  setter(String _name,  int  _id,  char  _sex, int  _workexperience, int  _band)
     {
         name = _name;
         id = _id;
         sex = _sex;
         workexperience = _workexperience;
         band = _band;
         salary += salary *( int  )( 5.0  100  *( 4  - band));
         }
      
}
  
  
public  class  EmployeeSum{
  
     public  static  void  main(String [] args)
     {
         Employee e =  new  Employee();          
         e.getter();
         e.setter( "li" , 3000 , 'm' , 4 , 2 );
         e.getter();
     }
  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值