java错误代码典型案例_Java代码中的典型错误

java错误代码典型案例

该页面包含在与我一起工作的人的Java代码中看到的最典型的错误。 静态分析(出于明显的原因,我们使用查询无法捕获所有错误,这就是为什么我决定在此处列出所有错误的原因。

如果您要在此处添加其他内容,请告诉我,我们将竭诚为您服务。

列出的所有错误一般都与面向对象的编程有关,特别是与Java有关。

类名

阅读这段简短的“什么是对象?” 文章。 您的班级应该是没有“验证者”,“控制器”,“经理”等的现实生活实体的抽象。如果您的班级名称以“ -er”结尾,那么这是一个错误的设计 。

而且,当然,公用事业类是反模式,如StringUtilsFileUtils ,并IOUtils来自Apache的。 以上是糟糕设计的完美示例。 阅读此后续文章: 实用程序类的OOP替代 。

当然,切勿添加后缀或前缀来区分接口和类 。 例如,所有这些名称都非常错误: IRecordIfaceEmployeeRecordInterface 。 通常,接口名称是真实实体的名称,而类名称应说明其实现细节。 如果没有关于实现的特定说明,请将其命名为Default, Simple或类似名称。 例如:

class SimpleUser implements User {};
class DefaultRecord implements Record {};
class Suffixed implements Name {};
class Validated implements Content {};

方法名称

方法可以返回值,也可以返回void 。 如果一个方法返回了一些东西,那么它的名称应该说明它返回的内容 ,例如(永远不要使用get前缀):

boolean isValid(String name);
String content();
int ageOf(File file);

如果返回void,则其名称应说明其作用 。 例如:

void save(File file);
void process(Work work);
void append(File file, String line);

刚才提到的规则只有一个例外-JUnit的测试方法。 它们在下面解释。

测试方法名称

JUnit测试中的方法名称应创建为不带空格的英语句子。 通过示例更容易解释:

/*** HttpRequest can return its content in Unicode.* @throws Exception If test fails*/
public void returnsItsContentInUnicode() throws Exception {
}

在JavaDoc的第一句中以要测试的类的名称开头,然后是can这一点很重要。 因此,您的第一句话应始终类似于“某人可以做某事”。

方法名称将声明完全相同,但没有主题。 如果在方法名称的开头添加一个主题,则应该得到完整的英语句子,如上例所示:“ HttpRequest以unicode返回其内容”。

注意测试方法不是以can开头的,只有JavaDoc注释以can开头。 此外,方法名称不应以动词开头。

始终将测试方法声明为throwing Exception是一个好习惯。

变量名

避免使用变量的复合名称,例如timeOfDayfirstItemhttpRequest 。 我的意思是:类变量和方法内变量。 变量名应足够长,以免在可见性范围内产生歧义,但如果可能,则不要太长。 名称应为单数或复数形式的名词,或适当的缩写。 例如:

List<String> names;
void sendThroughProxy(File file, Protocol proto);
private File content;
public HttpRequest request;

有时,如果构造函数将传入数据保存在实例化的对象中,则构造函数参数和类内属性之间可能会发生冲突。 在这种情况下,我建议通过删除元音来创建缩写(请参阅USPS如何缩写街道名称 )。

另一个例子:

public class Message {private String recipient;public Message(String rcpt) {this.recipient = rcpt;}
}

在许多情况下,可以通过读取变量的类名来确定变量名称的最佳提示。 只需写一个小写字母,就可以了:

File file;
User user;
Branch branch;

但是, 永远不要对原始类型(例如Integer numberString string

当存在多个具有不同特征的变量时,也可以使用形容词。 例如:

String contact(String left, String right);

建设者

没有例外,应该只有一个构造函数将数据存储在对象变量中。 所有其他构造函数都应使用不同的参数来调用此函数。 例如:

public class Server {private String address;public Server(String uri) {this.address = uri;}public Server(URI uri) {this(uri.toString());}
}

一次性变量

不惜一切代价避免一次性变量。 “一次性”是指仅使用一次的变量。 像这个例子:

String name = "data.txt";
return new File(name);

上面的变量仅使用一次,代码应重构为:

return new File("data.txt");

有时,在极少数情况下(主要是由于格式更好),可以使用一次性变量。 但是,请尽一切可能避免这种情况。

例外情况

不用说,您永远不要吞下异常,而应让它们冒出尽可能多的泡沫。 私有方法应始终允许检查的异常消失。

切勿将异常用于流量控制。 例如,此代码是错误的:

int size;
try {size = this.fileSize();
} catch (IOException ex) {size = 0;
}

说真的,如果那个IOException提示“磁盘已满”怎么办? 您是否仍将假定文件的大小为零并继续前进?

缩进

对于缩进,主要规则是括号应在行的结尾或在同一行上闭合(反向规则适用于闭合括号)。 例如,以下内容是不正确的,因为第一个方括号未在同一行上闭合并且其后有符号。 第二个支架也有麻烦,因为它前面有符号并且没有在同一行上打开:

final File file = new File(directory,"file.txt");

正确的缩进应如下所示:

StringUtils.join(Arrays.asList("first line","second line",StringUtils.join(Arrays.asList("a", "b"))),"separator"
);

缩进的第二个重要原则是,您应将一行尽可能多地放在一行中-不得超过80个字符。 上面的示例无效,因为可以对其进行压缩:

StringUtils.join(Arrays.asList("first line", "second line",StringUtils.join(Arrays.asList("a", "b"))),"separator"
);

冗余常数

当您想在类方法之间共享信息时,应使用类常量,并且此信息是您的类的特征(!)。 不要使用常量来替换字符串或数字文字,这是非常糟糕的做法,会导致代码污染。 常量(与OOP中的任何对象一样)在现实世界中应该具有含义。 这些常量在现实世界中具有什么含义:

class Document {private static final String D_LETTER = "D"; // bad practiceprivate static final String EXTENSION = ".doc"; // good practice
}

另一个典型的错误是在单元测试中使用常量,以避免测试方法中重复的字符串/数字文字。 不要这样! 每种测试方法都应使用自己的一组输入值。

在每种新的测试方法中使用新的文本和数字。 他们是独立的。 那么,为什么它们必须共享相同的输入常量?

测试数据耦合

这是测试方法中数据耦合的示例:

User user = new User("Jeff");
// maybe some other code here
MatcherAssert.assertThat(user.name(), Matchers.equalTo("Jeff"));

在最后一行,我们将"Jeff"与第一行中的相同字符串文字相结合。 如果几个月后某人想要更改第三行的值,则他/她必须花费额外的时间来查找在同一方法中还使用"Jeff"地方。

为了避免这种数据耦合,您应该引入一个变量。

相关文章

您可能还会发现以下有趣的帖子:

  • 为什么NULL是错误的?
  • 对象应该是不可变的
  • 实用程序类的OOP替代
  • 避免字符串串联
  • 简单的Java SSH客户端

翻译自: https://www.javacodegeeks.com/2014/09/typical-mistakes-in-java-code.html

java错误代码典型案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tinymce vue 部分工具不显示_tinymce-vue使用问题及解决记录

一、本地图片上传&#xff1a;1.转成base64&#xff0c;转换后的字符粘贴到notpadd中看了下&#xff0c;有近20万个字符&#xff0c;所以直接没考虑2.选择图片后调用后台方法传到服务器&#xff0c;保存后返回一个网络地址&#xff0c;传入success的回调方法&#xff0c;通过网…

清洁单元测试

使用JUnit和一些模拟库编写“单元测试”测试很容易。 即使测试甚至不是单元测试并提供可疑的价值&#xff0c;它们也可能产生使某些涉众满意的代码覆盖范围。 编写单元测试&#xff08;在理论上是单元测试&#xff0c;但比基础代码更复杂&#xff09;因此也很容易编写&#xff…

谷歌发布android+8.2,谷歌Pixel 2代三款新机齐曝光:骁龙835+Android 8.0

随着5月份谷歌I/O大会的临近&#xff0c;关于Android O(安卓8.0)和Pixel手机的消息逐渐多了起来。据外媒报道&#xff0c; Android Open Source Project的代码表中确认&#xff0c;三款Pixel新机搭载的都是MSM8998芯片&#xff0c;也就是骁龙835。目前&#xff0c;Pixel 2的代号…

怎么停止skywalking_Skywalking部署常见问题以及注意事项

Skywalking部署常见问题以及注意事项IntroSkyWalking 创建与2015年&#xff0c;提供分布式追踪功能。从5.x开始&#xff0c;项目进化为一个完成功能的Application Performance Management系统。他被用于追踪、监控和诊断分布式系统&#xff0c;特别是使用微服务架构&#xff0c…

akka的介绍_Akka笔记–演员介绍

akka的介绍过去做过多线程的任何人都不会否认管理多线程应用程序有多么艰辛和痛苦。 我说管理是因为它开始很简单&#xff0c;一旦您开始看到性能改进&#xff0c;它就会变得非常有趣。 但是&#xff0c;当您发现没有一种简单的方法可以从子任务中的错误或难以发现的僵尸错误中…

HTML语言name,HTML a 标签的 name 属性

延伸阅读&#xff1a;使用 name 属性还是 id 属性&#xff1f;在 HTML 4.0 之前的版本中&#xff0c;只有使用 标签的 name 属性才能创建片段标识符。随着 HTML 4.0 中 id 属性的出现&#xff0c;所有 HTML 或 XHTML 元素都可以是片段标识符。这是因为 id 标识符几乎可以用在所…

使用模拟进行测试

如果使用正确的方法&#xff0c;模拟对象将非常有用。 我在需要驱动软件开发使用的帖子中分享了一些使用Mock Objects的经验。 在这篇文章中&#xff0c;我分享了两件事 –使用模拟进行基于合同的测试。 –用于组织模拟代码的模式。 基于合同的测试 让我们以正在构建汇款服…

hazelcast_Hazelcast的MapLoader陷阱

hazelcastHazelcast提供的核心数据结构之一是IMap<K, V> &#xff0c;它扩展了java.util.concurrent.ConcurrentMap &#xff0c;它基本上是一个分布式地图&#xff0c;通常用作缓存。 您可以将此类地图配置为使用自定义MapLoader<K, V> -每次尝试从该地图&#xf…

html ul左侧浮动,UL里的LI元素左浮动层一行显示时使其居中的方法

在制作页面是&#xff0c;li浮动是很常用的&#xff0c;一般情况也不用其居中&#xff0c;但有时&#xff0c;其特殊原因需要居中&#xff0c;这是就有点犯难了&#xff0c;这里有了一个很好的解决方法&#xff0c;主要是用了相对定位的原理。在ul外报一层&#xff0c;使其相对…

aws s3 獲取所有文件_AWS SA associate 证书考试学习记录-EBS,S3,EFS比较

我们的目标&#xff0c;就是花最少的时间&#xff0c;学到最多的东西&#xff1a;-&#xff09;在AWS中&#xff0c;可以选择的存储服务很多&#xff0c;纷繁复杂&#xff0c;新手根本弄不清楚选择哪个。因为做为一个云架构师&#xff0c;你并不是让你的产品能用就够了&#xf…

ios调用restful接口_做iOS上最好的REST API测试App

对于Web开发者和移动应用开发者来说&#xff0c;少不了和REST API打交道。何为REST API&#xff0c;维基百科是这么解释的(https://zh.wikipedia.org/wiki/REST)REST(英文&#xff1a;Representational State Transfer)是Roy Thomas Fielding博士于2000年在他的博士论文中提出来…

Java 14:记录

Java 14是在几周前问世的&#xff0c;它引入了Record类型&#xff0c;它是一个不变的数据载体类&#xff0c;旨在容纳一组固定的字段。 请注意&#xff0c;这是预览语言功能 &#xff0c;这意味着必须使用--enable-preview标志在Java编译器和运行时中显式启用它。 我将直接介绍…

html设置顶部对齐,HTML / CSS文本从div顶部对齐

首先&#xff0c;你需要修复你的CSS选择器 .你可以通过这种方式t write all those id .#content #main #services只需选择1个元素和他的孩子 .例如&#xff0c;如果你测试它&#xff0c;它将适用于你&#xff1a;#services .langelis .txt {width: 440px;height: auto;float: l…

java与java ee_计划Java EE 7批处理作业

java与java eeJava EE 7添加了使用JSR 352以标准方式执行批处理作业的功能。 <job id"myJob" xmlns"http://xmlns.jcp.org/xml/ns/javaee" version"1.0"><step id"myStep"><chunk item-count"3"><rea…

html5 video 播放状态,10分钟了解HTML5的Video标签属性、方法和事件

标签的属性src &#xff1a;视频的属性poster&#xff1a;视频封面&#xff0c;没有播放时显示的图片preload&#xff1a;预加载autoplay&#xff1a;自动播放loop&#xff1a;循环播放controls&#xff1a;浏览器自带的控制条width&#xff1a;视频宽度height&#xff1a;视频…

hot编码 字符one_One Hot编码是什么?为什么要用它,什么时候用它?

作者&#xff1a;Rakshith Vasudev编译&#xff1a;ronghuaiyang导读当你在玩ML模型的时候&#xff0c;你会在任何地方遇到这个“One hot encoding”的术语。当你在玩ML模型的时候&#xff0c;你会在任何地方遇到这个“One hot encoding”术语。你可以看到一个one hot编码器的s…

CUBA 7.2 –有什么新功能?

CUBA平台的第七版向前迈出了一大步。 内部体系结构的改进和新的IDE为进一步改进奠定了良好的基础。 我们将继续添加新功能&#xff0c;以使开发人员的生活更轻松&#xff0c;并使他们的工作更加高效。 在7.2版中&#xff0c;我们引入了许多可能看起来像是主要更新的更改&#…

postgresql 分区视图_PostgreSQL架构集中式到分布式主流架构总结

文章目录一、PG未来主流架构为什么是分布式二、PostgreSQL集中式到分布式架构总结一、PG未来主流架构为什么是分布式如果说5年前DB的分布式还只是一种趋势&#xff0c;如今分布式数据库正逐渐从趋势变成主流。说到分布式&#xff0c;我想我们不能不提一下集中式和分库分表。01集…

html5 上传图片模板,HTML5实现图片文件异步上传

&#xff0c;过现前个能文使近记接的端问对字用近记接  利用HTML5的新特点做文件异步上传非常简单方便&#xff0c;本文主要展示JS部分&#xff0c;html结构。下面的代码并未使用第三发库&#xff0c;如果有参照&#xff0c;请注意一些未展现出来的代码片段。我这边的效果预览…

dot2谜团png_一个类加载的谜团解决了

dot2谜团png面对一个好老问题 我在应用程序服务器上遇到一些类加载问题。 这些库被定义为Maven依赖项&#xff0c;因此被打包到WAR和EAR文件中。 不幸的是&#xff0c;其中一些还安装在应用程序服务器中&#xff0c;但版本不同。 启动应用程序时&#xff0c;我们遇到了与这些类…