Java开发:反射机制

Java开发之框架基础技术——反射 1、概念:在计算机领域,反射是指一种能力,能够自描述和自控制,即在运行状态中,动态获取类信息及信息动态调用实例方法的能力①运行时创建动态特性②运行期间调用方法③运行时更改属性Person.java → 编译器 → Person.class → Java虚拟机 → 运行程序。 阅读详情

一、Java Reflection

Reflection(反射)是java被视为动态语言的关键(Java是静态语言,因为有了反射所以又被成为“准动态语言”)

二、重点:一个类只有一个Class对象

三、反射的优缺点

优点:可以实现动态创建对象和编译,体现出很大的灵活性
缺点:对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。
这类操作总是慢于 直接执行相同的操作。

四、获取Class类的实例

1、该方法最安全可靠,性能最高。
Class c1 = Student.class;
2、通过类的实例获取Class对象
Person student = new Student(“学生”);
Class c2 = student.getClass();
3、通过类名全路径获取Class对象
Class c3 = Class.forName(“com.baidu.baike.lesson.annotations_reflection.Student”);

public class RLesson002 {
    public static void main(String[] args) {
        try {
            Person student = new Student("学生");
            System.out.println(student.name);

            //推荐使用1
            Class c1 = Student.class;

            Class c2 = student.getClass();

            //推荐使用2
            Class c3 = Class.forName("com.baidu.baike.lesson.annotations_reflection.Student");

            //可以获取父类的class
            Class superclass = c1.getSuperclass();

            //c1、c2、c3的hashCode相同
            System.out.println(c1.hashCode());
            System.out.println(c2.hashCode());
            System.out.println(c3.hashCode());
            System.out.println(superclass);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }


    }
}

class Person {
    public String name;

    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}

class Student extends Person {

    public Student(String name) {
        super(name);
    }
}


五、几乎所有类型都有class对象

class:外部类,成员(成员内部类、静态内部类),局部内部类,匿名内部类
interface:接口
[]:数组
enum:枚举
annotation:注解@interface
primitive type:基本数据类型
void:方法


public class RLesson003 {
    public static void main(String[] args) {
        Class c1 = Object.class;//类
        Class c2 = Comparable.class;//接口
        Class c3 = String[].class;//一维数组
        Class c4 = int[][].class;//二维数组
        Class c5 = Override.class;//注解
        Class c6 = ElementType.class;//枚举
        Class c7 = Integer.class;//基本数据类型
        Class c8 = void.class;//方法
        Class c9 = Class.class;//Class

        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
        System.out.println(c4);
        System.out.println(c5);
        System.out.println(c6);
        System.out.println(c7);
        System.out.println(c8);
        System.out.println(c9);

    }

}

六、类加载内存分析


public class RLesson002 {
    public static void main(String[] args) {

        System.out.println(Person.m);
        Person p1 = new Person("小明");
    }
}

class Person {
    static {
        System.out.println("Person类的静态代码块初始化");
        m = 300;
    }

    static int m = 100;
    public String name;

    public Person(String name) {
        System.out.println("Person类的无参构造初始化");
        this.name = name;
    }
}

运行结果:
Person类的静态代码块初始化
100
Person类的无参构造初始化

Process finished with exit code 0

七、获取类的运行时结构


public class RLesson004 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
        Class c1 = Class.forName("com.baidu.baike.lesson.annotations_reflection.User");
        //获取类的名字
        System.out.println(c1.getName());//获取包名+类名
        System.out.println(c1.getSimpleName());//获取类型

        System.out.println("==========获取类的属性===========");
        System.out.println("------>获取public的属性");
        Field[] fields = c1.getFields();//获取public的属性
        for (Field field : fields) {
            System.out.println(field);
        }
        System.out.println("------>获取private+public的属性");
        fields = c1.getDeclaredFields();//获取private+public的属性
        for (Field field : fields) {
            System.out.println(field);
        }

        System.out.println("==========获取指定属性的值===========");
        Field fName = c1.getDeclaredField("name");
        System.out.println(fName);

        System.out.println("==========获取类的方法===========");
        System.out.println("------>获取public的方法");
        Method[] methods = c1.getMethods();
        for (Method method : methods) {
            System.out.println("public的方法" + method);
        }
        System.out.println("------>获取自定义的public+private方法");
        methods = c1.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println("public+private的方法 -> " + method);
        }

        System.out.println("==========获取指定方法===========");
        Method getName = c1.getMethod("getName");
        Method setName = c1.getMethod("setName", String.class);
        System.out.println(getName);
        System.out.println(setName);

        System.out.println("==========获取构造器===========");
        System.out.println("-----------获取public的构造器");
        Constructor[] constructors = c1.getConstructors();
        for (Constructor constructor : constructors) {
            System.out.println(constructor);
        }
        System.out.println("-----------获取private+public的构造器");
        constructors = c1.getDeclaredConstructors();
        for (Constructor constructor : constructors) {
            System.out.println(constructor);
        }

        System.out.println("==========获取指定构造器===========");
        Constructor mConstructor = c1.getDeclaredConstructor(String.class, int.class, int.class);
        System.out.println(mConstructor);
    }
}

class User {
    private String name;
    private int age;
    public int sex;

    public User() {
    }

    private User(String name) {
        this.name = name;
    }

    public User(String name, int age, int sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    private int getSex() {
        return sex;
    }

    private void setSex(int sex) {
        this.sex = sex;
    }
}

运行结果:
com.baidu.baike.lesson.annotations_reflection.User
User
==========获取类的属性===========
------>获取public的属性
public int com.baidu.baike.lesson.annotations_reflection.User.sex
------>获取private+public的属性
private java.lang.String com.baidu.baike.lesson.annotations_reflection.User.name
private int com.baidu.baike.lesson.annotations_reflection.User.age
public int com.baidu.baike.lesson.annotations_reflection.User.sex
==========获取指定属性的值===========
private java.lang.String com.baidu.baike.lesson.annotations_reflection.User.name
==========获取类的方法===========
------>获取public的方法
public的方法public java.lang.String com.baidu.baike.lesson.annotations_reflection.User.getName()
public的方法public void com.baidu.baike.lesson.annotations_reflection.User.setName(java.lang.String)
public的方法public int com.baidu.baike.lesson.annotations_reflection.User.getAge()
public的方法public void com.baidu.baike.lesson.annotations_reflection.User.setAge(int)
public的方法public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public的方法public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public的方法public final void java.lang.Object.wait() throws java.lang.InterruptedException
public的方法public boolean java.lang.Object.equals(java.lang.Object)
public的方法public java.lang.String java.lang.Object.toString()
public的方法public native int java.lang.Object.hashCode()
public的方法public final native java.lang.Class java.lang.Object.getClass()
public的方法public final native void java.lang.Object.notify()
public的方法public final native void java.lang.Object.notifyAll()
------>获取自定义的public+private方法
public+private的方法 -> public java.lang.String com.baidu.baike.lesson.annotations_reflection.User.getName()
public+private的方法 -> public void com.baidu.baike.lesson.annotations_reflection.User.setName(java.lang.String)
public+private的方法 -> public int com.baidu.baike.lesson.annotations_reflection.User.getAge()
public+private的方法 -> public void com.baidu.baike.lesson.annotations_reflection.User.setAge(int)
public+private的方法 -> private int com.baidu.baike.lesson.annotations_reflection.User.getSex()
public+private的方法 -> private void com.baidu.baike.lesson.annotations_reflection.User.setSex(int)
==========获取指定方法===========
public java.lang.String com.baidu.baike.lesson.annotations_reflection.User.getName()
public void com.baidu.baike.lesson.annotations_reflection.User.setName(java.lang.String)
==========获取构造器===========
-----------获取public的构造器
public com.baidu.baike.lesson.annotations_reflection.User(java.lang.String,int,int)
public com.baidu.baike.lesson.annotations_reflection.User()
-----------获取private+public的构造器
public com.baidu.baike.lesson.annotations_reflection.User(java.lang.String,int,int)
private com.baidu.baike.lesson.annotations_reflection.User(java.lang.String)
public com.baidu.baike.lesson.annotations_reflection.User()
==========获取指定构造器===========
public com.baidu.baike.lesson.annotations_reflection.User(java.lang.String,int,int)

八、动态创建对象

A、创建类的对象

调用Class对象的newInstance()方法。

  • 类必须有一个无参数的构造器
  • 类的构造器的访问权限需要足够

B、具体步骤

  • 通过Class类的getDeclaredConstructor(Class …parameterTypes)取得本类的指定形参类型的构造器。
  • 向构造器的形参中传递一个对象数组进去,里面包含了构造器中所需的各个参数
  • 通过Constructor实例化对象

C、示例代码

public class RLesson005 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        Class c1 = Class.forName("com.baidu.baike.lesson.annotations_reflection.User");

        //使用默认无参构造
        User user = (User) c1.newInstance();
        user.setName("小花");
        user.setAge(18);
        //获取private方法并赋值
        Method setSex = c1.getDeclaredMethod("setSex", int.class);
        //不能直接操作私有方法,将私有方法设为可见
        setSex.setAccessible(true);
        setSex.invoke(user, 2);
        System.out.println(user);


        //使用三个参数的构造器
        Constructor mConstructor = c1.getDeclaredConstructor(String.class, int.class, int.class);
         user = (User) mConstructor.newInstance("小王", 10, 8);
         //获取私有属性
        Field name = c1.getDeclaredField("name");
        //不能直接操作私有属性,将私有属性设为可见
        name.setAccessible(true);
        name.set(user, "小赵");
        System.out.println(user);
    }
}

class User {
    private String name;
    private int age;
    public int sex;

    public User() {
    }

    private User(String name) {
        this.name = name;
    }

    public User(String name, int age, int sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    private int getSex() {
        return sex;
    }

    private void setSex(int sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}


执行结果:
User{name='小花', age=18, sex=2}
User{name='小赵', age=10, sex=8}

九、获取注解信息

A、应用场景

利用注解和反射完成类和表结构的映射关系
在这里插入图片描述

B、示例代码


public class ALesson002 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        Class c1 = Class.forName("com.baidu.baike.lesson.annotations_reflection.StudentAL2");
        Annotation[] c1_annotation = c1.getDeclaredAnnotations();
        for (Annotation annotation : c1_annotation) {
            System.out.println(annotation);
        }
        System.out.println("======================");
        Field field_name = c1.getDeclaredField("name");
        FieldName field_nameDeclaredAnnotation = field_name.getDeclaredAnnotation(FieldName.class);
        System.out.println(field_nameDeclaredAnnotation.columnName() + ",type->" + field_nameDeclaredAnnotation.type() + ",length->" + field_nameDeclaredAnnotation.length());
    }
}

@TableName("studeng_al2")
class StudentAL2 {
    @FieldName(columnName = "f_name", type = "1", length = 10)
    private String name;
    @FieldName(columnName = "f_age", type = "2", length = 3)
    private int age;
    @FieldName(columnName = "f_sex", type = "3", length = 2)
    private int sex;
}

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface TableName {
    String value();
}

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface FieldName {
    String columnName();

    String type();

    int length();
}

运行结果:
@com.baidu.baike.lesson.annotations_reflection.TableName(value=studeng_al2)
======================
f_name,type->1,length->10

结束

YOLOv8环境搭建+训练自己的数据详细项目 直接按照路径会有问题,找到自己 requirements.txt 文件路径,我这里是pip install -r D:\ultralytics-main\ultralytics-main\requirements.txt。首先去自己的anaconda的安装的envs(虚拟环境),在导航栏输入cmd,进入命令窗口。到官方网站下载yolo模型 ,下载好后解压,里面有个文件requirements.txt。然后安装ultralytics ,这是必须的。 阅读详情

相关推荐

卷积神经网络-猫狗识别(附源码)

利用python实现一个卷积神经网络,训练猫狗数据集,实现对猫狗图片的预测识别

m0_63223213的博客 2万+

java开发:反射的理解

什么是反射: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 什么是类的类对象: 在面向对象的世界里,万物皆对象。类也是对象,它是java.lang.Class类的实例对象。我们可以通过反射拿到所有类的类对象。通过这个类的类对象我们可以获取...

一个程序员-二白的博客 462

StarRocks慢查询排查实战:从Query Plan到Profile的保姆级调优指南

本文提供StarRocks慢查询排查的实战指南,从Query Plan解析到Profile诊断,详细讲解如何识别执行计划中的危险信号和优化关键指标。通过物化视图优化、分布式执行调整和资源管控方案,帮助DBA快速定位并解决查询性能问题,提升数据库效率。

weixin_42568801的博客 379

java反射原理-重要

一,反射是什么(反射是框架设计的灵魂) 1,JAVA反射机制是在运行状态中 对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 2,反射提供的功能: 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和...

回家养老 5万+

从零开始:用ADS 2023手把手教你设计2.4GHz Wi-Fi LNA(基于ATF-54143,附模型文件)

本文详细介绍了如何使用ADS 2023软件设计2.4GHz Wi-Fi频段的低噪声放大器(LNA),基于ATF-54143晶体管。内容涵盖模型导入、直流工作点确定、稳定性优化、噪声匹配等关键步骤,并提供可下载的模型文件包,帮助工程师快速掌握LNA设计技巧。

weixin_42531128的博客 320

HFSS仿真的后处理结果,如何根据天线表面的电流密度分布对天线进行优化?

在HFSS仿真中,天线表面的Jsurf​是最直观、最有价值的诊断工具之一。它不仅告诉你天线“能不能工作”,还能告诉你“为什么工作”以及“哪里出了问题”。

degogmy的博客 1158

应用反射进行开发

反射机制:运行状态中,对于任何一个类(class文件),都知道此类的所有属性和方法;对于任何一个对象,能调用任意一个属性和方法。简言之:动态获取类中信息。反射运行机制: 程序首先根据类名得到类名.class文件,然后加载进内存里;创建该字节码文件对象;紧接着创建该字节码内部对应的具体类对象。

我很帅的专栏 795

CloudCompare里那个CSF地面滤波插件,到底怎么用?手把手教你分离点云里的地面

本文详细介绍了如何在CloudCompare中使用CSF地面滤波插件分离点云中的地面数据。通过解析布料模拟滤波算法的核心参数,如布料刚度和网格分辨率,并提供不同地形(城市、丘陵、山地)的适配策略,帮助用户高效处理复杂点云数据。文章还包含实战案例和优化技巧,确保滤波结果的精度和可靠性。

weixin_42548708的博客 221

Java反射机制的适用场景及其利与弊

Java反射机制的适用场景及其利与弊   一、反射的适用场景是什么? 1).Java的反射机制在做基础框架的时候非常有用,有一句话这么说来着:反射机制是很多Java框架的基石。而一般应用层面很少用,不过这种东西,现在很多开源框架基本都已经给你封装好了,自己基本用不着写。典型的除了Hibernate之外,还有Spring也用到很多反射机制。经典的就是在xml文件或者properties里面写好

zolalad的专栏 1万+

(五)激光线扫描-位移台标定

线激光属于主动测量方式,但是由于线激光的特性,我们只能通过提取激光中心线获取这一条线上的高度信息,那么要进行三维重建的话,就需要通过平移或者是旋转的方式,来让线激光扫描被测物体的完整轮廓,也就是整个表面。激光线的密度越高还原出来的物体越细腻,但由于数据量大,也会导致速度变慢。下面以位移台为例讲解,如何标定位移台。

FlyWine的博客 2889

2026年复旦微电数字IC笔试试卷带答案解析

摘要: 本文为复旦微电子MCU/SOC岗位笔试模拟题,涵盖单片机架构、数字电路、存储技术等核心知识点。内容包括: 单选题(30分):考察Cortex-M中断机制、时序分析(建立/保持时间)、逻辑化简、跨时钟域设计(格雷码应用)、存储器特性(NAND Flash操作单元)等; 波形分析(15分):聚焦D触发器行为、时钟分频、建立时间违例判断及跨时钟域同步; 多选题(25分):涉及亚稳态成因与处理、异步FIFO设计要点、MCU低功耗策略、NAND Flash特性及复旦微电市场地位; 简答题(20分):解析建立/

Open 342

Java 反射机制详解:在框架开发中的应用与实践

反射(Reflection)是指在 Java 程序运行时,能够动态地获取一个类的所有信息,包括类的属性、方法、构造函数等,并可以在运行时创建对象、调用方法、修改属性值的能力。通过反射,Java 程序不再局限于编译时确定的静态行为,而是可以根据运行时的实际情况进行动态调整和操作。我们尝试实现一个简单的自定义数据库操作框架,利用反射实现对象与数据库表之间的基本映射和插入操作。

数字魔方操控师的博客 1036

AMBA-CHI协议详解(十)

该规范提供了一个Request Retry(请求重试)机制,确保当请求到达一个Completer 时,它要么被接受,要么被给予一个RetryAck响应,以防止阻塞REQ通道。

Crazzy_M的博客 986

JAVA基础面试题:Java中的反射机制及其在实际开发中的应用

反射是Java中一项强大的动态机制,它为框架开发、动态加载、测试工具等场景提供了极大的灵活性。然而,反射也有性能开销、安全性等问题,因此在实际开发中需要谨慎使用。合理利用反射可以大大提高代码的动态能力,但过度依赖反射可能会导致代码难以维护和性能问题。Victor的回答让面试官频频点头,显然对他的表现非常满意。

qq_61302385的博客 615

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java获取反射机制的三种方式

java 获取反射机制的三种方式: new对象 实现反射机制 路径 类名 代码示例 建立一个学生类: package com.aop8.reflect; public class Student { private int id; String name; protected boolean sex; public float score; } 获取反射机制: package com...

猎人在吃肉 790

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java 反射机制核心类详解:Class、Constructor、Method、Field

Java反射机制是一种强大的动态编程技术,允许程序在运行时获取和操作类的元数据(属性、方法、构造器等)。其核心包含四大类:Class(类元数据入口)、Constructor(构造方法操作)、Method(方法调用)和Field(属性读写)。反射提供了极高的灵活性,支持动态加载类、调用私有成员等特性,是Spring、MyBatis等框架的底层基础。但反射也存在性能开销、安全隐患等缺点,适用于框架开发、动态代理等场景,在常规业务中应谨慎使用。

qq_40303030的博客 3569

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

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

浅谈JAVA反射机制在Android应用开发中的应用

想必学过JAVA的人一定接触过“反射”(Reflection)这个名词,简单的来说,反射机制就是允许编程人员在程序运行时来改变程序的结构或者变量的类型。通过这个特性,我们可以在运行时得知某个类的所有成员,包括其属性和方法,同时也能够调用这些方法。请注意反射机制的特殊之处就在于可以使用编译期间完全未知的类,也就是通过反射机制可以加载一个在运行时才得知名字的类,从而取得其内部的成员函数并调用。

aree的专栏 978

Java反射机制的功能

Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意一个对象的方法; 生成动态代理。 ...

胖墩的IT博客 272

Java 反射机制

参考博文 1、什么是反射? 2、反射的原理 3、反射的优缺点 4、反射的用途 5、反射机制常用的类 6、反射的基本使用

今人不见古时月 110

Android中巧用Java反射机制

在Android中,可以从下面两点考虑来使用Java反射(Java Reflection)机制,从而达到意想不到的效果。这里也将展示Google是怎样在自己的应用中来使用Java反射机制的。   1. 同时兼容新老版本的SDK Android往往会在新版本中引入一些新的API来替代老的API,这些新的API在性能或者易用性上比老的API更好。但为了兼容性,新老API往往是共存的。 在这种情...

坚持,淡定 294

java反射机制

java反射机制 Java程序在运行过程中,我们可以获取任何一个类中的方法和属性。对于任何一个对象,可以动态的调用它的属性和方法。这种动态获取对象信息和调用对象方法的方式叫反射机制。 重点强调动态二字 反射的作用 反射日常使用比较少,一般用来开发框架,或者做一些比较抽象的底层代码。系统应用的配置性大大提高 例如: Jdk动态代理 Mybatis利用java的反射模式。 反射的三种方式 t.getC...

a576656008的博客 175

反射机制(Reflection .)

原文传送门:https://www.zhihu.com/question/24304289/answer/76541818 反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底的了解自身的情况为下一步的动作做准备。 下面具体介绍一下java的反射机制。 Java的反射机制的实现要借助于4个类:class,Construct

u011610110的博客 284

JavaWeb开发(三)3.5——Java的反射机制

Java的反射机制

qq_36216193的博客 685

java 反射机制探究

一 反射机制操作类的成员变量 二 操作类的方法 三 利用反射实例化类 四 利用反射访问一个类的私有成员 五 利用反射覆盖数据对象的toString 方法 转载于:https://www.cnblogs.com/xiaoduc-org/p/5967408.html...

weixin_33744141的博客 84

面试题:反射机制使用场景?

Spring框架的IOC(动态加载管理Bean)创建对象。

ughbnbjkk的博客 378

java反射机制的优点和缺点

一、反射机制的优点 首先,反射机制极大的提高了程序的灵活性和扩展性,降低模块的耦合性,提高自身的适应能力。 其次,通过反射机制可以让程序创建和控制任何类的对象,无需提前硬编码目标类。 再次,使用反射机制能够在运行时构造一个类的对象、判断一个类所具有的成员变量和方法、调用一个对象的方法。 最后,反射机制是构建框架技术的基础所在,使用反射可以避免将代码写死在框架中。 java的反射机制就是增加程序的灵活性,避免将程序写死到代码里。 例如: 实例化一个 person()对象, 不使用反射, new person(

禧年 2947
上一篇: Java开发:JVM篇-类加载内存分析
下一篇: Java开发:汇编语言
android157
博客等级 码龄9年 193粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值