Java基础一 Java对象的引用

浅谈一下JAVA对象,对象引用以及对象赋值 浅谈一下JAVA对象,对象引用以及对象赋值 今天有班级同学问起JAVA对象的引用是什么。正好趁着这次机会,自己总结一下JAVA对象,对象引用以及对象赋值。自己总结了所看到的网上相关方面的不少帖子,整理汇总形成下面的文章。 Java对象及其引用 初学Java,总是会自觉或不自觉地把Java和C++相比较。在学习Java类与对象章节的时候,发现教科书和许多参考 阅读详情

一.Java 强引用 软引用 弱引用 虚引用的使用场景以及系统调用时机

Java的引用强引用直接使用了对象的地址,软引用 弱引用 虚引用 都在引用对象之间隔了一层通过这些特殊的对象间接引用了我们需要的对象。

1.强引用:

Object object = new Object();

object 这个Object类型的变量直接引用了new Object() 这个类型的在内存中开辟的这块地址空间的地址。这是我们常见的编码方式。使用场景有:方法的局部变量,jni变量,类变量,概括起来就是GC ROOT 可达的都是强引用。

1.object如果前面加上static修饰那么这个Object 类型的变量就会在常量区定义那么会一直引用指着这块开辟的地址内存不会释放。

2.object这个变量在栈内引用已经执行完了并且没有其他地方引用这个地址时这块地址的引用数为0那么这块地址可以被释放。

3.只要有引用在,垃圾回收器永不处理,jvm宁愿自己崩了一般报(OutOfMemoryError)错误,也不去回收这个这类对象使用的内存。所以会造成内存泄漏和内存溢出。

4.源代码

class FinalReference<T> extends Reference<T> {

    public FinalReference(T referent, ReferenceQueue<? super T> q) {
        super(referent, q);
    }
}

2.软引用:

Objext obect = new Object();

SoftReference<Object> sfObject = new SoftReference<Object>(obj);

sfObject.get();//有时候会返回null

1.软引用即在生成的对象和产生的地址之上再封装一层。我们需要使用这个对象时通过软引用间接的获取到这个对象的使用。

2.object的释放在jvm内存不足时object指定的内存块释放。

3.软用可以用在程序中的缓存功能的实现,比如图片缓存,对象缓存等等。

4.在Android中 SoftReference 或者 WeakReference做图片缓存是不推荐的,因为Android内存小会更频繁的对于这些引用的对象进行回收,回收后又会频繁的对这些对象开辟内存空间。所以Android官方推荐最新的解决办法,这个类包含在android-support-v4包中,是采用LruCache以及DiskLruCache。Android中可以使用SoftReference 或者WeakReference 用在把上下文传入静态工具中以免造成activity内存泄漏。后续讲这类工具时在细分讲解。

5.源代码

public class SoftReference<T> extends Reference<T> {

    /**
     * Timestamp clock, updated by the garbage collector
     */
    static private long clock;

    /**
     * Timestamp updated by each invocation of the get method.  The VM may use
     * this field when selecting soft references to be cleared, but it is not
     * required to do so.
     */
    private long timestamp;

    /**
     * Creates a new soft reference that refers to the given object.  The new
     * reference is not registered with any queue.
     *
     * @param referent object the new soft reference will refer to
     */
    public SoftReference(T referent) {
        super(referent);
        this.timestamp = clock;
    }

    /**
     * Creates a new soft reference that refers to the given object and is
     * registered with the given queue.
     *
     * @param referent object the new soft reference will refer to
     * @param q the queue with which the reference is to be registered,
     *          or <tt>null</tt> if registration is not required
     *
     */
    public SoftReference(T referent, ReferenceQueue<? super T> q) {
        super(referent, q);
        this.timestamp = clock;
    }

    /**
     * Returns this reference object's referent.  If this reference object has
     * been cleared, either by the program or by the garbage collector, then
     * this method returns <code>null</code>.
     *
     * @return   The object to which this reference refers, or
     *           <code>null</code> if this reference object has been cleared
     */
    public T get() {
        T o = super.get();
        if (o != null && this.timestamp != clock)
            this.timestamp = clock;
        return o;
    }

}

6.在新建SoftReference对象和调用SoftReference.get时都会使timestamp更新为clock的值。而clock代表的是上次gc的时间。 

SoftRefLRUPolicyMSPerMB默认为1000,即1s。代表每1MB空闲空间大小SoftReference保留1s。 

-XX:SoftRefLRUPolicyMSPerMB      

设置每兆堆空闲空间中SoftReference的存活时间,默认值是1s 。(softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap)

3.弱引用:

Object object = new Object();

WeakReference<Object> wfObect = new WeakReference<Object>(object);

wfObject.get();//有时返回为null

wfObject.isEnQueued();//返回引用状态  返回是否被垃圾回收器标记为即将回收的垃圾

1.弱引用是在第二次垃圾回收时回收,短时间内通过弱引用取对应的数据,可以取到,当执行过第二次垃圾回收时,将返回null。
2.弱引用主要用于监控对象是否已经被垃圾回收器标记为即将回收的垃圾,可以通过弱引用的isEnQueued方法返回对象是否被垃圾回收器标记。

3.只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

4.源代码

public class WeakReference<T> extends Reference<T> {

    /**
     * Creates a new weak reference that refers to the given object.  The new
     * reference is not registered with any queue.
     *
     * @param referent object the new weak reference will refer to
     */
    public WeakReference(T referent) {
        super(referent);
    }

    /**
     * Creates a new weak reference that refers to the given object and is
     * registered with the given queue.
     *
     * @param referent object the new weak reference will refer to
     * @param q the queue with which the reference is to be registered,
     *          or <tt>null</tt> if registration is not required
     */
    public WeakReference(T referent, ReferenceQueue<? super T> q) {
        super(referent, q);
    }

}

4.虚引用:

Object object = new Object();
PhantomReference<Object> pfObject = new PhantomReference<Object>(object);

pfObject.get() //永远返回为null

pf.isEnQueued();//返回是否从内存中已经删除
1.虚引用是每次垃圾回收的时候都会被回收,通过虚引用的get方法永远获取到的数据为null,因此也被成为幽灵引用。
2.垃圾回收器扫描时即回收内存的使用。

3.虚引用主要用于检测对象是否已经从内存中删除。

4.源代码

public class PhantomReference<T> extends Reference<T> {

    /**
     * Returns this reference object's referent.  Because the referent of a
     * phantom reference is always inaccessible, this method always returns
     * <code>null</code>.
     *
     * @return  <code>null</code>
     */
    public T get() {
        return null;
    }

    /**
     * Creates a new phantom reference that refers to the given object and
     * is registered with the given queue.
     *
     * <p> It is possible to create a phantom reference with a <tt>null</tt>
     * queue, but such a reference is completely useless: Its <tt>get</tt>
     * method will always return null and, since it does not have a queue, it
     * will never be enqueued.
     *
     * @param referent the object the new phantom reference will refer to
     * @param q the queue with which the reference is to be registered,
     *          or <tt>null</tt> if registration is not required
     */
    public PhantomReference(T referent, ReferenceQueue<? super T> q) {
        super(referent, q);
    }

}

 

二.源码解析

1.首先我们看看Java中引用类在哪个文件夹里。这里使用的jdk版本是jdk1.8

 

2.对象引用概述

在jdk1.2以前的版本,对象引用类型单一只有强引用类型,在1.2版本以后对引用类型做了扩充,把引用对象做了四个级别的设置更好的对对象的生命周期进行管控。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。

3.对象的生命周期和回收队列

1.所有的对象引用都继承了在package java.lang.ref包下面的 Reference<T> 类。Reference类首先把内存分为4种状态Active,Pending,Enqueued,Inactive。

.Active 一般来说new出来的对象一开始设置的状态是active

.Pending 待定中,指快放入回收队列的对象

.Enqueued 就是对象的内存已经被gc回收了

.Inactive最终状态,不可改变对象

2.ReferenceQueue 引用队列,在检测到适当的可到达性更改后,垃圾回收器将已注册的引用对象添加到队列中,ReferenceQueue实现了入队(enqueue)和出队(poll),还有remove操作,内部元素head就是泛型的Reference。

 

4.对象使用完的垃圾回收

1.回收的区域

jvm虚拟机划分使用的内存区域有堆区,栈区,静态常量区,方法区等。新建的对象都放在堆区,因此需要回收的区域就是分配建立对象的堆区。

2.回收的对象

1.gc root 不在引用的对象。即现在程序不需要使用的对象需要释放掉使用的内存

3.回收的方法

1.可达性分析 从gc root这类对象开始,向下搜索。

gc root 的种类:

Class:由系统的类加载器加载的类对象 
Static Fields 
Thread:活着的线程 
Stack Local: java方法的局部变量或参数 
JNI Local: JNI方法中的局部引用 
JNI Global: 全局的JNI引用 
Monitor used: 用于同步的监控对象
 

2.引用计数分析

 

5.Java的分代回收机制

1.将对象依据使用时长进行分类,分成新生类,中年类,老年类等。

 

6.leakscannary的原理

 

Java中的对象引用 在这个示例中,我们首先创建了一个名为"john"的Person对象,并将其"name"属性设置为"John Doe"。在方法内部,我们通过引用修改了对象的"name"属性,将其改为"Jane Smith"。在上面的代码中,我们将"person"引用所指向的Person对象的"name"属性设置为"John Doe",然后通过引用打印出相应的问候语,并调用对象的"sayHello"方法。在上面的代码中,我们声明了一个名为"person"的引用,它的类型是Person。对象引用的声明和初始化。 阅读详情

相关推荐

西门子1200,与V90和步科MD60第三方伺服PN通讯

需要注意的是回零方式的选择,因为V90是绝对值编码器,这里回零模式选择模式7,系统自动根据编码器反馈以及组态的机械参数,计算出轴的位置,并且掉电保持。在线访问中,找到对应的网卡,以及下面扫描到的设备,可以在线修改ip地址和profinet名称,注意一定要和组态中的完全一致。以上硬件组态上完成,主要是gsd文件导入后,添加硬件,建立连接,修改ip和profinet名称,添加报文。1- 博图V18内,设备组态,网络视图中,拖入V90以及MD60伺服,并与PLC创建连接。向厂家索要GSD文件,PN的描述文件。

weixin_37596954的博客 2461

JAVA对象的四种引用方式

一、前言: JVM是通过GC机制自动回收内存空间的,不同于c++手动释放空间,在JAVA中设置不同的引用方式就是为了让jvm虚拟机去判断哪些对象应该释放,而哪些对象不能释放.从而使程序更加灵活的控制对象的生命周期。 四种引用级别的高低顺序---(高到底)----->强引用,软引用,弱引用,虚引用; 二 、强引用 (一)含义 创建一个对象,并把这个对象赋值给一个引用变量。 Object obj =new Object(); String str ="hello world!"; 如上所示

Alex_thomas的博客 5166

WorkBuddy实战技巧:搭建高效AI工作台与自动化流程

在数字化办公场景中,AI工作台正逐渐成为提升个人与团队效率的关键工具。它不同于简单的聊天机器人,而是通过集成技能包(Skill)、自动化触发与文档处理能力,把重复性任务如信息提取、周报生成、数据表格整理等变为标准化流程。其核心原理在于将用户需求拆解为可执行的指令链,并借助本地脚本、API调用及定时任务实现“对话即操作”的智能协作。这种技术价值不仅适用于程序员,更惠及运营、客服、行政、科研等日常与文字数据打交道的群体。从自动签到、会议纪要,到批量处理Excel与合同要点提取,AI工作台的应用场景已覆盖多个高频

weixin_42547431的博客 332

关于java分层领域模型与属性映射的思考

背景: 在近期的解析程序开发工作中,常常需要定义DTO对象,比如与服务端解析程序协作时定义了QueryDto、SubmitDto,再联系接口开发工作中常常使用的VO对象,比如DBizDictVO、DBizActivityVO,因此对相关的领域模型进行了学习总结。 内容: 参考业界的一些规约,梳理了以下几种领域模型: DO (Data Object): 数据对象,它与数据库表字段一一对应,通过DAO层向上传输数据源对象。 DTO (Data Transfer Object): 数据传输对象,它是Service

csdnklsdm的博客 431

当传统CFD遇上AI:PINN如何帮我们省下90%的仿真计算时间?

本文探讨了物理信息神经网络(PINN)在计算流体力学(CFD)中的应用,如何通过无网格方法节省90%的仿真计算时间。PINN将物理定律编码到神经网络中,显著减少传统CFD中的网格生成和计算时间,同时保持高精度。文章还对比了PINN与传统方法的性能,并讨论了其独特优势和当前局限。

weixin_32678995的博客 319

为什么类型论是函数式编程的理想基础?

函数式编程(如Haskell、Scala、OCaml)以“函数为核心”“无副作用”“不可变数据”等特性著称,但它的“安全高效”并非凭空而来——背后的关键支撑是类型论。本文将聚焦“类型论如何支撑函数式编程”,从基础概念到具体案例,解释两者的本质联系。本文将按“故事引入→核心概念解释→关系拆解→原理+代码案例→实际应用→总结”的逻辑展开,用“乐高积木”“菜谱”等比喻贯穿全文,确保抽象理论可视化。类型论:程序的“接口规则手册”,定义类型和函数的约束;函数式编程。

AI天才研究院 694

java的引用和对象

看到一篇极好的对象、引用之间的讲解文,不多说,copy下来留存,因为不是优快云的,所以我另附跳转链接: 博客园——引用、对象间关系 以下是正文: 关键字: java对象 引用 Java对象及其引用 关于对象与引用之间的一些基本概念。 初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用, 那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。 为便于说明,我们

LGUOQING的博客 307

深入SVT SPI VIP配置:如何灵活控制CS间隔、数据帧大小与时钟频率(含代码片段)

本文深入探讨了SVT SPI VIP的高级配置技巧,包括精确控制CS信号间隔、突破数据帧大小限制以及动态时钟频率切换。通过实战代码片段和详细配置步骤,帮助验证工程师灵活应对复杂SPI协议验证场景,提升验证效率和覆盖率。特别适合需要处理非标准SPI时序和特殊数据帧的芯片验证项目。

weixin_27014595的博客 280

19、Java面向对象——面向对象的三大特征、private权限修饰符、get()/set()方法、封装

把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上是使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。适当的封装可以让程序代码更容易理解和维护,也加强了程序代码的安全性。

优快云_Loveletter的博客 1375

71、聚二甲基硅氧烷(PDMS)材料模型验证研究

本研究通过实验与数值模拟相结合的方法,系统探究了聚二甲基硅氧烷(PDMS)的力学性能与粘附行为。重点验证了多种超弹性材料模型在不同剥离速率下的适用性,结果表明Ogden N2模型在预测界面韧性和平均剥离力方面误差最小,表现最优。研究涵盖了PDMS的合成、单轴拉伸试验、剥离测试及有限元分析,为PDMS在机械与摩擦学领域的应用提供了可靠的建模依据,并建议在后续模拟中优先采用Ogden模型。

wine的专栏 1052

DAVIS前言:事件相机资料调研

Event-Camera 资料集锦 1. 官网资料 假设了你买了事件相机,就可以在以下几个链接了解相关的参数和gui界面安装,如果不喜欢gui界面安装,可以第2节,安装相关的源码驱动。 DVS/DAVIS产品说明 等相关产品的软硬件介绍。 iniVation DV教程文档 给出在不同平台下的dvs-gui界面,可按照其说明进行相应的操作。 另外,Neuromorphic vision com...

Ian的博客 4507

java基础,没事常看看(一)类、对象、引用

什么是对象,什么是类? 类:是一个抽象的概念,表示的是一类事物所拥有的共性(属性、方法)。 对象:是类的具体(实例),对象不仅拥有类的属性和方法(private除外),还有自己专属的属性与方法。 比如:人是一个类, 那么对象就可以有男人,女人,学生,老板等等。 这里类是女朋友 package javaBasis1; //听说你缺女票,new一个吧 public class girlfrien...

qq_42147998的博客 270

学 Simulink—— 基于高频方波电压注入的表贴式永磁电机无感控制仿真

本文手把手教授基于Simulink的高频方波电压注入法实现表贴式永磁同步电机(SPMSM)无传感器控制。针对表贴式电机微弱凸极特性(Lq/Ld≈1.05-1.15),详解方波注入相比正弦注入的优势:通过5kHz方波(PWM频率半值)集中能量提升信噪比,并采用相邻周期电流直接相减的零延迟分离技术。系统架构包含高频注入器、无滤波器信号分离模块、锁相环观测器和磁饱和极性辨识等关键环节,提供参数设置经验(如注入幅值10-15%Vdc)和典型性能指标(位置误差<0.2rad)。特别强调工程实现要点:PWM同步时

xiaoheshang_123的博客 167

Java(一)(引用类型的参数在传递,方法重载,面向对象编程基础)

就是一种特殊形式的类,满足下面的两个要求(1)这个类中的成员变量都是私有的,并且要对外提供相应的get...和set...方法(2)类中必须要有一个公共的无参的构造器// 1.必须私有成员变量,并为每个成员变量都提供get set方法// 有参数构造器// 2. 必须为类提供一个公共的无参数构造器我们创建上面的实体类对象s1.setName("阿衰");

2201_75442971的博客 291

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JAVA关于值传递和引用传递的理解

值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量. 引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 一般认为,java内的基础类型数据传递都是值传递. java中实例对象的传递是引用传递 上述是网上大多数人的见解 个人认为: java中不管是值对象还是引用对象都是值传递·,·在其他方法里面改变引用类型的值肯定是通过引用改变的·,当传递引用对象的时候传递的是复制过的对象句柄(引用)注意这个引用是复制过的,也就是说又在内存中复制了一份句柄,这时

weixin_37777574的博客 775

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

引用等价性与对象等价性

在写实验的时候发现,并不是所有的等价判断都能直接用“==”来比较。面对一些非基础数据类型,如Integer时,出现了明明相等却判断为false的情况。

andao233的博客 407

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java中对象的引用(Java对象的引用 )

什么是Java的对象引用? Java中都有哪些类型的对象引用? Java中提供的Java对象引用主要有什么目的? 通过本文,你就能很清楚得了解Java的对象引用

Feify博客 1万+

java 对象相互引用_彻底理解Java对象与引用

本文是最近在复习Java的时候读到的来自iteye博客的一篇文章,个人觉得写的很好,但貌似楼主许久没有维护该博客,害怕将来想回顾的时候找不到此文章,故在此重写文章,并修改了一些排版,有助于以后的学习查阅。一、关于对象与引用之间的一些基本概念为便于说明,先定义一个类:class Vehicle {int passengers;int fuelcap;int mpg;}有了这个类,就可以用它来创建对象...

weixin_31493023的博客 2634

Java对象及其引用

        初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用,那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。       为便于说明,我们先定义一个简单的类:       class Vehicle {int passe

beepbug的专栏 6108

java基础——对象引用

一、概念理解: 我们经常这样理解,变量就像是杯子,是一种容器,承装某些事物,在java中基本数据类型可以这样理解,那对象是怎么处理的呢?如下示例,“myDog”是对象变量么? Dog myDog = new Dog();   事实上,我们无法将对象装到变量中。   引用变量: 1.事实上没有对象变量这样的东西存在 2.只有引用(reference)到对象的变量 3.对象引用变量保

大道至简 1239

Java中的引用和对象

Java中的引用和对象 Java中的对象有很多,比如String对象,数组对象,还有类实例化出来的对象,对象在Java中占据着重要的地位。但是我们平时并不直接操作对象,而是通过引用来对对象进行访问。 目录 Java中的引用和对象 一、初步认识引用和对象 二、理解引用和对象之间的关系 三、关于引用指向对象的规则 1、只有引用指向对象 2、对象可以被多个引用指向 四、关于引用的操作 1、" . " 操作(自动解引用) 2、[]操作(自动解引用) 3、= 操作 4、== 操作和!= 操作

qq_49044908的博客 1940

一看就懂的Java对象四种引用方式总结

这应该是一道很常见的面试题,但是有些小伙伴也不一定能很好的说清楚Java对象四种引用方式,这边文章总结Java四种引用方式,希望可以帮到有缘人,哈哈。 强引用StrongReference 这种方式是平时工作中应用最多的一种引用方式。其特点是只要GC Root可达,就不会被回收,及时内存空间不足了,也只会抛出OOM的异常,并不会被回收。通常的用法就是Objec obj = new Object()。 如果想中断或者回收强引用对象,可以显式地将引用赋值为null,这样的话JVM就会在合适的时间,进行垃圾回收。

程铭程铭你快成名的博客 9952

Java中对象的赋值与引用

Java中对象的赋值与引用详解

Yummy 6万+

Java中的对象和对象的引用

为便于说明,我们先定义一个简单的类: class Vehicle { int passengers; int fuelcap; int mpg; } 有了上面这个模板,就可以用它来创建对象: Vehicle veh1 = new Vehicle(); 通常把上面这条语句的动作称...

小志的博客 1221

Java中的对象、对象引用及对象引用分类

在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,看完本文,不断能让你明白,这两词意思,还能进一步搞明白一些原理 一、对象   在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一。要理解什么是对象,需要跟类一起结合起来理解。按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,‘类’就是‘类型’的同义词,类是抽象的,偏虚,而对象就是比较具体,偏实,比如那天你真看到了外

杨先森的专栏 1151

java基础 对象与引用

​Java中有句很流行的语言,“万事万物皆对象”。那么什么是对象呢? 那么一个引用可以创建多少个对象呢 先看看栈和堆的区别 栈内存储的除了基本类型的变量还会存储对象的引用变量。java中,引用变量实际上是一个指针,它指向的是堆内存中对象实例。(引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。) 举例: Student stu ; stu = ...

qq_43057601的博客 252
上一篇: Android 本地数据存储四 ormlite的使用和基于反射的数据库工具封装
下一篇: Android 异常奔溃的拦截和记录工具封装
MatrixGame
博客等级 码龄9年 40粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

MatrixGame

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

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

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

打赏作者

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

抵扣说明:

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

余额充值