你的Java规则是什么?

时间:2008-10-07 20:38:27

标签: java

我正在学习Java,我想知道每个人的Java规则是什么。您本质上知道的规则,如果您看到有人破坏它们,您会尝试纠正它们。让你摆脱困境或帮助改善事情的事情。你永远不应该做的事情。你应该经常做的事情。初学者不会知道的规则。

22 个答案:

答案 0 :(得分:20)

通过Bloch阅读Effective Java

这正是你所要求的,这是一套编写真正优秀的惯用java代码的规则。

答案 1 :(得分:8)

好的,头脑风暴:

  • 在类和对象中思考,而不是在函数中思考。
  • 避免空的catch子句(特别是 catch(Throwable t){}
    • 处理错误,不要忽略它。
    • 处理只有类型的例外您希望在可以处理它的地方处理。
  • 使用Javadoc。
    • 让你思考你在做什么。
    • 开发时生成文档。
    • 使用Eclipse之类的IDE在使用您的类和方法时显示提示。
  • 尝试使用泛型和注释来习惯它。

还有更多,但那些第一个出现在我脑海中的东西。

顺便说一下,如果你从初学者升级到专家,你就会知道何时对这些规则做例外;)

答案 2 :(得分:7)

我的一个是坚持使用Sun coding conventions

答案 3 :(得分:6)

如果你重复自己,比如通过复制和粘贴,你做错了。 Java是一种OO语言,以这种方式使用它。

如果您没有使用设计模式,那么您正在重新发明轮子。令人惊讶的是,原始GOF设计模式可以最好地解决许多问题。只有在审查完这些之后,你才能做些不同的事情。

保持您的方法名称长,您的参数名称是描述性的,但您的方法很简短。这有点主观,但是你将事物分开的越多,修复和重用代码就越容易。如果你无法解释你的方法在一个句子中做了什么,你要么有一个通常很复杂的问题,要么你的方法更有可能试图做太多。

避免每个对象做太多。查看对象上的名称。如果对象中有与对象名称无关的方法,请将它们移动到可能属于它们的位置。

方法重载很好,它可以节省你在整个地方的类型转换。

尽量避免“聪明”,这样会让你更难理解你编写的代码。尽可能多地使用该语言的内置功能(例如迭代器)。做最简单的事可能有用。你以后会感谢自己。

即使您是一名独自工作的开发人员,也必须进行源代码管理。它让我的脖子比我能算得更多。

初始调试后,什么都不应该硬编码。对于跨应用程序使用的项目(例如环境和相关消息),请在数据库中存储尽可能多的项目。如果您认为这些项永远不会改变,请使用属性文件,并使用全局java文件来确定您永远不会改变的内容,因为它们会发生。

使用您的IDE自动格式化您的代码,即使它让它变得丑陋,从长远来看,您仍然会感觉更好。

如果有一个众所周知且可靠的框架,请使用它。即使您认为自己的MVC框架非常酷,JSF或Struts也会比您自己开发的任何东西都要好。与持久性相同的东西,使用主流的东西。尽可能尝试使用尽可能少的框架。你可能会给你的朋友们留下一个使用Hibernate的Spring,Shale,JSF,Struts项目,以及你自己开发的其他框架,但为了复杂,它实际上只是复杂性。

答案 4 :(得分:5)

你要记录你的代码!

  • 您必须记录您编写的所有代码。当你3个月后回来阅读它时,至关重要的是你已经对代码的作用留下了一些暗示。
  • 您不应该在代码中记录代码正在做什么,因为它就在那里。
  • 但是,您应该记录为什么代码。从长远来看,你会从“为什么”的评论中获得更多的好处,然后是“什么”评论。
  • 如果难以记录,很可能你对这个问题没有足够的考虑。

答案 5 :(得分:5)

平等比较

在进行相等比较时,请考虑是否要比较值相等(两个对象具有相同的值)还是引用相等(它们是完全相同的对象实例)。要获得参考相等性,请使用==运算符;对于值相等,通常需要使用.equals()方法。

(请注意,非核心Java类可能有也可能没有有意义的.equals()实现;大多数核心类都有一个良好的.equals()实现。)

例如,常见的错误是(string1 == string2)尝试确定字符串变量string1string2是否代表相同的字符串值。

答案 6 :(得分:5)

永远不要在AWT事件派发线程中执行耗时的任务,否则你将拥有一个无响应的GUI。

答案 7 :(得分:3)

查看Java API。特别是util包。有许多库可以执行常见任务,重复使用它们比滚动它们要好得多。

答案 8 :(得分:3)

如果无法保证不会发生异常,请使用已检查(已声明)异常,但请确保合同中记录了异常(JavaDoc)。 如果呼叫者违反合同,则使用未选中(运行时)异常惩罚呼叫者,例如当合同指定参数可能不为null时,传入null参数。

答案 9 :(得分:3)

你应该做的事情。

阅读Java语言规范。如果你至少在另一种OOP语言中有一些背景,它会获得巨大回报。

答案 10 :(得分:3)

总是尽可能地编写单元测试。有两个主要的单元测试框架 - junit和TestNG。他们每个人都有一个其他测试扩展的ecoSystem。   进行单元测试可以让您放心。在有人添加了新代码或修改过的代码后,您可以通过全部运行单元测试来查找系统是否损坏。

此外,java社区已经接受了持续集成系统。其中许多是开源的 - 计划定期构建您的软件。如果可以,可以部署它并对它们运行集成测试,但至少要定期构建和运行单元测试。

答案 11 :(得分:2)

在你所接受的内容中保持自由,并在你返回的内容中具体说明。

例如,采用具有以下签名的通用方法:

  

public void doXY(LinkedList widgets)

使用此签名,客户端无法将您的通用方法与其他Lists甚至Set类型一起使用。通常可以扩展输入参数类型以使该方法更灵活地使用,例如, G:

  

public void doXY(Collection widgets)

答案 12 :(得分:2)

  • 保持代码整洁(缩进),注释和清除变量名称。这将有助于您以后阅读/编辑您的代码。它还可以帮助其他人阅读您的代码。

  • 在适用的情况下创建对象。

  • 确保代码效率,不重复代码(没有复制+粘贴mkay?。

答案 13 :(得分:2)

一系列建议!

让我们看看,我没有看到过什么......

使用大量小班。每个班级应该做好一件事。我从未见过太多课程,实际上总是太少。

阅读重构书 - 关于Bad Code Smells的部分列出了很多需要注意的事项。

你做错的最大指针是大量的setter和getter,使用switch语句和大型继承树的愿望,但还有很多其他的(你的问题不是OO,但足够接近)。

不要为了习惯而初始化局部变量(String s = null;),否则编译器无法捕获这个问题:

String s;
if(x == 5)
    s="5";

if(y == 5) 
    s.append("5"); // Compiler will tell you s might not have been assigned
                   // UNLESS your first line was "String s=null"

学习Javadocs。只要养成使用它们的习惯,它们并不复杂。

使用Eclipse或NetBeans。打开错误检查。注意错误。你可能决定的一些并不重要,但很多人会帮忙。

如果您正在使用Swing,请了解事件线程 - 了解它或您的GUI看起来像垃圾。

SDK中有一些AMAZING库。许多程序员都错过了高级线程控制,参考类,NIO和反射 - 这只是表面上的问题。

那就是说,不要滥用反思 - 这会让你的代码难以维护 - 只要知道它就在那里以及它能做些什么。

不要“删除”变量以释放内存 - 它几乎从来没有用过,让你看起来像你不理解垃圾收集。甚至更狡猾的是在最终化方法中做到这一点。

嗯,当我们在那里时 - 不要使用finalize方法。永远。如果需要清理外部资源,请查找引用类(WeakReference)。

答案 14 :(得分:2)

在我看来,最重要的是:

  1. 格式化:我无法理解格式错误的代码。
  2. 良好的命名:良好的命名约定是良好代码的第一步。
  3. 文档:始终编写关于代码是什么以及为什么以这种方式完成的文档
  4. 不要重复代码
  5. 利用“有效的java”中提到的技术。本书提供了非常有用的指导。

答案 15 :(得分:2)

使用并理解Java Collection Framework。

使用课程ArrayList代替Vector。使用HashMap代替Hashtable

对于同步访问,请使用Collections实用程序类。

如果您真的必须针对某些旧版API进行编码,请仅使用HashtableVector

答案 16 :(得分:2)

如果您发现自己使用的是inheritance而不是composition,那么您可能做错了。

答案 17 :(得分:1)

  1. 尽可能少地使用递归。有递归的用途,但大多数情况下,一个简单的循环将执行相同的工作,而不会产生递归创建的开销。

  2. 尽可能使用泛型。很多时候,一个类可以用于你开发时从未想过的应用程序。泛型可以在不重构的情况下简化重用过程。

答案 18 :(得分:1)

我看到了一个很好的建议,我尝试并应用:避免将类字段初始化为默认值。

我仍然经常看到:

public class Foo
{
  boolean b = false;
  int n = 0;
  float x = 0.0;
  SomeClass sc = null;
}

等等。

效率低(尽管处于次要级别),因为JVM已经在变量分配时设置了值,丑陋(并且使读者分散了非默认值)并且在调试时烦恼(我们必须在那里课堂创作时间)。

有些人说有些情况需要这样的初始化,但并不能提出真实案例。如果有人在这里有更多的信息.​​.....

答案 19 :(得分:1)

Steven McConnel的

Code Complete提供了许多有用的提示,不仅适用于Java编程,也适用于编程。

答案 20 :(得分:1)

  1. 始终对propertiesmethods使用不言自明的命名。

  2. Comment仅在需要时。

答案 21 :(得分:1)

关于这个问题的另一本好书是Robert C. Martins Clean Code

它包含Java的通用编码规则和指南,但大多数也可以应用于其他语言。

我认为阅读本书的开发人员可以生成更具可读性和可维护性的代码。