我正在学习Java,我想知道每个人的Java规则是什么。您本质上知道的规则,如果您看到有人破坏它们,您会尝试纠正它们。让你摆脱困境或帮助改善事情的事情。你永远不应该做的事情。你应该经常做的事情。初学者不会知道的规则。
答案 0 :(得分:20)
通过Bloch阅读Effective Java。
这正是你所要求的,这是一套编写真正优秀的惯用java代码的规则。
答案 1 :(得分:8)
好的,头脑风暴:
还有更多,但那些第一个出现在我脑海中的东西。
顺便说一下,如果你从初学者升级到专家,你就会知道何时对这些规则做例外;)
答案 2 :(得分:7)
我的一个是坚持使用Sun coding conventions。
答案 3 :(得分:6)
如果你重复自己,比如通过复制和粘贴,你做错了。 Java是一种OO语言,以这种方式使用它。
如果您没有使用设计模式,那么您正在重新发明轮子。令人惊讶的是,原始GOF设计模式可以最好地解决许多问题。只有在审查完这些之后,你才能做些不同的事情。
保持您的方法名称长,您的参数名称是描述性的,但您的方法很简短。这有点主观,但是你将事物分开的越多,修复和重用代码就越容易。如果你无法解释你的方法在一个句子中做了什么,你要么有一个通常很复杂的问题,要么你的方法更有可能试图做太多。
避免每个对象做太多。查看对象上的名称。如果对象中有与对象名称无关的方法,请将它们移动到可能属于它们的位置。
方法重载很好,它可以节省你在整个地方的类型转换。
尽量避免“聪明”,这样会让你更难理解你编写的代码。尽可能多地使用该语言的内置功能(例如迭代器)。做最简单的事可能有用。你以后会感谢自己。
即使您是一名独自工作的开发人员,也必须进行源代码管理。它让我的脖子比我能算得更多。
初始调试后,什么都不应该硬编码。对于跨应用程序使用的项目(例如环境和相关消息),请在数据库中存储尽可能多的项目。如果您认为这些项永远不会改变,请使用属性文件,并使用全局java文件来确定您永远不会改变的内容,因为它们会发生。
使用您的IDE自动格式化您的代码,即使它让它变得丑陋,从长远来看,您仍然会感觉更好。
如果有一个众所周知且可靠的框架,请使用它。即使您认为自己的MVC框架非常酷,JSF或Struts也会比您自己开发的任何东西都要好。与持久性相同的东西,使用主流的东西。尽可能尝试使用尽可能少的框架。你可能会给你的朋友们留下一个使用Hibernate的Spring,Shale,JSF,Struts项目,以及你自己开发的其他框架,但为了复杂,它实际上只是复杂性。
答案 4 :(得分:5)
你要记录你的代码!
答案 5 :(得分:5)
平等比较
在进行相等比较时,请考虑是否要比较值相等(两个对象具有相同的值)还是引用相等(它们是完全相同的对象实例)。要获得参考相等性,请使用==
运算符;对于值相等,通常需要使用.equals()
方法。
(请注意,非核心Java类可能有也可能没有有意义的.equals()实现;大多数核心类都有一个良好的.equals()实现。)
例如,常见的错误是(string1 == string2)
尝试确定字符串变量string1
和string2
是否代表相同的字符串值。
答案 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)
在我看来,最重要的是:
答案 15 :(得分:2)
使用并理解Java Collection Framework。
使用课程ArrayList
代替Vector
。使用HashMap
代替Hashtable
。
对于同步访问,请使用Collections
实用程序类。
如果您真的必须针对某些旧版API进行编码,请仅使用Hashtable
和Vector
。
答案 16 :(得分:2)
如果您发现自己使用的是inheritance而不是composition,那么您可能做错了。
答案 17 :(得分:1)
尽可能少地使用递归。有递归的用途,但大多数情况下,一个简单的循环将执行相同的工作,而不会产生递归创建的开销。
尽可能使用泛型。很多时候,一个类可以用于你开发时从未想过的应用程序。泛型可以在不重构的情况下简化重用过程。
答案 18 :(得分:1)
我看到了一个很好的建议,我尝试并应用:避免将类字段初始化为默认值。
我仍然经常看到:
public class Foo
{
boolean b = false;
int n = 0;
float x = 0.0;
SomeClass sc = null;
}
等等。
效率低(尽管处于次要级别),因为JVM已经在变量分配时设置了值,丑陋(并且使读者分散了非默认值)并且在调试时烦恼(我们必须在那里课堂创作时间)。
有些人说有些情况需要这样的初始化,但并不能提出真实案例。如果有人在这里有更多的信息......
答案 19 :(得分:1)
Code Complete提供了许多有用的提示,不仅适用于Java编程,也适用于编程。
答案 20 :(得分:1)
properties
和methods
使用不言自明的命名。Comment
仅在需要时。答案 21 :(得分:1)
关于这个问题的另一本好书是Robert C. Martins Clean Code。
它包含Java的通用编码规则和指南,但大多数也可以应用于其他语言。
我认为阅读本书的开发人员可以生成更具可读性和可维护性的代码。