黑马程序员___java断言

----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------

下面介绍一下断言在JAVA中的使用,JAVA是从JDK1.4才开始支持断言的(添加了关键字assert),请注意老版的JRE不支持。

断言概述


  编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设
  可以将断言看作是异常处理的一种高级形式
  断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真
  可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。
  使用断言可以创建更稳定,品质更好且易于除错的代码
  当需要在一个值为FALSE时中断当前操作的话,可以使用断言
  单元测试必须使用断言(Junit/JunitX)
  除了类型检查和单元测试外,断言还提供了一种确定个种特性是否在程序中得到维护的极好的方法
  使用断言使我们向按契约式设计更近了一部

常见的断言特性


  前置条件断言:代码执行之前必须具备的特性
  后置条件断言:代码执行之后必须具备的特性
  前后不变断言:代码执行前后不能变化的特性

断言使用方式


  断言可以有两种形式
  1.assert Expression1
  2.assert Expression1:Expression2
  其中Expression1应该总是一个布尔值,Expression2是断言失败时输出的失败消息的字符串。如果Expression1为假,则抛出一个 AssertionError,这是一个错误,而不是一个异常,也就是说是一个不可控制异常(unchecked Exception),AssertionError由于是错误,所以可以不捕获,但不推荐这样做,因为那样会使你的系统进入不稳定状态。

起用断言


  断言在默认情况下是关闭的,要在编译时启用断言,需要使用source1.4标记 既javac source1.4 Test.java ,在运行时启用断言需要使用 -ea参数 。要在系统类中启用和禁用断言可以使用 -esa 和 -dsa参数。
  
例如:
 public class AssertExampleOne{
   public AssertExampleOne(){}
   public static void main(String args[]){
      int x=10;
      System.out.println("Testing Assertion that x==100");
      assert x=100;"Out assertion failed!";
      System.out.println("Test passed!");
   }
}

如果编译时未加 -source1.4,则编译通不过
在执行时未加 -ea 时输出为
Testing Assertion that x==100
Test passed
jre忽略了断言的就代码,而使用了该参数就会输出为
Testing Assertion that x==100
Exception in thread "main" java.lang.AssertionError: Out assertion failed!
        at AssertExampleOne.main(AssertExampleOne.java:6)

断言的副作用


  由于程序员的问题,断言的使用可能会带来副作用 ,例如:
  boolean isEnable=false;
  //...
  assert isEnable=true;
  这个断言的副作用是因为它修改了程序中变量的值并且未抛出错误,这样的错误如果不细心的检查是很难发现的。但是同时我们可以根据以上的副作用得到一个有用的特性,根据它来测试断言是否打开。

 public class AssertExampleTwo{

   public static void main(String args[]){
     boolean isEnable=false;
     //...
     assert isEnable=true;
     if(isEnable==false){
       throw new RuntimeException("Assertion shoule be enable!");
     }
   }
}

何时需要使用断言


  1.可以在预计正常情况下程序不会到达的地方放置断言 :assert false
  2.断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)
  3.使用断言测试方法执行的前置条件和后置条件
  4.使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个合适值)

什么地方不要使用断言

 

 断言语句不是永远会执行,可以屏蔽也可以启用
因此:
  1.不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行
  2.断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值

 

----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------

转载于:https://www.cnblogs.com/miaozy/p/3755955.html

java.lang.AssertionError: assertion failed: No plan for HiveTableRelation的解决方法 前言 在使用pyspark跑sparksql的时候出现了类似如下的错误: java.lang.AssertionError: assertion failed: No plan for HiveTableRelation .... 一般来说这种错误的产生是因为在创建SparkSession对象的时候HiveContext没有被启用。 查了一下代码, 果不其然: #In python spark ... 阅读详情

相关推荐

黑马2021最新版 SpringCloud基础篇全技术栈导学(RabbitMQ+Docker+Redis+搜索+分布式)

也是使用的Ribbon,下面一个例子将Nacos配置成同集群优先的负载均衡策略默认的并不能实现根据同集群优先来实现负载均衡。Nacos中提供了一个NacosRule的实现,可以优先从同集群中挑选实例。1)给order-service配置集群信息springcloudnacoslocalhost8848discoveryHZ#集群名称2)修改负载均衡规则ribboncom.alibaba.cloud.nacos.ribbon.NacosRule#负载均衡规则。...

m0_67402026的博客 2285

报java.lang.AssertionError错误:

1.在使用Assert.assertEquals时报一个错误: 2.首先,我们的明白Assert的用法: assert <boolean表达式> ​ 如果<boolean表达式>为true,则程序继续执行。 ​ 如果为false,则程序抛出AssertionError,并终止执行 assert <boolean表达式> : <错误信息表达式> ​ 如果<boolean表达式>为true,则程序继续执行。 ​ 如果为f

m0_45259293的博客 2万+

Java中的AssertionError异常:使用和意义

通过在代码中插入断言,我们可以在运行时检查条件是否满足,并在条件不满足时抛出AssertionError异常。在Java编程中,AssertionError异常是一种用于断言错误的异常类型。它表示在执行断言语句时,断言条件未满足,因此断言失败。使用断言的主要目的是在代码中插入检查点,以确保某些条件在程序执行过程中为真。在开发和调试阶段,我们可以通过启用断言来帮助我们捕获和修复代码中的问题。然而,在生产环境中,建议禁用断言,以提高性能和避免不必要的断言检查。如果断言失败,则表示代码存在逻辑错误。

FcRuby的博客 1099

JAVA中断言的使用

相信学过c,c++的朋友一定不会对断言感到陌生。下面介绍一下断言在JAVA中的使用,JAVA是从JDK1.4才开始支持断言的(添加了关键字assert),请注意老版的JRE不支持。断言概述  编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设  可以将断言看作是异常处理的一种高级形式  断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真  可以在任何时候启用和

键者天行 1万+

neruolib全脑建模计算框架

neurolib 是一个用python编写的全脑建模计算框架,也是可扩展的、允许轻松实现自定义神经质量模型,能够在介观尺度上表示脑区平均活动。

Rootfyx的博客 1147

保姆级教程:不用看古早代码,5分钟搞懂泛微ecology9附件存储与接口调用

本文详细解析了泛微ecology9附件存储与接口调用的核心原理,提供从基础概念到实战操作的完整指南。通过拆解文档化附件设计理念、解析RESTful接口参数,并给出Python代码示例,帮助开发者快速掌握附件上传与业务集成的关键技巧,提升二次开发效率。

weixin_28688385的博客 349

已解决java.lang.AssertionError: 断言错误的正确解决方法,亲测有效!!!

已解决java.lang.AssertionError: 断言错误的正确解决方法,亲测有效!!!

小明的Java问道之路 9209

电力现货市场出清机制与节点电价计算实战解析

本文深入解析了电力现货市场的出清机制,特别是节点边际电价的计算原理与实战应用。通过一个基于Matlab和IEEE30节点系统的完整案例,详细演示了如何利用最优潮流模型求解市场出清价格,并提取节点电价,揭示了电网阻塞如何影响实时电价的形成。

weixin_29061425的博客 949

黑马程序员学习笔记——java中的断言

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

cdl的专栏 865

R语言笔记十:独立性检验函数

1.独立性检验函数        独立性检验是根据频数信息判断两类因子彼此相关或相互独立的假设检验。所谓独立性就是指变量之间是独立的,没有关系。 独立性检验算法:卡方检验、Fisher检验、Cochran-Mantel-Haenszel检验 2.假设检验 假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。 原假设——没有发生 备择假设——发生了 具体做法:根据问题的需要对所研究的总体作

weixin_44384631的博客 4111

易盾滑块的js逆向分析

基于易盾的滑块验证码进行逆向分析,最种实现全系列的验证码逆向,包括滑块、点选、推理拼图等多种类型。

shanf7921的博客 3万+

黑马程序员_java语法

------- android培训、java培训、期待与您交流! ---------- 一:第一天 1.1 基础常识     软件开发就是制作软件。软件是一系列按照特定顺序的计算机数据和指令的集合。软件分为系统软件和应用软件。 1.2 人机交互     人机交互即人与计算机的交流互动,交互方式分为图形化界面和命令行方式两种。 1.3命令行方式的一些命令     dir:列出当前目录下

u012558211的专栏 762

专栏目录:Linux 内存管理子系统的进化——从 MM 到 HMM

专栏梳理了Linux内存管理子系统从经典MM到异构内存管理(HMM)的演进历程。内容分为六大部分:首先介绍经典MM基础,包括虚拟地址空间、页表、VMA等核心机制;其次分析MM通用框架如页表遍历、NUMA迁移等;然后探讨设备内存引入的关键技术,如ZONE_DEVICE和dev_pagemap;接着深入解析HMM核心机制及其与DMA的集成;随后通过多个实际驱动案例展示HMM应用;最后讨论大页支持等进阶主题。专栏采用"经典机制→问题→扩展方案"的三段式结构,帮助开发者理解Linux如何通过HMM实现设备内存管理。

图形/计算GPU的驱动与虚拟化技术分享园地 867

黑马程序员英语单词册

黑马程序员英语单词册经过几天的整理黑马程序员将必备的 600 词汇,和有关计算机需要掌握的词汇整理出来,分享给大家学习,希望对你有所帮助。

程序员猫爪 2408

从零到一:ESP32与豆包大模型的RTC连续对话实现指南

文本实现ESP32S3 SparkBot与豆包大模型的RTC连续对话

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 4364

芒果YOLOv8改进52:主干Backbone篇之GhostNetV2:提出原创GhostNetV2 架构升级版:引入长距离注意力机制增强廉价操作,构建更强端侧轻量型骨干,打造高效轻量级检测器

长距离注意力机制增强廉价操作,打造轻量级检测器

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1611

黑马go语言视频教程

原文地址:来了,你们要的Go,某马Go语音视频教程 之前分享的视频,Python、Java 的居多,现在好像 Go 很火? 后台一堆找我问我要 Go 的。 这让我左右为难啊 不过还是要迎难而上,对不对? 于是,网上一顿搜,找到了一堆 我又进行了筛选 最终确定了一份看着还不错的视频教程 目录 嗯,又是黑马的 ├─第1天视频(基本类型、流程控制) │ 01_课程安排 │ ...

生命在于折腾 7882

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

黑马程序员——java学习记录01

没有Junit之前,我们测试自己编写的方法是直接在main()中编写测试用例。这样做的缺点有:无法实现自动化测试,无法得到测试报告,需要程序员自己观察测试是否通过。在main()中的测试用例,需要注释掉才能投入生成环境中使用,极不方便。使用Junit框架,可以将测试用例直接放入测试文件夹中,不会影响代码的正常运行,无需注释。同时可以使用断言机制,例: 如何使用Junit框架? 测试方法必须是公共的,无参的,无返回值的非静态方法 即:主要是用来做框架的,用来获得class对象。 构造器、成员变量、成员方

weixin_47096973的博客 469

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

黑马全套Java教程(十)

黑马全套Java教程(一) 黑马全套Java教程(二) 黑马全套Java教程(三) 黑马全套Java教程(四) 黑马全套Java教程(五) 黑马全套Java教程(六) 黑马全套Java教程(七) 黑马全套Java教程(八) 黑马全套Java教程(九) 单元测试:针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性目前测试方法是怎么进行的,存在什么问题:Junit单元测试框架:JUnit是使用Java语言实现的单元测试框架,它是开源的

zdb 4737

efm32 入门.pdf

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

15.JAVA高级--黑马程序员

针对最小的功能单元即方法的测试,编写测试代码来对方法进行正确性测试就是Java代码里的特殊标记,比如:@Override、@Test等,作用是让其他程序根据注解信息来决定怎么执行该程序注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上等位置//定义自定义注解//默认值为18/*使用自定义注解的简单实例*//*因为age有默认值,所以可以不用赋值,默认为18*/对象如果觉得自己身上干的事情太多,就可以转移部分工作给代理来减轻自己的工作量。

weixin_45336151的博客 341

黑马java-JavaSE进阶-java高级技术

本文主要讲解了单元测试、单元测试框架、注解及动态代理部分内容。

qq_52649952的博客 1847

黑马程序员—assert用法

------------- android培训、java培训、期待与您交流!------------- 以下摘自互联网与《张孝祥JAVA面试题大全》 ---------------------------------------------------------------- 什么时候用assert? assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机

zxhhui1987的专栏 483

Java期末小结<一> Java基础入门——黑马成程序员

必考点: 一、标识符 标识符是用来给类、变量、方法名mi'g'mi 1、区分大小写 2、

qq_53143214的博客 714

SpringCloud(微服务) - 黑马程序员

1.2 修改OrderService中代码发送HTTP请求 2. Eureka(注册中心) 2.1 Eureka的作用 2) 创建启动类EurekaApplication并添加@EnableEurekaServer开启Eureka服务 3) 编写一个application.yml文件,内容如下: 4)启动微服务,然后在浏览器访问:http://127.0.0.1:10086 eureka服务启动不了的尝试换一下Maven的java版本改为8。看到如下页面即成功: 2)修改application.y

qwwee123的博客 2328

黑马程序员_常见异常

--------------------android培训、java 培训、期待与您交流! ----------------------   算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界

lichuang513的专栏 942

黑马程序员_Java基础_关键字

整理了一下Java的50个关键字:   abstract ['æbstrækt] 抽象方法、抽象类的修饰符。抽象的方法没有方法体,直接以 分号结尾。只要该类中有一个抽象的方法,则该类必须声明为 抽象类。抽象类不能用new创建对象。抽象类中可以没有抽 象的方法,只是用来限制该类不能够创建对象。 实例: public abstract class AAbstractClass { pub

宣的专栏 740
上一篇: 黑马程序员___java注解小结
下一篇: 黑马程序员___java类加载器
alg89136
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值