【Java】Java语法基础

2023/7/3

Java的特性

编译、解释并运行

一次编译,处处运行

新的语言特性能够接纳、兼容和运行其他程序语言产生的字节码。

JCP、JDK

Java Specification

Java Community Process 掌管Java规范

Java Development Kit 实现Java规范

面向对象语言特点

识认性

类别性

多态性

继承性

2023/7/4

class类

类成员变量

一个文件只能有一个public class

基本类型

boolean

byte 1byte = 8bits -128~127

short/int/long

char 2bytes

方法

方法重载:函数名相同,形参不同

面向对象

OO 面向对象 OP面向过程

类命名要大写

基本类型为形参 函数传值

其余传引用

对象不会凭空产生或消失

变量

成员变量有默认值,局部变量没有。

局部变量优先级高于成员变量。

局部变量的作用域只在大括号内。

2023/7/5

构造函数

一个变量的生命周期:只能存储在离它最近的一个大括号内

当变量被创建时,变量将占据内存;当变量消亡时,系统将回收内存。

Java编译器会自动为没有显式定义空的无形参构造函数。

每个构造函数第一句话,如果不手动写super(),都会默认自动调用且仅调用一次super()(无参)。

this

this(,)调用相应的构造函数。

this指代当前对象。

子类构造函数第一句话一定是super(),如果父类没有空构造函数却实现了带形参的构造函数,并且子类构造函数没有显式调用该构造函数,则报错。

继承

一个Java类只能单一继承父类,但可以实现多个接口。

抽象类

子类继承于抽象类,需要实现父类所有的abstract方法。

一个类只能继承一个抽象类,实现多个接口,接口可以继承多个接口。

抽象类可以有方法被实现,接口所有方法不能有实现。

转型

子类可以转换成父类,而父类一般不可以转为子类。

重写/重写

override/overwrite 重写 子类重写父类方法

overload 重载方法

多态

解耦

子类转型为父类后,调用普通方法,如果子类进行了覆写,依旧是子类的方法。

2023/7/6

static

static变量只依赖于类存在,不依赖于对象存在

static block > anonymous block > constructor function

一个静态块代码在整个生命周期只会被执行一次

单例模式Singleton

类A内:

private A a = new A();

public A getInstance(){return a;}

final

final变量如果在类里面则必须初始化,如果只是函数局部变量且未被访问则不需要。

final类没有子类,final方法不能被子类改写,final变量不可变,final对象不能变更指针

常量池

Float Double没有常量池

常量赋值(栈内存)和new(堆内存)创建的不是同一个对象

编译器只会优化常量

不可变对象

八个基本类型封装对象+String、Big Decimal、BigInteger

2023/7/7

数字类

BigInteger/BigDecimal

Random nextInt(x) [0,x) nextDouble() [0,1] = Math.random()

String类

String 不可变对象

StringBuffer 同步 效率快

StringBuilder 异步 效率更快

String

charAt()找第几个

concat()连接两个字符串

contains()是否包含

endsWith()以…结尾 startsWith()以…开始

equals()相等

equalsIgnoreCase()忽略大小写

hashCode()哈希码

indexOf(char)查找字符或字符串第一次出现的位置

length()长度

matches(regex)是否匹配正则表达式

replace(char,char),replace(charSequence,charSequence),replace(regex,string)替换

replaceAll(regex,string)替换每个匹配子串

split(regex)分开成字符串数组

subString(int,int)截取begin-end子串

trim()去除前导和后置空格

valueOf(…)将…转换为String

StringBuffer/StringBuilder

append()

insert()

delete()

replace()

substring()

时间类

Date

Calendar

Calendar c = Calendar.getInstance() / = new GregorianCalendar();

get(int field)获取对应的年月日时分秒

getTime()返回当前的Date对象

getTimeInMillis()返回1970年以来的毫秒数

set()设置Calendar为指定年月日

add(int field,int amount)/roll()增加减少时间,roll不进行时间进位

其他

LocalDate日期类

LocalTime时间类

LocalDateTime = 前两个加起来

Instant时间戳

格式化类
数字格式化

NumberFormat -> DecimalFormat

df = new DecimalFormat(格式)

df.format(int toBeFormatted)

#可有可无

0必须有

以E0结尾:用科学计数法

字符串格式化

MessageFormat

MessageFormat.format(格式,填充数组)

时间格式化

DateFormat -> SimpleDateFormatter

df = new SimpleDateFormatter(格式)

Date d = df.parse(待转换时间字串)

String s = df.format(d)转换为新的格式

2023/7/10

访问权限

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

异常

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

处理异常

try…catch…finally

一个异常只会进入一个catch块里

覆写的方法不能抛出更多的异常或者异常的子类

throw 抛出异常

checked exception必须做出处理

unchecked exception不必须处理

2023/7/11

数组

数组的插入删除较慢

JCF
List
ArrayList 重点

非同步

快速访问,用于查询

add(num)

add(index,num)

get()

remove()

LinkedList

非同步

addFirst()

双向链表实现,适合经常变化的数据。

Vector

同步

性能差于ArrayList

Set

set中只能存储对象

HashSet 重点

无序

add()

clear()

contains()

remove()

retainAll()取交集

判断重复先判断HashCode是否一样,然后再判断equals方法

LinkedHashSet

可排序的,用双向链表来维护set

判断重复与HashSet一样

TreeSet

可排序的

不可以加null

进行比较的元素需要实现Comparable接口实现比较两个元素的compareTo方法

Map

map中键值都只能为对象

HashTable

无序

同步,数据量小

put()

contains()

containsValue()

containsKey()

get()

remove()

size()

HashMap 重点

无序

LinkedHashMap

基于双向链表维护插入顺序

TreeMap

基于红黑树的map

可以根据key自然排序

或者实现compareTo方法来进行排序

Properties

继承于HashTable

可以存储为文件

load()

store()

getProperty()

setProperty()

遍历
for循环

foreach: for (Type t : collection)

iterator遍历

Iterator it = collection.iterator();

while(it.hasNext()){

it.next();

}

Enumeration遍历

for(Enumeration e = collection.element();e.hasMoreElements()😉{

e.nextElement();

}

工具类 重点
Arrays类 处理数组

Arrays.sort(array)

Arrays.binarySearch(array,num)

copyOf()

fill()

equals()

Collections类 处理List

sort()

binarySearch()

fill()

max()

min()

reverse()

对象比较

大于返回1,等于返回0,小于返回-1。

实现Comparable接口——实现compareTo方法,直接调用sort()。

实现Comparator——实现compare方法,需要作为对象传入sort()第二个参数。

文件
File

分隔符:windows:\ Linux/Unix: /

createNewFile()

delete()

exists()

getAbsolutePath()

getName()

getParent()

getPath()

isDirectory()

isFile()

length()

listFiles()

mkdir()

mkdirs()

Files.move()

Path

Path p = file.toPath() / Paths.get(address,name)

DirectoryStream pathFilter = Files.newDirectoryStream(path,“*.{txt,java}”)

Attribute

BasicFileAttribute bfa = Files.readAttributes(path,class)

字节/字符

字节:byte,8btis

字符:由字节形成

IO

字节:InputStream,OutputStream

FileInputStream,FileOutputStream

字符:Reader,Writer

FileReader,FileWriter

文本文件读写

try-source语句:

写:

try(BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(address)))){

bw.write();

}catch(IOException e){

e,printStackTrace();

}

读:

try(BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(address)))){

String line;

while((line = in.readLine()) != null){

System.out.println(line);

}

}catch(IOException e){

e.printStackTrace();

}

二进制文件读写

读:

try(DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(addtress)))){

String a,b;

a = readUTF();

b = readUtF();

int c ;

c = readInt();

}catch(IOException e){

e.printStackTrace();

}

写:

try(DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(address)))){

dos.writeUTF(“”);

dos.writeInt(1);

}catch(IOException e){

e.printStackTrace();

}

压缩解压缩

ZipInputStream,ZipOutputStream压缩文件输入输出流

ZipEntry压缩项

压缩过程:打开zip文件,添加ZipEntry,打开输入文件,读数据,向ZipEntry写数据,保存。

解压缩过程:打开输入的zip,获取下一个ZipEntry,新建目标文件,读取Zip数据,写入目标文件,保存。

2023暑假

Maven

框架

JUnit

使用前需要先导入maven依赖

文本处理
字符编码

GB18030>GBK>GB2312

UTF-8 变长 兼容ascii

读写文件时,转化类对象第二个参数传入编码字符串

国际化编程

java.util.ResourceBundle 加载一个语言_国家语言包

java.util.Locale 定义一个语言_国家

locale

语言 zh en

国家/地区 CN US

getDefault()

getAvailableLocales()

语言文件:properties文件 k-v对

如message.properties message_zh_CN.properties

ResourceBundle

根据locale要求加载properties文件

getString(String key)返回对应的value

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正则表达式

Pattern正则表达式的编译表示

compile编译一个正则表达式为pattern对象

matcher用pattern对象匹配一个字符串

Matcher

用于匹配

Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(string);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

String.join() 拼接字符串元素

StringEscapeUtils.escapeJava(string)将字符串根据不同语言来转义

Guava库

Splitter.on(regex)拆分字符串并忽略空串

CaseFormat可以格式化字符串为驼峰型等等

Scanner

Scanner s = new Scanner(System.in);

s.setDelimiter(regex)设置分隔符

while(s.hasNext()){

}

InputStream in = IOUtils.toInputStream(string,charset)

System.setIn(in);

重定位输入流为字符串

文件处理
XML

可拓展标记语言

任何一个起始标签都有一个结束标签

所有的特性都必须有值,值必须带引号

<转义为<

注释为

DTD

XSD

XSL 等同于CSS作用于HTML

DOM 适合读小规模XML,写XML

SAX/Stax 适合读大规模XML

JDOM DOM4j

DOM

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SAX

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Stax

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

JSON

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图形图像

BufferedImage bi = ImageIO.read(file)

ImageIO.write(BufferedImage,pattern,FileOutputStream)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

条形码Barcode

一般容纳30个字母/数字

二维码QRcode

可存储几十KB字符

Zxing

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Barcode4j

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

//生成二维码

public static void generateQRCode(File file, String content) f

//定义二维码参数

Map<EncodeHintType, Object> hints = new HashMap<>();

hints.put(EncodeHintType.CHARACTER_SET, “utf-8”);//设置编e

hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//设置容错等级

hints.put(EncodeHintType.MARGIN, 2);//设置边距默认是5

try {

BitMatrix bitMatrix = new MultiFormatwriter().encode(content, BarcodeFormat.QR_CODE, wIDTH, HEIGHT, hints);

Path path = file.toPath();

MatrixToImagewriter.writeToPath(bitMatrix, FORMAT, path);//写到指定路径下

} catch (Exception e) {

e.printStackTrace();

}

//读取二维码

public static void readQrCode(File file) {

MultiFormatReader reader = new MultiFormatReader();

try {

BufferedImage image = ImageIO.read(file);

BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));

Map<DecodeHintType, Object> hints = new HashMap<>();

hints.put(DecodeHintType.CHARACTER_SET, “utf-8”);//设置编码

Result result = reader.decode(binaryBitmap, hints);

System.out.println(“解析结果:” + result.tostring());

System.out.println(“二维码格式:” + result.getBarcodeFormat());

System.out.println(“二维码文木内容:”+result.getText());

} catch (Exception e) {

e.printStackTrace();

}

Docx

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

XWPFDocument

读写段落

读写表格

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Xls/Xlsx/CSV

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解析表格

写入表格

PDF

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多线程
创建

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一般实现Runnable接口

变量共享

普通变量不共享

static变量所有线程共享

线程的变量依赖于工作缓存,而主线程则依赖于主存。

主线程只修改主存,加上volatile的变量可以被主线程修改。

volatile——线程共享的

synchronized——只允许一个线程同时访问的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

setDaemon(true)设置当前线程为守护线程,与主线程同时结束,

Executor

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fork-join

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

并发数据结构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Thread t = new Thread(new Runnable(){

@Override

public void run(){}

});

Lock

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Semaphore

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Latch

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Barrier

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Phaser

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Exchanger

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

定时任务

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网络编程
基础

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

UDP

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ds初始实例化传入端口,不写则随机。

ds.receive(dp)

ds.send(dp)

TCP

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ServerSocket ss = new ServerSocket(port);

Socket s = ss.accept();

HTTP

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NIO

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AIO

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Netty

第三方网络编程库,优化原有JDK包

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ServerSocketChannel用于接受请求

SocketChannel用于接受数据交换

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mina

Apache开发

邮件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

JDBC

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

连接池

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

混合编程
Java

RMI

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

C

JNI

声明native方法,并给出C语言实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

JavaScript

Nashorn

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Python

Jython

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

WebService

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

命令行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

语法糖
foreach
enum

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

构造函数一般为private

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不定参数
静态导入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自动拆箱

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

异常

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

定义default方法的接口,可以通过lambda表达式进行实例化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

try…with resource

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Var

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Switch

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

泛型
自定义

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

限定

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

[外链图片转存中…(img-Kni1PqQH-1715054705518)]

自动拆箱

[外链图片转存中…(img-zLWLGlUs-1715054705518)]

异常

[外链图片转存中…(img-3G0CU5Em-1715054705518)]

[外链图片转存中…(img-qDUq54t4-1715054705519)]

[外链图片转存中…(img-zR8CxtxD-1715054705519)]

接口

[外链图片转存中…(img-e6344eVA-1715054705519)]

定义default方法的接口,可以通过lambda表达式进行实例化。

[外链图片转存中…(img-srM5ihBY-1715054705519)]

[外链图片转存中…(img-JFEEQ2B7-1715054705527)]

[外链图片转存中…(img-OPhN4lCo-1715054705527)]

[外链图片转存中…(img-OUCNUxyG-1715054705527)]

try…with resource

[外链图片转存中…(img-C0UTDo51-1715054705527)]

[外链图片转存中…(img-VJUiIHFF-1715054705528)]

Var

[外链图片转存中…(img-ZMSq0Wn0-1715054705528)]

[外链图片转存中…(img-HCULUvnY-1715054705528)]

Switch

[外链图片转存中…(img-TUGUMZMG-1715054705528)]

[外链图片转存中…(img-imdsJdEs-1715054705528)]

[外链图片转存中…(img-G4jCAAwp-1715054705529)]

泛型
自定义

[外链图片转存中…(img-Ks5Ib6OR-1715054705529)]

[外链图片转存中…(img-hucj6A8U-1715054705529)]

限定

[外链图片转存中…(img-WNSFoGKE-1715054705529)]

[外链图片转存中…(img-pM4TqMgL-1715054705529)]

[外链图片转存中…(img-WJ40Cupj-1715054705529)]

[外链图片转存中…(img-lgTBOavo-1715054705530)]

[外链图片转存中…(img-mAMF8e3i-1715054705530)]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值