首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何初始化一个静态变量并为其设置各种值?

要初始化一个静态变量并为其设置各种值,可以使用静态初始化块或静态方法。

  1. 使用静态初始化块:

静态初始化块是在类加载时执行的代码块,用于初始化静态变量。静态初始化块可以在类中的任何位置定义,但会按照定义的顺序执行。

示例代码:

代码语言:txt
复制
public class MyClass {
    private static int staticVar;

    static {
        // 初始化静态变量
        staticVar = 10;
    }

    // 其他类成员和方法
}

优势:

  • 简单方便,代码可读性好。
  • 可以在初始化过程中执行复杂的逻辑操作。

应用场景:

  • 静态变量的初始化需要根据特定条件进行计算。
  • 静态变量的初始化需要调用其他静态方法或静态变量。

推荐的腾讯云相关产品:

  • 腾讯云函数(云函数):无服务器的事件驱动型计算服务,可用于执行初始化操作。详细信息请参考:腾讯云函数
  1. 使用静态方法:

可以通过定义一个静态方法,在该方法中初始化静态变量并设置值。然后在需要使用静态变量的地方调用该静态方法进行初始化。

示例代码:

代码语言:txt
复制
public class MyClass {
    private static int staticVar;

    public static void initializeStaticVar() {
        // 初始化静态变量
        staticVar = 10;
    }

    // 其他类成员和方法
}

优势:

  • 可以对静态变量进行更复杂的初始化操作。
  • 可以根据需要在任意时刻调用初始化方法。

应用场景:

  • 静态变量的初始化需要根据特定条件进行计算。
  • 需要在初始化时执行一系列操作,而不仅仅是简单的赋值。

推荐的腾讯云相关产品:

  • 腾讯云函数(云函数):无服务器的事件驱动型计算服务,可用于执行初始化操作。详细信息请参考:腾讯云函数

以上是如何初始化一个静态变量并为其设置各种值的方法。注意,这里没有提及具体的云计算品牌商,如需了解更多关于云计算的内容,可以参考腾讯云的文档和产品介绍。

相关搜索:如何添加带有子属性的节点并为其设置值?如何从类中初始化数组并为第一个元素设置值?如何获取python数组中第二次出现的值并为其设置颜色?PHP:如何通过一个变量设置另一个变量的值?如果我声明并初始化一个静态变量会发生什么?它的值会在每次调用时设置吗?如何将一个角度变量的值动态设置为另一个变量如何将postman环境变量的值设置为另一个变量的值?如何设置cvxpy n-dim变量的第一个值?如何将HTML iFrame中的Javascript变量设置为父变量中另一个变量的值?如何在pandas中创建新列,并根据第二列是否包含各种字符串列表中的字符串来设置其值如何将复选框的选中ids存储到jquery中的变量中,并为该变量的值分配一个隐藏字段?如何将下一个数组项设置为变量的新值?如何在同一个请求中设置Postman动态变量和use值?如何将一个新变量设置为另一个变量的实际值,而不是它的内存位置?如何将对象项的r值设置为一个变量,而不仅仅是一个值?如何在同一个POD的不同实例中设置环境变量的不同值?如何在sql中设置一个变量并在select查询中使用它来显示和执行对该变量的操作(最大最小值)?如何从一个视图控制器设置结构变量数据,并从另一个视图控制器获取相同的值我的Rails应用程序中没有param key。我如何解决这个问题,或者设置一个变量,以便将值保存到变量中如何将主活动文本视图的值设置为BindviewHolder中的变量。我正在尝试实现一个使用firebase的购物车布局
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Class 对象在执行引擎中的初始化过程

一个 class 文件被加载到内存中需要经过 3 大步:装载、链接、初始化。...4.符号引用检验:符号引用检验可以看作是对类自身以外(常量池中的各种符号引用)的信息进行匹配性校验。...准备: 准备是链接的第 2 步,这一阶段的主要目的是为类中的静态变量分配内存,并为设置“0”。...比如: public static int value = 100; 在准备阶段,JVM 会为 value 分配内存,并将其设置为 0。而真正的 100 是在初始化阶段设置。...总结一下对象的初始化顺序如下: 静态变量/静态代码块 -> 普通代码块 -> 构造函数 父类静态变量静态代码块; 子类静态变量静态代码块; 父类普通成员变量和普通代码块; 父类的构造函数

1.1K10

java new一个对象的过程中发生了什么

) 3、准备 为类中的所有静态变量分配内存空间,并为设置一个初始(由于还没有产生对象,实例变量不在此操作范围内)被final修饰的static变量(常量),会直接赋值; 4、解析 将常量池中的符号引用转为直接引用...5、初始化(先父后子) 1,为静态变量赋值 2,执行static代码块 注意:static代码块只有jvm能够调用   如果是多线程需要同时初始化一个类,仅仅只能允许其中一个线程对执行初始化操作,其余线程必须等待...因为子类存在对父类的依赖,所以类的加载顺序是先加载父类后加载子类,初始化也一样。不过,父类初始化时,子类静态变量也有有的,是默认。...最终,方法区会存储当前类类信息,包括类的静态变量、类初始化代码(定义静态变量时的赋值语句 和 静态初始化代码块)、实例变量定义、实例初始化代码(定义实例变量时的赋值语句实例代码块和构造方法)和实例方法,...二、创建对象 1、在堆区分配对象需要的内存   分配的内存包括本类和父类的所有实例变量,但不包括任何静态变量 2、对所有实例变量赋默认   将方法区内对实例变量的定义拷贝一份到堆区,然后赋默认 3、

58220
  • Java:new一个对象的过程中发生了什么?

    ) 3、准备 为类中的所有静态变量分配内存空间,并为设置一个初始(由于还没有产生对象,实例变量不在此操作范围内) 被final修饰的static变量(常量),会直接赋值; 4、解析 将常量池中的符号引用转为直接引用...5、初始化(先父后子) 4.1 为静态变量赋值 4.2 执行static代码块 注意:static代码块只有jvm能够调用 如果是多线程需要同时初始化一个类,仅仅只能允许其中一个线程对执行初始化操作...因为子类存在对父类的依赖,所以类的加载顺序是先加载父类后加载子类,初始化也一样。不过,父类初始化时,子类静态变量也有有的,是默认。...最终,方法区会存储当前类类信息,包括类的静态变量、类初始化代码(定义静态变量时的赋值语句 和 静态初始化代码块)、实例变量定义、实例初始化代码(定义实例变量时的赋值语句实例代码块和构造方法)和实例方法,...二、创建对象 1、在堆区分配对象需要的内存 分配的内存包括本类和父类的所有实例变量,但不包括任何静态变量 2、对所有实例变量赋默认 将方法区内对实例变量的定义拷贝一份到堆区,然后赋默认 3、执行实例初始化代码

    1K20

    java new一个对象的过程中发生了什么

    ) 3、准备 为类中的所有静态变量分配内存空间,并为设置一个初始(由于还没有产生对象,实例变量不在此操作范围内) 被final修饰的static变量(常量),会直接赋值; 4、解析 将常量池中的符号引用转为直接引用...5、初始化(先父后子) 5.1 为静态变量赋值 5.2 执行static代码块 注意:static代码块只有jvm能够调用    如果是多线程需要同时初始化一个类,仅仅只能允许其中一个线程对执行初始化操作...因为子类存在对父类的依赖,所以类的加载顺序是先加载父类后加载子类,初始化也一样。不过,父类初始化时,子类静态变量也有有的,是默认。...最终,方法区会存储当前类类信息,包括类的静态变量、类初始化代码(定义静态变量时的赋值语句 和 静态初始化代码块)、实例变量定义、实例初始化代码(定义实例变量时的赋值语句实例代码块和构造方法)和实例方法,...二、创建对象 1、在堆区分配对象需要的内存 分配的内存包括本类和父类的所有实例变量,但不包括任何静态变量 2、对所有实例变量赋默认 将方法区内对实例变量的定义拷贝一份到堆区,然后赋默认 3、执行实例初始化代码

    2.6K21

    java 类的加载

    加载是将class文件加载到 jvm内存,并为之创建一个大的Class,任何类被系统使用都会建立一个大Class对象。...Class用来表示文件内容,成员变量,构造方法,成员方法 连接: 验证是否是正确的Class内部结构 准备负责为静态成员分配内存,并设置默认初始...2.为静态[变量]赋值,访问静态变量 3.调用静态方法 4.使用反射方法创建某个类或接口的反射方法java.lang.Class 5.初始化某子类...0,当然final static int b 则仍然是10,因为被final修饰的静态变量不会导致类的初始化初始化 类的初始化阶段所有的变量都会被赋予正确的,也就是在编写程序时指定的 静态语句块只能对后面的静态变量进行赋值...1处,和2处的结果不同 放在2 处连接阶段, x = 0, y = 0, instaance = null; 初始化类阶段按顺序赋值真实初始化, x = 0, y = 0, instance =

    75410

    Java new一个对象的过程中发生了什么?

    ) 3、准备 为类中的所有静态变量分配内存空间,并为设置一个初始(由于还没有产生对象,实例变量不在此操作范围内) 被final修饰的static变量(常量),会直接赋值; 4、解析 将常量池中的符号引用转为直接引用...5、初始化(先父后子) 4.1 为静态变量赋值 4.2 执行static代码块 注意:static代码块只有jvm能够调用 如果是多线程需要同时初始化一个类,仅仅只能允许其中一个线程对执行初始化操作...因为子类存在对父类的依赖,所以类的加载顺序是先加载父类后加载子类,初始化也一样。不过,父类初始化时,子类静态变量也有有的,是默认。...最终,方法区会存储当前类类信息,包括类的静态变量、类初始化代码(定义静态变量时的赋值语句 和 静态初始化代码块)、实例变量定义、实例初始化代码(定义实例变量时的赋值语句实例代码块和构造方法)和实例方法,...二、创建对象 1、在堆区分配对象需要的内存 分配的内存包括本类和父类的所有实例变量,但不包括任何静态变量 2、对所有实例变量赋默认 将方法区内对实例变量的定义拷贝一份到堆区,然后赋默认 3、执行实例初始化代码

    61510

    一文理解java对象初始化顺序

    以及类成员信息的访问修饰符是否允许访问等) 3、准备 ​ 为类中的所有静态变量分配内存空间,并为设置一个初始(由于还没有产生对象,实例变量不在此操作范围内) ​ 被final修饰的static变量(...5、初始化(先父后子) 为静态变量赋值 执行static代码块 ​ 注意:static代码块只有jvm能够调用 ​ 如果是多线程需要同时初始化一个类,仅仅只能允许其中一个线程对执行初始化操作...因为子类存在对父类的依赖,所以类的加载顺序是先加载父类后加载子类,初始化也一样。不过,父类初始化时,子类静态变量也有有的,是默认。 ​...最终,方法区会存储当前类类信息,包括类的静态变量、类初始化代码(定义静态变量时的赋值语句 和 静态初始化代码块)、实例变量定义、实例初始化代码(定义实例变量时的赋值语句实例代码块和构造方法)和实例方法,...对象创建阶段 1、在堆区分配对象需要的内存 ​ 分配的内存包括本类和父类的所有实例变量,但不包括任何静态变量 2、对所有实例变量赋默认 ​ 将方法区内对实例变量的定义拷贝一份到堆区,然后赋默认 3、

    55930

    Java类加载机制的七个阶段,加载、验证、准备、解析、初始化、使用、卸载

    在这个阶段,JVM 的主要目的是将字节码从各个位置(网络、磁盘等)转化为二进制字节流加载到内存中,接着会为这个类在 JVM 的方法区创建一个对应的 Class 对象,这个 Class 对象就是这个类各种数据的访问入口...在准备阶段,JVM 会为类变量分配内存,并为初始化。但是这里的初始化指的是为变量赋予 Java 语言中该数据类型的零,而不是用户代码里初始化。...既然一旦赋值就不会再改变,那么就必须一开始就给赋予用户想要的,因此被 final 修饰的类变量在准备阶段就会被赋予想要的。...而没有被 final 修饰的类变量可能在初始化阶段或者运行阶段发生变化,所以就没有必要在准备阶段对它赋予用户想要的。...生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候

    6.8K40

    Java 类的 Linking 和 Initializing 简单笔记

    在 Linking 的 Preparation 阶段 和 Initializing 可以了解类静态成员变量初始化。...这里,通过一个简单的代码实例来了解一下在 Preparation 阶段和 Initializing 阶段的对类中静态变量的赋初始初始化的过程。...在类验证通过后是 Preparation,该步骤主要为类中定义的静态成员变量分配内存,并为静态成员变量赋默认。...Initializing 阶段用来完成类的初始化代码,其中包含静态成员变量初始化。 三、解释代码 有了上面两个阶段大体的工作内容,再来看一下代码。...在代码中,定义了一个 Test 类,类中定义了两个静态的成员变量,分别是 int 型和 Test 类。在 Preparation 阶段,会为这两个静态成员变量分配空间,赋默认

    31520

    面试官:new一个对象有哪两个过程?

    ) 3、准备 为类中的所有静态变量分配内存空间,并为设置一个初始(由于还没有产生对象,实例变量不在此操作范围内) 被final修饰的static变量(常量),会直接赋值; 4、解析 将常量池中的符号引用转为直接引用...5、初始化(先父后子) 4.1 为静态变量赋值 4.2 执行static代码块 注意:static代码块只有jvm能够调用 如果是多线程需要同时初始化一个类,仅仅只能允许其中一个线程对执行初始化操作,...因为子类存在对父类的依赖,所以类的加载顺序是先加载父类后加载子类,初始化也一样。不过,父类初始化时,子类静态变量也有有的,是默认。...最终,方法区会存储当前类类信息,包括类的静态变量、类初始化代码(定义静态变量时的赋值语句 和 静态初始化代码块)、实例变量定义、实例初始化代码(定义实例变量时的赋值语句实例代码块和构造方法)和实例方法,...二、创建对象 1、在堆区分配对象需要的内存 分配的内存包括本类和父类的所有实例变量,但不包括任何静态变量 2、对所有实例变量赋默认 将方法区内对实例变量的定义拷贝一份到堆区,然后赋默认 3、执行实例初始化代码

    1.9K31

    一文解决JVM常见面试题,轻松拿offer

    ,修饰符,局部变量表和操作数栈的大小,异常表 静态变量 指向类加载器的引用 指向Class类对象(Class.forName()的Class)的引用 虚拟机栈(每个线程一个,线程私有) 每执行一个...Java方法,会往Java虚拟机栈中push一个栈帧 一个Java方法执行完毕,对应的栈帧从Java虚拟机栈中pop 编译java文件时,一个栈帧需要多大的局部变量表,多深的操作数栈已经被分析出来...默认15,可以设置),进入老年代 动态年龄判定 Survivor区中相同年龄的对象,如果大小之和占到了 To Survivor区一半以上的空间,那么大于此年龄的对象会直接进入老年代 空间分配担保...3.3.3 准备Preparation 为类变量分配内存并设置初始 static变量——设置为零 final static变量——设置声明的 3.3.4 解析Resolution 将.class...初始化其实就是执行类的clinit()方法的过程 子类在初始化前必须先完成父类的初始化 JVM保证一个类的clinit()方法在多线程环境中只会被一个线程执行一次——保证一个类只会加载一次 对于类 检查父类是否已经加载

    38410

    笔记06 - Class对象在执行引擎中初始化的过程

    一个class文件被加载到内存中需要经过三个步骤:装载、链接、初始化。其中链接可以细分为验证、准备、解析三个步骤。...准备 准备是链接的第二步,这一阶段是为了给类中的静态变量分配内存,并给静态变量设置为零。...e.g. piblic static int value = 100; 在准备阶段,JVM会为value分配内存,并为设置初始为0.而真正的100,会在后续的初始化阶段进行设置。...初始化 这是class加载的最后一步,这一阶段主要是执行类构造器的方法的过程,并真正初始化变量静态变量)。...class初始化过程中对象的创建顺序 类对象的初始化顺序为: 静态变量/静态代码块 -> 普通代码块 -> 构造函数 1. 父类的静态变量静态代码块 2. 子类的静态变量静态代码块 3.

    84010

    《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接

    输入的可重定位目标文件由各种不同的代码和数据节( section)组成,每一节都是一个连续的字节序列。指令在一节中,初始化了的全局变量在另一节中,而未初始化变量又在另外节中。   ....data:已初始化的全局和静态C变量。局部C变量在运行时被保存在栈中,既不出现在,data节中,也不出现在.bss节中 .bss:未初始化的全局和静态C变量,以及所有被初始化为0的全局或静态变量。...在目标文件中这个节不占据实际的空间,它仅仅是一个占位符。目标文件格式区分已初始化和未初始化变量是为了空间效率:在目标文件中,未初始化变量不需要占据任何实际的磁盘空间。....rel.data:被模块引用或定义的所有全局变量的重定位信息。一般而言,任何已初始化的全局变量,如果它的初始一个全局变量地址或者外部定义函数的地址,都需要被修改。...它初始化执行环境,调用用户层的main函数,处理main函数的返回,并且在需要的时候把控制返回给内核。 ? 总结   链接可以在编译时由静态编译器来完成,也可以在加载时和运行时由动态链接器来完成。

    2.6K31

    C++从入门到精通——static成员

    三、static成员的注意事项 static不能给缺省 在C++中,static关键字用于声明静态成员变量静态函数。在声明静态成员变量时,不能直接为设置缺省。...其中一个原因是缺省是要走初始化列表的,而static是不会走初始化列表。 除此之外,因为静态成员变量在编译阶段就已经被分配了内存空间(即在静态区),并没有被放置在对象的内存空间中。...静态成员变量是属于整个类而不是某个具体对象的,它的生命周期独立于任何对象的创建和销毁。 如果允许为静态成员变量设置缺省,那么在编译阶段就需要为所有的静态成员变量分配空间并为赋值。...这将引入额外的开销和复杂性,因为静态成员变量的初始可能会依赖于其他静态成员变量静态函数的结果。 为了避免这种复杂性和性能开销,C++规定了静态成员变量不能直接设置缺省。...= 0; // 在类外部进行初始化赋值 需要注意的是,如果不在类外部进行初始化赋值,静态成员变量的初始将是未定义的。

    27110

    『互联网架构』软件架构-JVM(上)(25)

    ) (2)准备 为类中的所有静态变量分配内存空间,并为设置一个初始(由于还没有产生对象,实例变量不在此操作范围内) 被final修饰的静态变量,会直接赋予原值;类字段的字段属性表中存在ConstantValue...属性,则在准备阶段,就是ConstantValue的 (3)解析 将常量池中的符号引用转为直接引用(得到类或者字段、方法在内存中的指针或者偏移量,以便直接调用该方法),这个可以在初始化之后再执行。...static关键字标识的代码统一执行一遍,如果执行的是静态变量,那么就会使用用户指定的覆盖之前在准备阶段设置的初始;如果执行的是static代码块,那么在初始化阶段,JVM就会执行static代码块中定义的所有操作...所有类变量初始化语句和静态代码块都会在编译时被前端编译器放在收集器里头,存放到一个特殊的方法中,这个方法就是方法,即类/接口初始化方法。...该方法的作用就是初始化一个中的变量,使用用户指定的覆盖之前在准备阶段里设定的初始。任何invoke之类的字节码都无法调用方法,因为该方法只能在类加载的过程中由JVM调用。

    53930

    反射 — Java 高级开发必须懂的

    ;//实际告诉我们任何一个类都有一个隐含的静态成员变量class(知道类名时用) Class c2 = stu.getClass();//已知该类的对象通过getClass方法(知道对象时用)...加载: 就是指将class文件读入内存,并为之创建一个Class对象,任何类被使用时系统都会建立一个Class对象 连接: 验证:确保被加载类的正确性...准备:负责为类的静态成员分配内存,并设置默认初始化 解析:将类中的符号引用替换为直接引用 初始化: 局部变量保存在栈区:必须手动初始化 new 的对象保存在堆区...:虚拟机会进行默认初始化,基本数据类型初始化为0,引用类型初始化为null 2、类加载的时机(只加载一次) 以下时机仅表示第一次的时候 创建类的实例的时候 访问类的静态变量的时候 调用类的静态方法的时候...使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 初始化某个类的子类的时候 直接使用java.exe命令来运行某个主类 3、类加载器 负责将.class文件加载到内存中,并为之生成对应的

    37730

    Java反射-高级开发必须懂的

    ②.任何一个类都是Class类的实例对象,这个实例对象有三种表示方式:(我们新建一个Student类) Class c1 = Student.class;//实际告诉我们任何一个类都有一个隐含的静态成员变量...二:动态加载类 ①.编译时加载类是静态加载类 new 创建对象是静态加载类,在编译时刻就需要加载所有可用使用到的类,如果有一个用不了,那么整个文件都无法通过编译 ②.运行时加载类是动态加载类...,并为之创建一个Class对象,任何类被使用时系统都会建立一个Class对象 ·连接: 验证:确保被加载类的正确性 准备:负责为类的静态成员分配内存,并设置默认初始化...解析:将类中的符号引用替换为直接引用 ·初始化: 局部变量保存在栈区:必须手动初始化 new 的对象保存在堆区:虚拟机会进行默认初始化,基本数据类型初始化为0,引用类型初始化为...对象 ⑤ 初始化某个类的子类的时候 ⑥ 直接使用java.exe命令来运行某个主类 3.类加载器 负责将.class文件加载到内存中,并为之生成对应的Class对象 虽然我们在开发过程中不需要关心类加载机制

    49330

    两道面试题,带你透彻解析Java类加载机制

    在准备阶段,JVM 会为类变量分配内存,并为初始化。但是这里的初始化指的是为变量赋予 Java 语言中该数据类型的零,而不是用户代码里初始化。...既然一旦赋值就不会再改变,那么就必须一开始就给赋予用户想要的,因此被 final 修饰的类变量在准备阶段就会被赋予想要的。...而没有被 final 修饰的类变量可能在初始化阶段或者运行阶段发生变化,所以就没有必要在准备阶段对它赋予用户想要的。...生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候...分析方法论 从上面几个例子可以看出,分析一个类的执行顺序大概可以按照如下步骤: 确定类变量的初始。在类加载的准备阶段,JVM 会为类变量初始化,这时候类变量会有一个初始的零

    54430

    java类加载的过程 父_类加载机制原理

    当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始)和解析(将符号引用替换为直接引用)三个步骤。...3 ) 将类的class文件读入内存,并为之创建一个java.lang.Class对象,也就是说当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象, 作为方法区这个类的各种数据的访问入口...指向常量的各种索引中是否有指向不存在的常量或不符合装型的常量 。...准备 准备阶段是正式为类变量分配内存并设置变量初始的阶段,这些变量所使用的内存都将在方法区中进行分配 。...类的初始化阶段主要是对类变量进行初始化,在Java类中对类变量指定初始有两种方式: 声明类变量时指定初始 使用静态初始化块为类变量指定初始 JVM初始化一个类一般包括如下几个步骤: 假如这个类还没有被加载和连接

    70620

    java类的加载机制

    3、准备(连接阶段的第二步):为类的 静态变量分配内存,并将其初始化为默认 准备阶段是正式为类变量分配内存并设置变量初始的阶段,这些内存都将在方法区中分配。...这里所设置的初始通常情况下是数据类型默认的零(如0、0L、null、false等),而不是被在Java代码中被显式地赋予的。...直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。 5、初始化:为类的静态变量赋予正确的初始 主要对类变量进行初始化。...在Java中对类变量进行初始设定有两种方式: ①声明类变量是指定初始 ②使用静态代码块为类变量指定初始 JVM初始化步骤 1、假如这个类还没有被加载和连接,则程序先加载并连接该类 2、假如该类的直接父类还没有被初始化...访问某个类或接口的静态变量,或者对该静态变量赋值 调用类的静态方法 反射(如 Class.forName(“com.shengsiyuan.Test”)) 初始化某个类的子类,则其父类也会被初始化 Java

    39420
    领券