【Java编程范式 】命名与排版

Pascal语言的编程范式 Pascal是一种由尼克劳斯·维尔特(Niklaus Wirth)在1970年代初期设计的程序设计语言。它以清晰的语法和严格的结构化编程特性而闻名。尽管在当前的编程世界中,Pascal并不是最主流的语言,但它在教育和软件开发领域仍然具有重要的地位。本文将探讨Pascal语言的编程范式,分析其基本特征、结构化编程的原则以及在实际应用中的优势和不足。 阅读详情

“假如生活欺骗了你,不要悲伤,不要心急!忧郁的日子里须要镇静:相信吧,快乐的日子将会来临!—— 普希金”

 


内容概述

  1. 命名原则:4条命名原则;常量命名、变量命名、方法命名、类命名、接口命名、包命名;
  2. 命名强制性要求:语法规定;仅由字母、数字、_、$组成;
  3. 排版原则:缩进;断开长句;使用空行、空格;

 


命名原则

1.名称应该有实际意义

       当我们为变量、方法、类或者常量命名的时候应该使用对阅读者来说是具有实际意义的名称,避免使用单个字母或者通用名。

我们首先来看下面这一段代码:

if (a < 65) {
    y = 65 - a;
}
else {
    y = 0;
}

       在上面这段代码中,虽然我们能理清代码的执行过程,但是却不能判断出变量a和常数65的意义,这毫无疑问让我们很难理解这段代码的实际意义。

如果我们使用具有实际意义的名称来替换代码中的字母变量和常量,这段代码将十分容易理解。

if (age < RETIREMNT_AGE) {
  yearsToRetirement = RETIREMNT_AGE - age;
}
else {
  yearsToRetirement = 0;
}

 

这种命名规则有一个例外情况,就是临时变量的命名。

 

for (int i = 0; i < numberOfStudents; i++) {
  enrollStudent(i);
}

 

临时变量的意义通过上下文的充足信息我们就可以判断出来,无需为其单独命名。

 

2.使用人们熟悉的名称

       使用阅读者所熟悉的领域中的术语。如果阅读者习惯使用“customer”这个词,就不要使用“client”。当领域或者目标行业已经存在通用术语时,开发人员就不应该再采用非通用术语或者自己造新词。

 

3.谨慎使用过长的名称

       如果类、接口、变量和方法的名称过长,那就说明这个实体的定义十分复杂。在给一个实体命名时,我们首先要考虑的是它的设计和用途,通过建立更具有针对性的类、接口、方法和变量来构成这些实体,并且给它们更简单有意义的名称。

 

4.不要使用只依赖大小写来区分的名字

       虽然Java编译器可以区分那些大小写不同的名字,但是人在阅读时是很难注意到差别的,这就很容易对读者造成误导。

比如,变量theSQLInputStream和变量theSqlInputStream是不应该出现在同一个作用域的。

 

常量命名

常量的每个单词均大写,单词之间使用下划线连接。用大写字母命名常量可以和其他非final型变量相区分开。

class Byte {
  public static final byte MAX_VALUE = 255;
  public static final byte MIN_VALUE = 0;
}

 

变量命名

(1)使用名词来命名变量,变量名中的第一个单词小写,其后的每一个单词的第一个字母大写。

       变量就是一个对象、事物,我们使用名称表示。大写能区分名词中的每一个单词,首字母小写则可以区分变量名和类名。

 

(2)集合引用名要使用复数形式

       对象集合的字段和变量的名字要使用集合里包含的对象类型的复数形式,这便于区分多值变量和单值变量。

Customer[] customers = new Customer[MAX_CUSTOMERS];

void addCustomer(int index,Customer customer) {
  this.customer[index] = customer;
}

Vector orderItems = new Vector();

void addOrderItems(OrdetItem orderItem) {
  this.orderItems.addElement(orderItem);
}

(3)为不重要的临时变量建立一套标准名称

       大多数变量的名字要使用完整的表述,但是也有很多经常出现的变量使用简写形式。

下面是几个比较常用的例子:

       字符--------c,d,e

       坐标--------x,y,z

       异常--------e

       图形--------g

       对象--------o

       流 ----------in,out

       字符串-----s

 

(4)字段、参数命名

我们在使用构造方法或者set方法给字段赋值时,应该为参数名和字段使用相同名称,在方法内部使用this关键字来区分局部变量和字段变量。

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

 

方法命名

(1)使用动词命名方法,方法名中的第一个单词小写,其后的每个单词的第一个字母大写。

方法表示动作,采用动词命名。大写可以把名字里的各个单词很明确的区分开,首字母小写则可以将方法调用和构造方法区分开。

class Account {
  private int balance;
  
  public Account(int balance) {
    this.balance = balance;
  }
  
  public void withdraw(int amount) {
    deposit(-1 * amount);
  }
  
  public void deposit(int amount) {
    this.balance += amount;
  }
}

(2)遵循JavaBeans中属性访问函数的方法的命名规范

JavaBeans规范为方法建立了一套命名规范,用来访问JavaBeans实现的属性。在任何类中定义方法都应该使用这些规范,无论是否实现了Bean。

JavaBean用is开头的方法公开boolean属性:

boolean isValid() {
  return this.isValid;
}

JavaBean用get开头的方法对其他属性进行访问:

string getName() {
  return this.name;
}

JavaBean用set开头的方法对属性进行写入操作:

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

 

类命名

       采用名词命名类,类名中的每个单词的第一个字母大写。类用来定义对象或者事物,应该采用名词形式。大写可以明显地区分名字中各个单词,首字母大写则可以区分变量名以及类名或者接口名。 

class CustomerAccount {
    ···

}

 

接口命名

       采用名词或者形容词命名接口,接口中的每个单词的第一个字母大写。接口描述一个对象的能力或者使声明对象能够提供的服务。

a.使用名词给作为服务声明的接口命名:

public interface ActionListener {
  public void actionPerformed(ActionEvent e);
}

b.使用形容词来为描述某种能力的接口命名:

public interface Runnable {
  public void run();
}

大多数的接口命名都是采用形容词,这些形容词由动词加上able或者ible后缀得来。更能表示接口是表示一种能力的本质含义。

 

包命名

(1)使用单独的小写动词作为每个包的根名

       包名里必须包含一个单独的小写词,能够清晰体现包的用途。包名也可以包含一个有实际意义的缩写,例如Java标准包的java.io。

 

(2)用你所在组织的域名的倒序小写的形式作为包名字的根限定词

例如,一个公司的域名为 weikanwave.com,该公司发布了一款名为server的服务器应用程序,那么该公司将该包命名为com.weikanwave.server。

 


强制性要求

1,组成:字母(a-zA-Z) 、数字(0-9) 、 下划线(_)、 美元符号($).

2,不能以数字开头;区分大小写;见名知意;不可关键字、保留字;

使用范式:

           1,类名和接口名单词的首字母大写,其他字母小写;如RunTime.

            2,变量名与方法名首单词全部小写,其他单词首字母大写,其他小写;如doCook();

            3,包名全小写;

           4,常量全部大写,单词间用_分割;如UP_DIRECTION;

实例:

      12abc_   不合法  数字不能开头

       _12abc    合法

       $ab12#    不合法  #号不属于标识符组成元素。

       abc@123   不合法  @号不属于标识符组成元素。

 


排版原则

缩进嵌套的代码

1、如果我们使用开发环境,则我们可以使用开发环境提供的缩进样式。但是如果我们是手写代码,该使用两个空格缩进。

2、块语句起始端的大括号应该放在引入块语句那一行的最后,结束端的大括号要独占一行,并且与引入嵌套语句那一行的第一个字母对齐。

我们日常使用的代码规范如下:

类定义:

内部类定义:

方法定义:

void method(int j) {
  ···
}

功能体定义:

for循环语句:
	for (int i = 0; i <= j; i++) {
	  ···
	}
if-else语句:
	if (j < 0) {
	  ···
	}
	else if ( j > 0) {
	  ···
	}
	else {
	  ···
	}
try, catch, finally块:
	try {
	  ···
	}
	catch {
	  ···
	}
	finally {
	  ···
	}
switch语句:
	switch (value) {
	  case 0:
	    ···
	    break;
	  default:
	    ···
	    break;
	}
while语句:
	while (a < b) {
	  ···
	}
do-while语句:
	do {
	  ···
	} while (a < b);

 

断开长句

尽管在窗口化的现代编辑器中,可以利用横向滚动条来阅读很长的单行代码。但是打印机对于超过它最大打印宽度的语句,就会把它们截断、换行或者打印在不同的页上。因此,要把每行代码的长度限制在打印环境所支持的最大宽度之内,这个值一般是80或者132个字符。

1、不要把多个语句放在同一行里以免超过最大可接受宽度。应该一条语句放置在一行里。

 //  这样写太长
double x = Math.random(); double y = Math.random();

//  应该一句占一行
double x = Math.random();
double y = Math.random();

2、如果一行代码中包含了复杂的表达式,就应该把它拆分为几个短小的子表达式,每个子表达式的运算结果存储在一个临时变量里,并且单独放置在一行。

//  这样的表达式太长
double length = Math.sqrt(Math.pow(Math.random(),2.0),Math.pow(Math.random(),2.0));

//  应该按下面这样拆分
double x = Math.pow(Math.random(),2.0);
double y = Math.pow(Math.random(),2.0);
double length = Math.sqrt(x + y);

 

使用空白

       空白就是页面上没有可见字符的区域。代码里如果空白太少就会不易阅读和理解,所以应该使用足够多的空白把方法、注释、代码块和表达式展示清楚。

1、以下情况使用单空白(也就是一个空格)来分隔:

(1)、右括号")"或者紧随其后的关键字、关键字和紧随其后的左括号"("或者"{"、右括号")"和紧随其后的左括号"{",

都要存在有一个空格,总而言之,括号和关键词之间有空格!

if (j < 0) {  //括号与花括号之间是有个空格的;
  ···
}
else if ( j > 0) {
  ···
}
else {
  ···
}

(2)、除了"."的左右不用空格外,其他的运算符都要用空格间隔开来。

double length = Math.sqrt(x * x + y * y);
double x = length > 0.0 ? (x / length) : x;

2、以下情况应该使用空行来分隔:

(1) 每个逻辑上独立的方法实现之间

void handleInfo(Message message) {

  DataInput content = message.getDataInput();
  int messageType = content.readInt();
  
  switch (messageType) {
    
    case warning:
      ...
      break;
      
    case error:
      ...
      break;
      
    default:
        ...
        break;
  }
}

(2) 定义类或者接口时,每个成员之间使用空行

public class Car {
  
  class InnerCar {
    ...
  }
  
   private Bar bar;
   
   Foo(Bar bar) {
     this.bar = bar;
   }
}

(3) 源文件中,每个类和接口的定义之间要使用空行

interface Paly {
  ...
}
  
public class Person implements Play {
  ...
}

 


 

java设计范式 原版.................... java设计范式 原版...................... 立即下载

相关推荐

静态时序分析(Static Timing Analysis, STA):简介及内容导航

静态时序分析(简称STA)是用来验证数字设计时序的技术之一,另外一种验证时序的方法是时序仿真,时序仿真可以同时验证功能和时序。“时序分析”这个术语就是用来指代“静态时序分析“或”时序仿真“这两种方法之一,简单来说,时序分析的目的就是为了解决设计中的各种时序问题。STA被称为静态的原因是其对于设计的分析是静态地执行的,并不依赖于施加在输入端口上的激励。相比之下,时序仿真则可以被视作动态地执行对设计的分析,具体过程描述如下:施加一组激励,观察在这组激励下电路行为是否符合要求,然后换一组激。

Starry__的博客 1987

Java三范式(原子性,唯一性,不可传递性)

数据库设计的三大范式是规范化表结构的重要准则:第一范式要求字段不可再分(如地址不应拆分);第二范式在满足第一范式基础上,要求非主属性完全依赖主键(多主键时需分表处理);第三范式在第二范式基础上,消除传递依赖(非主属性间不能存在依赖关系)。三大范式通过减少数据冗余和依赖关系,提高数据库的存储效率和数据一致性。

Hobzjldh的博客 908

量化交易——量化选股(多因子选股)

就是用过去的股票的收益率对多因子进行回归,得到一个回归方程,然后再把最新的因子值代入回归方程得到一个对未来股票收益的预判,然后再以此为依据进行选股。的方法是建立在市场无效或弱有效的前提之下,随着使用多因子选股模型的投资者数量的不断增加,有的因子会逐渐失效,而。就是根据各个因子的大小对股票进行打分,然后按照一定的权重加权得到一个总分,根据总分再对股票进行筛选。另一方面,一些因子可能在过去的市场环境下比较有效,而随着市场风格的改变,这些。波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的。

jiucaixiuyang的博客 1787

Java面向对象(一):编程范式

命令式编程和函数式编程

qq_42865964的博客 650

NSGA-III相关笔记

NSGA-III目录目的区别NSGA-III的算法流程非支配排序详解归一化详解 目录 NSGA-III基于matlab的实现 参考文献 1.An Evolutionary Many-Objective Optimization Algorithm Using Reference-point Based Non-dominated Sorting Approach,Part I: Solving P...

weixin_42555400的博客 1万+

Windows 环境下 OpenClaw 的安装与千问大模型配置

为了不占用 C 盘空间,重装系统也不丢失配置,本文详细记录了如何将 OpenClaw 安装在非系统盘,比如D 盘,并对接阿里云 通义千问大模型的全过程。主要是利用 NVM 和 npm 进行安装,方便后续一键升级,配置具有免费额度的Qwen API,这个只需要在阿里云百炼注册一个账号就能获得免费额度。

博客 6537

java范式

泛型是编译时期存在的当程序运行起来到JVM(运行)之后就没有泛型的概念了,所以在运行之后仍然不知道他是一个什么类型的数组就不能创建了并且其的擦除机制只是在编译使其间T变形成了object但在运行时期必须传入一个类型才能确认并且创建成功java的数组在编译时期必须确认是什么。类型范式的擦除机制会使T在编译时期变为Object类型,返回的Object数组里面,可能存放的是任何的数据类型,可能是String,可能是Person,运行的时 候,直接转给Integer类型的数组,编译器认为是不安全的。

zhimeng3的博客 671

.NET+Vue企业级RBAC权限平台:开箱即用的生产就绪方案

RBAC(基于角色的访问控制)是企业系统安全治理的基础模型,其核心在于将用户、角色与权限解耦,通过动态能力组合实现细粒度管控。在真实工程中,RBAC需突破静态角色限制,支持时间维度授权、前后端双重鉴权、行级数据范围控制等关键能力。本文聚焦于一套已落地金融、政务、制造等多行业的生产级实现——基于.NET Minimal API与Vue 3的前后端分离架构,提供菜单/按钮/接口/数据四层权限控制,内置滑动过期JWT、Redis权限缓存、动态路由加载与权限指令等开箱即用能力,显著降低权限配置与审计成本。

weixin_33326218的博客 274

数据库三范式

数据库三范式是什么?第一范式(1NF):字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式)数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段。第二范式(2NF):第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式...

264

AI Agent开发大全第一课-AI是什么以及如何使用AI

近年来,人工智能的迅猛发展引发了广泛的关注,尤其是“大模型”这一概念越来越深入人心。大模型,顾名思义,通常指的是那些拥有大量参数、能够处理复杂任务的机器学习模型。与传统小模型相比,大模型在数据处理、信息理解和生成等方面表现更加出色。为了理解为什么现在的AI被称为大模型,我们需要深入探讨几个关键因素。立角色是指在提示词中清晰地界定交互双方的身份。明确用户希望模型扮演的角色,可以帮助模型更准确地理解上下文和用户需求。

打造全国最全的AI Agent开发知识领域的博客 1406

科技与伦理的平衡点:人类计算的伦理

科技与伦理的平衡点:人类计算的伦理 关键词 科技与伦理 人类计算 隐私问题 道德决策自动化 公平性与偏见 法律与社会责任 摘要 本

AI天才研究院 1162

java常用范式

//提取一列 List<Integer> ids = list.stream().map(p -> p.getId()).collect(Collectors.toList()); String idStr = Joiner.on(",").join(ids); //一列数据合并成字符串 String permNames = Joiner.on(" ").skipNulls().join(role.getPerms().stream() .map(p -> p.getName())

daqinzl的专栏 924

收放卷伺服控制系统详细算法介绍(电子齿轮+张力PID卷绕轴控制功能块)

收放卷控制系统涉及的内容非常多,这里我们介绍全伺服系统利用电子齿轮指令实现主从轴的比例随动速度控制,收放卷控制算法介绍常用链接如下1、收放卷+排线控制收放卷+排线控制系统框图-优快云博客文章浏览阅读24次。1、收放卷前馈量计算FC收放卷前馈量计算FC(CODESYS ST源代码)-优快云博客文章浏览阅读16次。1、收放卷前馈量计算FC(博途PLC):收放卷前馈量计算FC(梯形图+SCL代码)-优快云博客文章浏览阅读534次。2、收放卷前馈量计算FC。

RXXW_Dor的博客 3120

编程语言的范式分类与多范式支持

1. 严格面向过程的语言代表语言:C核心特点代码以函数为基本单元,数据(变量、结构体)与操作(函数)分离。无类、对象、继承等 OOP 特性。示例c// 数据与函数分离 struct Point { int x;int y;p->y += dy;局限封装性差:结构体字段默认公开,需通过约定(如命名)模拟私有性。复用性低:无继承,代码复用依赖函数组合或宏。2. 严格面向对象的语言代表语言:Java核心特点万物皆对象:所有代码必须写在类中(包括main函数)。

2401_86928879的博客 1058

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

技术人的语言困境:命名、文档与编程范式如何塑造思维

在软件工程领域,语言不仅是沟通工具,更是塑造技术认知的核心框架。从概念层面看,编程语言和术语体系构成了开发者思考问题的基本范式,其原理在于语言通过词汇和语法限定了问题描述的粒度与视角。这种机制的技术价值在于能建立共享的心理模型,提升团队协作效率,但同时也可能成为思维创新的隐形边界。在实际应用场景中,变量命名、技术文档编写和编程范式的选择都深刻影响着开发者的设计思路与问题解决方式。本文聚焦于命名困难症、文档的固化效应以及编程范式的思维工具箱特性,探讨如何通过构建术语表、优化注释规范和进行范式体操等方法,实现从

weixin_34355559的博客 377

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【C语言】C编程的基本素养(编程范式)

本文是介绍在C语言编程中,对变量和函数的命名一般原则和建议,以及排版的一些例子。(PS:我不知道这种叫不叫“编程范式”,我只是希望每个开发者都严格要求自己写出风格较为统一的代码,方便他人阅读。)

极客-多重人格递归 1150

数学建模模型总结

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

python支持多种编程范式吗_聊聊编程范式

标签:编程语言有很多种流派和思想,有一些编程语言同时支持多种编程范式。静态类型编程范式采用静态类型编程范式的编程语言,其变量需要明确指定类型。代表语言:C,C++,Pascal,Objective-C,Java,C#,VB.NET,Swif,Golang。这样做的好处是:1、编译器可以在编译时就能找出类型错误。2、编译器编译时知道类型信息,就可以提高性能。这种范式认为,程序员肯定知道变量的类型,你...

weixin_39858124的博客 252

《冒号课堂:编程范式与OOP思想》笔记二

《冒号课堂:编程范式与OOP思想》笔记二 第三课 常用范式 超级范式,元编程 泛型编程:Generic Programming,GP GP基本思想:将算法与其作用的数据结构分离,并将后者尽可能泛化,最大限度地实现算法重用。以算法为起点和中心点。 函子:在范畴论中,函子是范畴间的一类映射。函子也可以解释为小范畴范畴内的态射。 STL有三要素:算法、容器和迭代器。算法使一系列切实有效的步骤;容器是数...

lbllol365的博客 405

Simula语言的编程范式

在计算机科学的发展历程中,编程语言作为其中的重要组成部分,影响着程序员的思维方式和程序的构建方式。Simula语言作为早期的编程语言之一,因其引入了面向对象编程的理念,而被誉为“面向对象编程之父”。本文将探讨Simula语言的编程范式、其历史背景以及对后续编程语言和软件开发领域的深远影响。

2501_90380142的博客 828

Ada语言的编程范式

在Ada语言中,包是一种定义了数据类型和子程序的模块。包分为两个部分:包声明(Specification)和包主体(Body)。包声明用于定义包的接口,而包主体则包含实现细节。在Ada中,类通过包的方式实现,数据和操作封装在一起,从而构成一个对象。这种设计有助于组织代码和实现模块化。任务是在Ada中实现并发的基本单位,它允许程序员定义独立的执行流。任务可以并行运行,适用于需要处理多个事件或操作的场景。

2501_90485754的博客 1168

SQL语言的编程范式

SQL是一种用于访问和操作关系数据库的语言,最早由IBM在1970年代开发。SQL可以用于创建、修改和查询数据库的结构及数据。

2401_90031958的博客 929

编程范式之命令式与函数式

文章出自个人博客https://knightyun.github.io/2019/01/27/programming-paradigm,转载请申明 文章目录命令式编程(Imperative)函数式编程/声明式(Functional/Declarative)函数合成函数柯理化(Currying) 很多语言是聚范式/多重范式编程,即支持多在编程范式,如面向对象(Java),面向过程(C语言),泛...

knight-yun的博客 893

Scala---多范式的编程语言

一、Scala简介 1.Scala是一门多范式的编程语言,即可伸缩的语言。 可伸缩的语言的英语翻译是:Scalable Language,简称为Scala。它是一门多范式的编程语言,一种类似java的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 2. Scala源代码会被编译成java字节码,然后运行在JVM上,并且可以调用现有的Java类库,能够实现两种语言的无缝连接。 二、S...

孤独の根号三 1589

《Java、Python、C++与C#的对话多语言编程范式下的核心特性与实践探索》

在处理并发任务时,Java的线程模型与流(Stream)API结合使用,既可保证线程安全,又可实现高阶函数式的数据处理。C# 9.0通过记录类型(Record Types)和顶级语句(Top-Level Statements)等语法改进,在保持OOP核心定位的同时,增强函数式编程的支持。更复杂的案例中,开发者可编写装饰器组合实现跨范式功能:通过对象创建时自动应用装饰器,既能保持OOP封装性,又可融入函数式响应式编程(Reactive Programming)的非阻塞特性。

qgHxjwrv的博客 343

深度对比 Python 与 Java 的区别(一)

深入对比 Python 与Java 的区别,包括两种语言的发展历程、Hello World、语法特点、执行效率以及 各自的执行机制(PVM与JVM)。

Ergou's Space 2万+

编程范式01

一名软件工程师的4个境界:学会--->会学--->会用---->被用 知识之上是思想,思想之上是精神 得行而忘意,无异舍本逐末;得意而忘性,方能游刃有余。 编程范式:是编程的基本风格和编程思想的体现。有哪些编程范式呢: 第一种、命令式,由若干行动指令组成的有序列表,并且用变量存储数据,用语句执行命令; 第二种、结构化,主要思想是宏观上提倡‘自顶向下’的设计,外观上采用顺序、选择以及循环的逻辑结构,摈弃或限制goto语句,保证程序的结构清晰、易于调试和维护。...

奥丁的博客 294
上一篇: 【C语言】C编程的基本素养(编程范式)
下一篇: 一个差生,为什么你学得如此慢又低效?
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值