我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java API的设计清单是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java API的设计清单是什么

今天给大家介绍一下Java API的设计清单是什么。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。

在设计Java API的时候总是有很多不同的规范和考量。与任何复杂的事物一样,这项工作往往就是在考验我们思考的缜密程度。就像飞行员起飞前的检查清单,这张清单将帮助软件设计者在设计Java API的过程中回忆起那些明确的或者不明确的规范。

我们还准备了一些前后比对的例子来展示这个列表如何帮助你理清设计需求,找出错误,识别糟糕的设计实践以及如何寻找改进的时机。

这个清单使用了如下的语言规范:

要 - 表示必要的设计

建议 - 表示在几个最好的设计中选择一个

考虑 - 表示一个可能的设计上的改进

避免 - 表示一个设计上的缺陷

不要 - 表示一个设计上的错误

1. 包设计清单

1.1. 共通

  • 1.1.    建议把API和实现放入不同的包

  • 1.2.    建议把API放进上层包,而把实现放进下层包

  • 1.3.    考虑把一组大型的API分拆进不同的包

  • 1.4.    考虑把API和实现打包进不同的jar包

  • 1.5.    避免API的实现类之间的内部依赖

  • 1.6.    避免把API分拆了太细

  • 1.7.    避免把公共实现类放到API的包中

  • 1.8.    不要在调用者和实现类之间建立依赖

  • 1.9.    不要把没有关系的API放进同一个包

  • 1.10.  不要把API和SPI(service provider interface)放进一个包(注:两者不同可以查看这个页面http://stackoverflow.com/questions/2954372/difference-between-spi-and-api )

  • 1.11.  不要移动或者重命名一个已经发布的公共API

1.2. 命名

  • 1.    (一级)包名以公司(或者组织)的根命名空间来命名

  • 2.    使用一个稳定的产品名称或者一个产品系列的名称作为包的二级名称

  •    使用API名称作为包名的(三级名称)结尾

  •    考虑把仅包含实现的包的名称中包含"internal"这个词(注:似乎“impl”更常见一些)

  •    避免使用组合起来的名称

  •    避免包名和包内的类名使用同样的名称

  •    避免在包名称中使用“api”这个词

  •    不要使用营销,计划,组织单元(部门)和地理名称

  •    不要在包名中使用大写字母

1.3. 文档

  • 1.    为每一个包提供一个package.html

  • 2.    遵循标准的javadoc的规范

  • 3.    在API的开始处用一句短小的话来概括(描述)

  •    提供足够多的细节来帮助判断是否需要使用和如何使用该API

  •    指出该API的入口(主要的类或者方法)

  •    包含覆盖主要的,基本功能演示的样例代码

  •    包含一个指向开发者指南的超链接

  •    包含一个指向手册的超链接

  •    指出相关的API集合

  •  包含API的版本号

  •  用 @deprecated 标记出不再使用的API版本

  •  考虑添加一个版权声明

  •  避免过长的包概述

  •  不要在发布的javadoc中包含实现相关的包

2. 类型设计清单(这里的“类型”个人理解为一组Api)

2.1. 共通

  • 1.1.    确保每种(设计的)类型都有单一明确的目的

  • 1.2.    确保每种类型代表了(业务)领域的概念,而不是为了(技术上)的抽象

  • 1.3.    限制类型的总数量

  • 1.4.    限制类型的大小

  • 1.5.    设计相关的类型时保持和原有的类型的一致性

  • 1.6.    建议为多种public的类型提供多种(private)的实现

  • 1.7.    建议接口的实现类和继承关系的类应该在行为上保持一致性

  • 1.8.    建议用抽象类而不是接口解耦Api的实现

  • 1.9.    建议使用枚举而不是常量

  • 1.10.  考虑使用泛型

  • 1.11.  考虑在泛型参数上增加约束

  • 1.12.  考虑使用接口来实现多继承的效果

  • 1.13.  避免为使用者的扩展(需求)进行设计

  • 1.14.  避免深度的继承层次

  • 1.15.  不要使用public内嵌的类型

  • 1.16.  不要申明public和protected的变量

  • 1.17.  不要把实现的继承关系暴露给使用者

2.2. 命名

  • 2.1.    使用名词或者名词词组

  • 2.2.    使用PascalCasing(驼峰命名法的别称详见http://en.wikipedia.org/wiki/CamelCase )

  • 2.3.    缩写仅第一个首字母大写

  • 2.4.    为类型的实际作用使用精确的名称命名

  • 2.5.    为最常用的类型准备最短最容易记忆的名称

  • 2.6.    所有异常都以“Exception”结尾

  • 2.7.    使用名词的单数(比如用Color而不用Colors)来命名枚举类型

  • 2.8.    考虑较长的名称

  • 2.9.    考虑派生类用基类的名称结尾

  • 2.10.  考虑为抽象类名称使用“Abstract”开头

  • 2.11.  避免使用缩略语

  • 2.12.  避免太通用的名词

  • 2.13.  避免同义词

  • 2.14.  避免在相关的Api中使用类型的名称

  • 2.15.  不要使用仅大小写不同的名称

  • 2.16.  不要使用前缀

  • 2.17.  不要以“I”作为接口的名称开头

  • 2.18.  不要(重复)使用Java核心包中的名称

2.3. 类

  • 1.    最小化实现使用的依赖

  • 2.    先列出public方法

  • 3.    申明实现方法为private(这里是笔误吗?)

  •    为一个public抽象类定义至少一个public的shi

  •    为基本的使用情况提供足够的缺省实现

  •    设计基本上不变的类

  •    把无状态,访问器,扩展(mutator个人理解为多种参数形式的方法)方法集合到一起

  •    把扩展方法的数量控制到最少

  •    考虑设计一个默认的无参的构造方法

  •  考虑重写equal,hashCode方法

  •  考虑实现Comparable接口

  •  考虑实现Serializable接口

  •  考虑使类可以容易的扩展

  •  考虑申明类为final

  •  考虑为类的实例化提供一个public的构造方法

  •  考虑使用自定义的类型来增强类的不可变性

  •  考虑设计不可变的类

  •  避免静态类

  •  避免使用Cloneable

  •  不要向静态类中添加实例duixi

  •  不要为使用者不应扩展的public抽象类提供public的构造方法

  •  不要滥用初始化

2.4. 接口

  • 1.    为每一个public接口提供至少一个实现类

  • 2.    为每一个public接口设计至少一个消费方法

  • 3.    不要对一个已经发布的public接口添加新的方法

  • 4.    不要使用标记接口(标记接口详见http://en.wikipedia.org/wiki/Marker_interface_pattern )

  •    不要把public接口设计成常量的容器(这个实在很常见啊……)

2.5. 枚举

  • 1.    考虑为枚举类型指定一个0值(“NONE”或者“Unspecialized”等等)

  • 2.    避免只有一个值的枚举

  • 3.    不要使用枚举实现开放式的值集合

  • 4.    不要为将来可能增加的值设计枚举

  • 5.    不要为已经发布的版本增加新的枚举值

2.6. 异常

  • 1.    确保自定义的异常可以被序列化

  • 2.    考虑为每种类型定义一个不同的异常

  • 3.    考虑为代码访问提供更多的异常信息

  • 4.    避免深层的异常继承

  • 5.    不要从Exception和RuntimeException以外的类派生自定义异常

  • 6.    不要直接从Throwable派生异常

  •    不要在异常信息内包含敏感信息

2.7. 文档

  • 1.    为每种类型(的Api)配上概述

  • 2.    遵循标准Javadoc的约定

  • 3.    每种类型开头以一句短小的话概述

  • 4.    为是否使用以及如何使用该类型提供足够的细节来帮助做决定

  • 5.    解释如何实例化一个类型

  • 6.    为一个类型的主要的使用情景提供样例代码

  • 7.    包含指向到开发指南的链接

  •    包含指向手册的链接

  •    显示相关的类型

  •  用@deprecated标签申明过时的类型

  •  文档类具有不可变性

  •  避免冗长的类概述

  •  不要为私有方法生成Javadoc

3. 方法设计清单

3.1. 共通

  • 1.1.    确保每个方法实现一个目的

  • 1.2.    确保相关的方法都是一个粒度级别的

  • 1.3.    确保没有混合调用方法的公共代码

  • 1.4.    使所有方法的调用具有原子性(原子性:http://jiangyongyuan.iteye.com/blog/364010)

  • 1.5.    设计protected方法时要像public方法一样慎重

  • 1.6.    限制扩展方法的数量

  • 1.7.    设计扩展方法需要具有较强的稳定性

  • 1.8.    建议为一系列重载的方法设计一个泛型的方法

  • 1.9.    考虑使用泛型方法

  • 1.10.  考虑设计方法对,即两个方法的作用是相反的

  • 1.11.  避免“helper”方法

  • 1.12.  避免长时间执行的方法

  • 1.13.  避免调用者在普通使用中需要手动写循环

  • 1.14.  避免可选的参数影响方法的行为

  • 1.15.  避免不可重复调用的方法

  • 1.16.  不要删除一个已经发布的方法

  • 1.17.  不要在没有提供替换方法前把一个已经发布的方法标记为过时

  • 1.18.  不要修改一个已经发布的方法的签名

  • 1.19.  不要修改一个已经发布的方法的可观测行为(也许指的是输出之类)

  • 1.20.  不要增加一个已经发布方法的调用条件

  • 1.21.  不要减少一个已经发布方法的调用结果

  • 1.22.  不要为已经发布的public接口新增方法

  • 1.23.  不要为已经发布的Api新增重载

3.2. 命名

  • 2.1.    用给力的,有表达力的动词作为名称起始

  • 2.2.    使用驼峰命名法(好奇怪,前面写的是PascalNaming)

  • 2.3.    为JavaBean的私有属性预留“get”“set”“is”等访问方法

  • 2.4.    使用对调用者熟悉的词语

  • 2.5.    尽量使用英语口语

  • 2.6.    避免使用缩略语

  • 2.7.    避免使用一般的动词

  • 2.8.    避免同义词

  • 2.9.    不要使用“黑话”

  • 2.10.  不要依靠参数的名称和类型判断方法的意义

3.3. 参数

  • 3.1.    为参数选择最合适的类型

  • 3.2.    在相关方法的调用中对参数为null值的处理保持一致性

  • 3.3.    在相关方法中参数的名称,类型和顺序需要保持一致

  • 3.4.    在参数列表中把输出的参数放到输入参数之后

  • 3.5.    为重载的方法省略常用的默认参数以提供一个较短的参数列表

  • 3.6.    在无关的类型中为相同语义的操作提供重载方法

  • 3.7.    建议使用接口而不是具体类作为参数

  • 3.8.    建议使用集合而不是数组作为参数和返回值

  • 3.9.    建议使用一般集合而不是原始(无类型)集合

  • 3.10.  建议使用枚举而不是Boolean或者Integer作为参数

  • 3.11.  建议把单个的参数放到集合或者数组参数之前

  • 3.12.  建议把自定义类型的参数放大Java标准类型参数之前

  • 3.13.  建议把对象类型的参数方法值类型的参数之前

  • 3.14.  建议使用接口而不是具体类作为返回值

  • 3.15.  建议把空的集合而不是null作为返回值

  • 3.16.  建议把返回值设计成可以作为其他方法的合法输入参数

  • 3.17.  考虑为不可变参数设计一个副本

  • 3.18.  考虑在内部存储弱引用的对象

  • 3.19.  避免参数数量变更

  • 3.20.  避免参数长度太长(超过3个)

  • 3.21.  避免连续的同类型的参数

  • 3.22.  避免用作输出或者输入输出的参数

  • 3.23.  避免方法重载

  • 3.24.  避免参数类型暴露实现细节

  • 3.25.  避免boolean参数

  • 3.26.  避免返回null

  • 3.27.  除了Java核心Api,避免把类型作为不相关的Api的返回值

  • 3.28.  避免把可变的内部对象作为返回值来引用

  • 3.29.  不要把预先设置的常量作为整型值参数使用

  • 3.30.  不要为将来的(扩展设计)考虑预留参数

  • 3.31.  不要在重载方法中改变参数的名称的顺序

3.4. 异常处理

  • 1.    只有在异常情况下才抛出异常

  • 2.    只需要为可恢复的错误抛出已确认的异常

  • 3.    为了通知Api使用错误而抛出运行时异常

  • 4.    在适当的抽象层次抛出异常

  •    进行运行时预置条件的检查

  •    为一个被不能为null的参数抛出空指针异常

  •    为一个除为null以外异常值的参数排除非法参数异常

  •    为一个错误上下文环境中的方法调用抛出非法状态异常

  •    在错误信息中显示出参数的预置条件

  •  确保失败的方法调用不会产生单向的后果

  •  为回调方法中的禁止使用的Api提供运行时检查

  •  建议优先使用Java标准异常

  •  建议提供抛出异常的条件的查询方法

3.5. 重写

  • 1.    使用@Override注解

  • 2.    维持或弱化预置条件

  • 3.    维持或者加强后置条件(不好翻译,大概output+effect的意思)

  • 4.    维持或者加强不可变性

  • 5.    不要抛出新增的运行时异常

  •    不要更改方法的类型(无状态,访问器或者扩展方法等)

3.6. 构造方法

  • 1.    最小化构造方法中的工作

  • 2.    为所有的属性设置合理的默认值

  • 3.    仅把构造方法的参数作为一种设置参数的快捷方法

  • 4.    校验构造方法的参数

  • 5.    以参数相应的属性为其命名

  • 6.    当提供了多个构造方法时,遵循指南对其进行重载

  •    建议使用构造方法而不是静态的工厂方法

  •    考虑使用无参的构造方法

  •    如果不是总需要新的实例,考虑使用静态的工厂方法

  •  如果你需要在运行时决定一个合适的类型,考虑使用静态的工厂方法

  •  如果你需要访问外部的资源,考虑使用静态的工厂方法

  •  当面临非常多的参数的时候,考虑使用生成器(builder)

  •  当需要回避直接实例化类的时候使用考虑private的构造函数

  •  避免创建非必需的对象

  •  避免finalizer

  •  不要从无参的构造方法中抛出异常

  •  不要向一个已经发布的类中添加显示的构造方法

3.7. Setters和getters

  • 1.    以get开头命名一个返回值不为boolean的访问属性的方法

  • 2.    以is,can开头命名一个返回值为boolean的访问属性的方法

  • 3.    以set开头命名一个更新本地变量的方法

  • 4.    校验setter方法的参数

  • 5.    最小化getter和setter方法的工作

  • 6.    考虑从一个getter方法中返回不可变的集合

  • 7.    考虑实现一个private接口的集合替代public的集合属性

  •    考虑只读的属性

  •    设置可变类型的属性时考虑Defensive Copy(Defensive Copy详见:http://www.javapractices.com/topic/TopicAction.do?Id=15 )

  •  当返回可变类型的属性时考虑Defensive Copy

  •  getter方法避免返回数组

  •  避免根据方法内信息无法完成的校验

  •  不要从getter方法中抛出异常

  •  不要设计只能set的属性方法 (仅有public的setter而没有public的getter)

  •  不要依赖属性设置的顺序

3.8. 回调

  • 1.    设计时使用最严密的预置条件

  • 2.    设计时使用最弱的后置条件

  • 3.    考虑传递引用对象的方法中把回调接口作为第一个参数

  • 4.    避免有返回值的回调方法

3.9. 文档

  • 1.    为每个方法提供Javadoc注释

  • 2.    遵循标准的Javadoc约定

  • 3.    每个方法以一句短小的话作为概述

  • 4.    申明相关的方法

  • 5.    用@deprecated标签申明过时的类型

  • 6.    显示所有过时方法的替换方法

  • 7.    避免冗长的zhus

  • 8.    包含常用的使用模式

  • 9.    (如果允许的话)包含null值的确切含义

  •  包含方法的类型 (无状态,访问器或者扩展)

  •  包含方法的预置条件

  •  包含算法实现的性能特征

  •  包含远程方法调用

  •  包含访问外部资源的方法

  •  包含哪些API可以在回调中使用

  •  考虑为了描述方法的行为而包含单元测试

以上就是Java API的设计清单是什么的全部内容了,更多与Java API的设计清单是什么相关的内容可以搜索编程网之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java API的设计清单是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java API的设计清单是什么

今天给大家介绍一下Java API的设计清单是什么。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。在设计Java API的时候总是有很多不同的规范和考量。与任何
2023-06-17

java中的api是什么

什么是API?API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。JAVA API包
java中的api是什么
2021-07-26

SAP CRM Relationship API设计原理是什么呢

SAP CRM Relationship API设计原理是什么呢,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。与settype不同,关系的元数据表中并没有维护专用的读取功能模块
2023-06-04

Java中什么是设计模式

这篇文章给大家介绍Java中什么是设计模式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型。
2023-06-14

Java泛型的设计方法是什么

这篇文章主要讲解了“Java泛型的设计方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java泛型的设计方法是什么”吧!引言泛型是Java中一个非常重要的知识点,在Java集合类框架
2023-06-17

java中的时间API是什么

这篇文章主要介绍“java中的时间API是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java中的时间API是什么”文章能帮助大家解决问题。1、Clock类可用于访问当前日期和时间。Clock
2023-06-30

java类设计的基本原则是什么

Java类设计的基本原则包括:单一职责原则(Single Responsibility Principle,SRP):一个类应该只有一个责任,即一个类应该只有一个引起它变化的原因。开放封闭原则(Open Closed Principle,O
2023-10-27

JAVA性能设计方法是什么

本篇内容介绍了“JAVA性能设计方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  概要  许多通常的 Java 性能问题都起源于在
2023-06-03

java八大设计模式是什么

Java八大设计模式是指GOF(Gang of Four)提出的23种设计模式中的一部分,这些设计模式可以帮助开发者解决在软件设计过程中常见的问题。其中八种设计模式是指常用且重要的设计模式,它们分别是:1. 单例模式(Singleton P
2023-08-31

Java Socket线程的设计原理是什么

这篇文章主要讲解了“Java Socket线程的设计原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java Socket线程的设计原理是什么”吧!Java Socket线程我们经常
2023-06-17

java清空map的方法是什么

要清空一个Java的Map,可以使用以下两种方法:1. 使用Map的clear()方法:使用该方法将Map中的所有键值对清除。示例代码:```javaMap map = new HashMap();map.put("key1", 1);ma
2023-09-16

Java并发代码设计的步骤是什么

这篇文章主要介绍“Java并发代码设计的步骤是什么”,在日常操作中,相信很多人在Java并发代码设计的步骤是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java并发代码设计的步骤是什么”的疑惑有所帮助!
2023-06-17

java设计模式的策略模式是什么

这篇文章主要介绍“java设计模式的策略模式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java设计模式的策略模式是什么”文章能帮助大家解决问题。策略模式亦称:Strategy意图策略模式是
2023-07-02

Java设计模式中单件模式有什么用

小编给大家分享一下Java设计模式中单件模式有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!定义单件模式确保一个类只有一个实例,并提供一个全局访问点Java单件模式经典单件模式的实现public class Sing
2023-06-25

Java设计模式的建造者模式是什么

这篇文章主要介绍了Java设计模式的建造者模式是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java设计模式的建造者模式是什么文章都会有所收获,下面我们一起来看看吧。1、什么是建造者模式?我们知道在软件开
2023-06-29

Java设计模式六大原则是什么

这篇文章主要讲解了“Java设计模式六大原则是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java设计模式六大原则是什么”吧!1.单一职责原则单一职责定义一个类只负责一个功能领域中的相
2023-06-02

Java的单例模式是什么

单例(Singleton)模式是Java中最简单的设计模式之一。这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。 (推荐学习:java课程)这种模式涉及一个类,它负责创建一个对象,同时确保只创建一个对象。这个类
Java的单例模式是什么
2015-11-05

Java内部类在GUI设计中的作用是什么

这篇文章主要讲解了“Java内部类在GUI设计中的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java内部类在GUI设计中的作用是什么”吧!Java内部类其实在J2EE编程中使用
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录