Java基础快速入门: 方法详解

Java小白从入门到精通,Java零基础入门看这一篇就够了 作为刚刚接触java的小白,今天这篇文章的目的是帮助大家快速入门java,少走弯路 如何快速入门Java? 一、作为刚接触Java的新手,先了解Java的基础。 Java 基本语法、Java 平台应用、Java的核心概念:JVM、JDK、JRE以及Java面向对象思想,同时要会学到如何在系统中搭建Java开发环境,以及如何利用第三方工具进行Java程序的开发。 还有记住学习Java语言最重要的是两点: 学习步骤/方法 学习资源 找到适合自己的学习方式,找到适合自己现阶段的学习资料,学习的过程中最好记笔记,. 阅读详情

本文纲要

  1. 方法概述
  2. 方法的定义和调用
  3. 方法调用过程(内存图)
  4. 带参数的方法
  5. 形参和实参
  6. 带返回值的方法
  7. 方法通用格式
  8. 方法注意事项
  9. 方法重载
  10. 方法参数传递
    基本数据类型
    引用数据类型
  11. 综合练习
    数组遍历
    获取数组最大值
    同时获取数组最大值和最小值

方法概述

在 Java 中,方法(Method) 是一段具有独立功能的代码块,只有被调用时才会执行。方法可以显著提高代码的复用性,减少重复代码

举个例子:在植物大战僵尸游戏中,多个植物都具备发射炮弹的功能,如果每个植物都写一遍相同的代码,会造成大量重复。此时可以把发射炮弹的代码抽取到一个公共区域,每个植物需要时去调用即可。这个公共区域中的代码就是方法

方法的优点:

  • 提高代码复用性
  • 降低代码冗余度
  • 便于维护和扩展

方法的使用原则:

  • 必须先定义,后调用。
  • 不调用不执行,定义后不会自动运行

方法的定义和调用

1 ) 定义格式

public static void 方法名() {
    // 方法体:真正要执行的逻辑代码 
}

方法名需要符合标识符命名规范,方法体中可以编写任意合法的 Java 代码

2 ) 调用格式

方法名();

方法之间是平级关系,不能嵌套定义。即不能在一个方法内部再定义另一个方法,但可以在一个方法内部调用另一个方法

3 ) 示例代码

public class Demo1Method {
    public static void main(String[] args) {
        eat(); // 调用eat方法
    }
 
    public static void eat() {
        study(); // 在eat方法中调用study方法 
        System.out.println("吃饭");
    }
 
    public static void study() {
        System.out.println("学习");
    }
}

运行结果:

学习
吃饭

注意:方法调用不限于 main 方法,可以在任何方法中调用其他方法。main 方法是程序的入口,一般从这里开始调用

方法调用过程(内存图)

方法未被调用时,存储在方法区的字节码文件中。当方法被调用时,会加载到栈内存中执行。栈内存的特点:先进后出(类似弹匣)
简单调用过程

eat方法main方法eat方法main方法调用eat执行完毕返回
  1. 虚拟机调用 main 方法,main 压入栈内存
  2. main 调用 eat,eat 压入栈内存,执行 eat 中的代码
  3. eat 执行完毕,弹出栈内存
  4. main 继续执行,最后弹出栈内存,程序结束
    复杂调用过程(eat内部调用study和sleep)
sleep方法study方法eat方法main方法sleep方法study方法eat方法main方法调用eat调用study打印“学习”后返回打印“吃饭”调用sleep打印“睡觉”后返回执行完毕返回

随着方法调用,栈帧依次压入和弹出,体现了栈内存的先进后出特性

带参数的方法

1 ) 为什么需要参数

如果方法需要处理外部传入的数据,就需要使用参数。例如,判断一个数是奇数还是偶数,这个数不能写死在方法内部,而是由调用者提供,这样方法更灵活

2 ) 定义与调用格式

定义格式:

public static void 方法名(数据类型 变量名) {
    // 方法体,可以使用变量名
}

多个参数之间用逗号分隔

调用格式:

方法名(实际参数);

实际参数可以是常量,也可以是变量,类型和数量必须与方法定义中的参数匹配

3 ) 示例:判断奇偶数

public class Demo1Method {
    public static void main(String[] args) {
        isEvenNumber(10); // 传入具体数值
        isEvenNumber(11);
    }
 
    public static void isEvenNumber(int num) {
        if (num % 2 == 0) {
            System.out.println("偶数");
        } else {
            System.out.println("奇数");
        }
    }
}

4 ) 练习:打印 n 到 m 之间的奇数

需求:设计一个方法 print,接收两个整数 n 和 m,打印 n 到 m 之间所有的奇数

初始版本(存在缺陷):

public static void print(int n, int m) {
    System.out.println(n + "到" + m + "之间的奇数为:");
    for (int i = n; i <= m; i++) {
        if (i % 2 == 1) {
            System.out.println(i);
        }
    }
}

如果调用时 n > m,循环条件不成立,不会输出任何奇数,并且提示信息不友好

改进版本: 增加健壮性判断,如果参数不合理,直接提示并结束方法

public static void print(int n, int m) {
    if (m < n) {
        System.out.println("您传入的数据有误,请检查");
        return; // 结束方法,不再执行后续代码
    }
    System.out.println(n + "到" + m + "之间的奇数为:");
    for (int i = n; i <= m; i++) {
        if (i % 2 == 1) {
            System.out.println(i);
        }
    }
}

return; 在 void 方法中可以直接结束方法,后续代码不会执行

形参和实参

形参(形式参数):方法定义时声明的参数变量,如 int num
实参(实际参数):方法调用时传入的具体数值或变量,如 10 或 a

形参只有在方法被调用时才被赋值,否则只是形式上的占位符。

带返回值的方法

1 ) 为什么需要返回值

有些方法需要将计算结果返回给调用者,以便后续使用,而不是仅仅打印到控制台。这时就需要定义带返回值的方法。

2 ) 定义与调用格式

定义格式:

public static 返回值类型 方法名(参数列表) {
    // 方法体
    return 返回值; // 返回值类型必须与方法声明中的返回值类型匹配 
}

调用格式:

返回值类型 变量 = 方法名(实参);

如果不接收返回值,方法执行的结果将无法被使用。

3 ) 示例:求两个整数之和

public class Demo1Method {
    public static void main(String[] args) {
        int sum = add(10, 20);
        System.out.println(sum); // 输出30
    }
 
    public static int add(int a, int b) {
        int c = a + b;
        return c;
    }
}

4 ) 练习:求两个数的最大值

public class Demo2Method {
    public static void main(String[] args) {
        // 调用方式1:输出调用,仅打印结果
        System.out.println(getMax(10, 20));
 
        // 调用方式2:变量接收,可以继续使用结果 
        int max = getMax(10, 20);
        System.out.println(max);
        for (int i = 1; i <= max; i++) {
            System.out.println("HelloWorld");
        }
    }
 
    public static int getMax(int a, int b) {
        if (a > b) {
            return a;
        } else {
            return b;
        }
    }
}

推荐使用变量接收返回值,这样结果可以参与后续运算。

方法通用格式

public static 返回值类型 方法名(参数列表) {
    // 方法体 
    return 返回值;
}

各部分说明:

  • public static:修饰符,目前固定格式。
  • 返回值类型:方法返回结果的数据类型,如果没有返回值,写 void。
  • 方法名:符合标识符命名规范,调用时使用。
  • 参数列表:方法运行前需要的材料,由数据类型和变量名组成,多个参数用逗号分隔。
  • 方法体:完成功能的代码。
  • return:将结果返回给调用者,void 方法中可以省略,或使用 return; 直接结束方法。

定义方法前需要明确:

  1. 参数:是否需要材料?需要几个?什么类型?
  2. 返回值类型:方法执行后是否有结果返回?是什么类型?

方法注意事项

  1. 方法不能嵌套定义。
  2. void 方法中,return 可省略;若写 return,后面不能接数据。
  3. return 语句之后不能再写代码,因为无法执行到。

示例:

// 正确:void方法无返回值,省略return
public static void methodA() {
    System.out.println("Hello");
}
 
// 正确:void方法使用return;结束
public static void methodB() {
    if (condition) {
        return;
    }
    System.out.println("Hello");
}
 
// 错误:void方法return后不能有数据 
public static void methodC() {
    return 100; // 编译错误
}
 
// 错误:return后不能有代码 
public static int methodD() {
    return 1;
    System.out.println("无法执行"); // 编译错误
}

方法重载

方法重载(Overload):在同一个类中,方法名相同,但参数列表不同(个数、类型、顺序不同),这些方法构成重载关系。与返回值类型无关。

1 ) 重载的好处

例如 System.out.println 可以接收各种类型的数据,就是因为它有很多重载方法,我们不需要记忆多个方法名。

2 ) 示例:比较两个整数是否相同(兼容全整数类型)

public class Demo1Overload {
    public static void main(String[] args) {
        short a = 10;
        short b = 20;
        System.out.println(compare(a, b));
    }
 
    public static boolean compare(int a, int b) {
        return a == b;
    }
    public static boolean compare(byte a, byte b) {
        return a == b;
    }
    public static boolean compare(short a, short b) {
        return a == b;
    }
    public static boolean compare(long a, long b) {
        return a == b;
    }
}

四个方法名相同,参数类型不同,构成重载。调用时根据实参类型自动匹配对应的方法。

方法参数传递

1 ) 基本数据类型

基本数据类型作为参数时,传递的是具体数值,形参的改变不影响实参。

public class Test1 {
    public static void main(String[] args) {
        int number = 100;
        System.out.println("调用change方法前:" + number); // 100
        change(number);
        System.out.println("调用change方法后:" + number); // 100 
    }
 
    public static void change(int number) {
        number = 200; // 修改的是形参,不影响实参
    }
}

内存分析:main 中的 number 和 change 中的形参 number 是两个不同的变量,传递的只是数值 100 的副本。

2 ) 引用数据类型

引用数据类型作为参数时,传递的是内存地址,因此形参可以通过地址修改堆内存中的数据,从而影响实参。

public class Test2 {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30};
        System.out.println("调用change方法前:" + arr[1]); // 20
        change(arr);
        System.out.println("调用change方法后:" + arr[1]); // 200
    }
 
    public static void change(int[] arr) {
        arr[1] = 200; // 修改堆内存中的数据,会影响原数组
    }
}

内存分析:main 中的 arr 和 change 中的形参 arr 存储的是同一个数组的地址,指向同一块堆内存空间,因此修改会相互影响。

综合练习

1 ) 数组遍历

设计一个方法,将数组元素以格式 [11, 22, 33, 44, 55] 输出到一行。

public class Test1 {
    public static void main(String[] args) {
        int[] arr = {11, 22, 33, 44, 55};
        printArray(arr);
        System.out.println("另外一段代码逻辑");
    }
 
    public static void printArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                // 最后一个元素,特殊处理,加上右括号并换行
                System.out.println(arr[i] + "]");
            } else {
                // 非最后一个元素,拼接逗号空格,不换行 
                System.out.print(arr[i] + ", ");
            }
        }
    }
}

2 ) 获取数组最大值

设计一个方法,返回数组中的最大值。

public class Test2 {
    public static void main(String[] args) {
        int[] arr = {11, 55, 22, 44, 33};
        int max = getMax(arr);
        System.out.println(max); // 55 
    }
 
    public static int getMax(int[] arr) {
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        return max;
    }
}

3 ) 同时获取数组最大值和最小值

return 语句只能返回一个结果,如果需要同时返回多个值,可以将它们放入数组等容器中返回。

public class Test3 {
    public static void main(String[] args) {
        int[] arr = {11, 55, 33, 22, 44};
        int[] maxAndMin = getMaxAndMin(arr);
        System.out.println("最小值:" + maxAndMin[0]); // 11 
        System.out.println("最大值:" + maxAndMin[1]); // 55
    }
 
    public static int[] getMaxAndMin(int[] arr) {
        int max = arr[0];
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
            if (arr[i] < min) {
                min = arr[i];
            }
        }
        // 将最大值和最小值存入数组返回
        int[] result = {min, max};
        return result;
    }
}

通过以上内容,我们掌握了 Java 方法的核心知识,包括定义、调用、参数、返回值、重载以及参数传递机制。这些是编写结构化、可复用代码的基础,后续的面向对象编程将在此基础上进一步深入。

快速上手 Spring Boot:基础使用详解 Spring Boot 是一个基于 Spring 的框架,旨在简化 Spring 应用的配置和开发过程,通过自动配置和约定大于配置的原则,使开发者能够快速搭建独立、生产级别的应用程序。Spring程序缺点配置繁琐依赖设置繁琐SpringBoot程序优点自动配置起步依赖(简化依赖配置)版本锁定内置tomcat服务器辅助功能(内置服务器,……) 阅读详情

相关推荐

[面试]SoC验证工程师面试常见问题(三)

SoC 验证工程师面试中,SystemVerilog、UVM 和 SystemC 的代码题目通常涵盖面向对象编程、约束随机化、UVM 组件设计、内存建模等主题。通过练习上述示例题目和理解关键点,你可以更好地应对现场编码环节。如果有具体的面试方向(如特定协议验证)或公司偏好,可以提供更多信息,我会进一步定制题目和答案。祝你面试顺利!

元直的博客 1636

Java基础快速入门: Stream流核心方法详解

本文介绍了Java中的Stream流操作,对比了传统集合操作与Stream流方式的差异。主要内容包括: Stream流的核心思想:通过流水线式处理(获取流→中间操作→终结操作)简化集合处理 四种获取Stream流的方式:单列集合.stream()、双列集合的keySet/entrySet、Arrays.stream()、Stream.of() 常用中间操作方法:filter过滤、limit截取、skip跳过、concat合并、distinct去重 终结方法:forEach遍历、count计数 Stream的

Wang的专栏 218

保姆级教程:Win10/Win11系统下ArcGIS 10.2中文版完整安装与破解(含License Manager启动失败解决方案)

本文提供Windows 10/11系统下ArcGIS 10.2中文版的完整安装与破解教程,重点解决License Manager启动失败等常见问题。从安装准备、破解文件处理到最终配置验证,详细指导用户完成每一步操作,确保软件正常运行。特别针对主机名修改、端口占用等疑难问题提供专业解决方案。

weixin_29596051的博客 556

JAVA快速入门到精通牛客零基础刷题指南:42,43 手把手带刷:集合类,Map 含方法详解

【代码】JAVA快速入门到精通牛客零基础刷题指南:42,43 手把手带刷:集合类,Map 含方法详解。

见字如面,祝您早安,午安,晚安 366

目标检测 RT-DETR(2023)详细解读

在使用了这个技巧后,显然训练过程中,类别的标签不再是此前的0和1离散值,而是0~1的连续值。关于 Query Selection(查询向量选择),大家应该并不陌生,这个方法可谓在DETR领域大杀四方,如DAB-DETR对查询向量进行重构理解,将其解释为Anchor,DN-DETR通过查询降噪来应对匈牙利匹配的二义性所导致的训练时间长的问题,DINO提出从Encoder中选择Top-k特征进行学习等一系列方法,这都无疑向我们证明,查询向量很重要,选择好的Query能够让我们事半功倍。在RT-DETR中,

qq_51352130的博客 5872

利用Python暴力破解邻居家WiFi密码

如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀!

weixin_45841831的博客 6万+

JAVA语言基础

1JAVA语言基础   1常量       定义:在程序运行时其值不发生变化的量   对应实际情况就是人的性别                   分类:分为字面值常量和自定义常量。       字面值常量的分类           字符串常量     用双引号扩起来的 “  ”           整数常量       所有整数           小数常量       所有小数 ...

wanglulu12138的博客 330

直流并联电压源的下垂控制与模拟光伏板特性的方法与仿真

并联直流电源下垂控制方法,下垂特性可以让并联直流电源输出功率/电流自动均衡,直流电源输出特性模拟光伏板的输出特性,具有自动限制输出最大功率的功能

1197

Java基础入门

所谓跨平台指的是用Java语言开发的程序可以在多种操作系统上运行,常见的操作系统有Windows、Linux、MacOS系统。如果没有跨平台性,同一个应用程序,想要在多种操作系统上运行,需要针对各个操作系统单独开发应用。比如微信有Windows版本、MacOS版本、Android版本、IOS版本。

qq_58423640的博客 1万+

LAN8720芯片硬件设计避坑指南:从晶振选择到PHY地址配置的5个关键细节

本文深入解析LAN8720以太网PHY芯片硬件设计的五个关键细节,涵盖晶振模式选择、PHY地址配置、复位电路设计、电源滤波与接口布线。重点阐述了REF_CLK Out与REF_CLK In两种时钟模式的配置逻辑与应用场景,提供了避免通信失败与信号完整性问题的实战方案,是嵌入式网络硬件开发的实用避坑指南。

i1j2k的博客 515

【100%通过率】华为机试真题 Python 实现【对称美学】【2022.11 Q4 新题】

对称就是最大的美学,现有一道关于对称字符串的美学。 已知: 第1个字符串:R 第2个字符串:BR 第3个字符串:RBBR 第4个字符串:BRRBRBBR 第5个字符串:RBBRBRRBBRRBRBBR相信你已经发现规律了,没错! 就是第i个字符串=第i-1号字符串的取反+第i-1号字符串。取反即(R->B,B->R); 现在告诉你n和k,让你求得第n个字符串的第k个字符是多少。(k的编号从0开始)

MISAYAONE的博客 1万+

有Java基础快速入门Python

学习Python第一天学习准备语法基础一,了解python二,Python解释器三,标识四,数据类型五,运算符六,控制语句七,格式化输出八,Number(数字)九,字符串SmartyPants 学习准备 因为之前系统学习过Java语言,所以这次学习Python想脱离完整视频教学,通过以前总结的经验来快速入门Python。打算边学习语法基础,边编写demo,最后实现完整的项目来实现python入门。语言只是实现目的的工具,工具就是用来使用的,只有不断的运行测试才能发现自己的不足,Make it run, ma

qq_40661404的博客 4270

Allegro174版本如何关闭模块复用后铜皮自动从动态变成静态操作指导

在用Allegro进行PCB设计的时候,模块复用是使用的十分频繁的操作,当Allegro升级到了174 S034版本的时候,当使用模块复用的功能的时候,模块内的铜皮会自动动静转换,大部分情况是不需要的。版本如何关闭模块复用后铜皮自动从动态变成静态操作指导。如何关闭这个功能,具体操作如下。

weixin_54787054的博客 1262

【重生之Java零基础快速入门】

Java是一种面向对象的编程语言,由Sun Microsystems于1995年发布。希望这份详细的教程能帮助你快速入门Java编程!如果有任何问题,欢迎随时提问!

z17826856787的博客 1769

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java如何快速入门?Java基础_Java入门

小编认为对接触Java的小白来说,最担心的应该就是Java怎么学,都需要掌握哪些内容?今天这篇文章希望能帮助大家快速入门Java,少走弯路! 一、作为刚接触Java的新手,肯定要先了解Java的基础。 Java 基本语法、Java 平台应用、Java的核心概念:JVM、JDK、JRE以及Java面向对象思想,同时要会学到如何在系统中搭建Java开发环境,以及如何利用第三方工具进行Java程序的开发。 学习Java语言最重要的是:学习步骤和方法 只要找到适合自己的学习方式,找到适合自己现阶段的学习资料

m0_46184557的博客 4481

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java的方法详解,快速入门

介绍了Java中方法的概念,包括方法的种类如构造方法、静态方法及非静态方法的区别与使用。通过示例代码展示了静态方法与非静态方法如何访问类变量及实例变量,并强调了静态上下文中不能直接访问非静态成员的特点。

云生的博客 2549

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java零基础快速入门的方法

各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java。因此,也是吸引了不少年轻人投入到Java的学习之中。 ​所以,今天就跟大家分享一份系统的Java学习教程路线图,零基础也可以无压力的走进Java,学习Java! 第一阶段:Java语言入门到精通 学习任何一门编程语言,首先要学习的是基础语法,开启Java学习的第一步,当然就是深入掌握计算机基础、编程基础语法,面向对象,集合、IO流、线程、并发、异常及网络编程,这些我

java9787的博客 4433

【Python】快速入门Python一天学完基础语法

快速入门python 1. 数据类型与变量:元组、字典、拆包等 2. 基础运算与控制流程 3. 方法/函数、异常处理 4. 面向对象

CoderSharry的博客 2351

SpringBoot详解——快速入门

久闻Spring Boot大名,这两天终于得空,学习了一把,发觉Spring Boot确实好用,那Spring Boot到底是什么,又是怎么好用呢?什么是Spring Boot。

weixin_68950210的博客 1484

Java笔记——如何快速入门 Java?

这是一个基于 Spring Boot、MyBatis-Plus、MySQL、Redis、ElasticSearch、MongoDB、Docker、RabbitMQ 等技术栈实现的社区系统,采用主流的互联网技术架构、全新的UI设计、支持一键源码部署,拥有完整的文章&教程发布/搜索/评论/统计流程等,代码完全开源,没有任何二次封装,是一个非常适合二次开发/实战的现代化社区项目?对于新人来说,最重要的是掌握 Java 后端开发四大件,Java 基础、Spring Boot、MySQL、Redis。

a25847a的博客 1771

java快速入门

Java 集合框架主要由两大接口派生而出:Collection 和 Map。Collection 接口用于存储单个元素,而 Map 接口用于存储键值对。集合框架提供了统一的接口和方法,方便开发者对不同类型的集合进行操作,同时也提高了代码的可复用性和可维护性。

m0_74013450的博客 1424

【Java基础知识1】Java入门详解

数组是相同类型数据的有序集合;数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成;其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标(编号、标记)来访问它,下标是从0开始的,例:如果存10个数据,即下标为0 ~ 9。

阿志的博客 1379

Java:Java快速入门

包的名字和项目路径下的目录路径相对应,比如:项目路径为:C:\Study,有一个Java源文件位于:C:\Study\com\happyframework\study\App.java,那么App.java的包名字必须为:com.happyframework.study,且 App.java 的第一行语句必须为:package com.happyframework.study。Java中所有的赋值和方法调用都是“按值“处理的,引用类型的值是对象的地址,原始类型的值是其自身。

woaimx_1314的博客 5293

[Java基础]快速入门

使用命令行打开程序, 命令行工具会在当前目录查找程序的可行性文件, 如果找不到, 就会到系统的Path变量中查找程序所在目录。java的产品叫JDK(Java Development Kit:Java开发者工具包),必须安装JDK才能使用Java。使用命令行打开程序, 要么在程序所在目录执行命令,要么配置环境变量, 环境变量的作用就是记住程序所在目录。跨平台的原理: java提供了不同平台的JVM虚拟机, 同一套代码, 可以运行在不同操作系统中。新建文本文档, 修改文件后缀为.java,

. 1328

【Java】MyBatis快速入门及详解

本文详细的介绍了MyBatis的使用,并提供了案例实现增删改查的操作。

将冲破艾迪i的博客 1834
上一篇: Java基础快速入门:二维数组
下一篇: Java基础快速入门:进制、位运算与数组操作
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值