作为初级的Java开发者,也许你的经验不足,也许因为你的一时疏忽给公司、项目造成了损失,那么这是无法原谅的。作为技术人员,只有不断
学习,提升自己的技术水平,才能为自己、为公司创造更高的价值。下面是笔者整理的Java常见的十大代码错误,希望对大家有所帮助!
1、在静态方法中访问非静态的成员变量(例如在main方法中)
有很多刚刚接触Java的程序远都会有一问题,就是在main方法中访问成员变量。Main方法一般都被标示为“静态的”,意思就是我们不需要实例化这个类来调用main方法。例如,java虚拟机能够以这样的形式来调用MyApplication类:
MyApplication.main(命令行参数);
这里并没有实例化MyApplication类,或者这里没有访问任何的成员变量。例如下面的程序就会产生一个编译器的错误。
public class StaticDemo
{
public String my_member_vaiable = "somedata";
public static void main (String args[])
{
// Access a non-satic member from static method
System.out.println ("This generates a compiler error"+
my_member_variable);
}
}
如果你要访问一个静态方法中的成员变量(比如main方法),你就需要实例化一个对象。下面这段代码示例了如何正确的访问一个非静态的成员变量。其方法就是首先实例化一个对象。
public class NonStaticDemo
{
public String my_member_variable = "somedata";
public static void main (String args[])
{
NonStaticDemo demo = new NonStaticDemo();
// Access member variable of demo
System.out.println ("This WON'T generate an error"+
demo.my_member_variable);
}
}
2、在重载的时候错误的键入方法名重载允许程序员用新的代码去覆盖方法的实现
重载是一个便利的特性,很多面对对象的程序员都在大量的使用它。如果你使用AWT1.1的时间处理模型,你通常会覆盖listener方法去实现定制的功能。一个在重载方法的时候很容易犯的错误就是错误的键入要重载的方法名。如果你错误的输入了方法名,你就不是在重载这个方法了。相反的,你是在重新定义一个方法,只不过这个方法的参数和返回类型和你要重载的方法相同罢了。
public class MyWindowListener extends WindowAdapter {
// This should be WindowClosed
public void WindowClose(WindowEvent e) {
// Exit when user closes window
System.exit(0);
}
}
这个方法不会通过编译,很容易就能捕捉找它。在过去我曾经注意过一个方法,并且相信它是被调用的,花了很多时间去找这个错误。这个错误的表现就是你的方法不会被调用,你以为你的方法已经被跳过了。一种可行的解决方法就是增加一条打印输出语句。在日志文件中记录下信息。或者是使用跟踪调试程序(例如VJ++或者是Borland JBuilder)来一行一
行的调试。如果你的方法还不能被调用,那很可能就是你的方法名键入错误了。
3、比较和分配(“=”强于“==”)
当我们使用==运算符的时候,我们实际上是在比较两个对象的引用,来看看他们是不是指向的同一个对象。举个例子,我们不能使用==运算符来比较两个字符串是否相等。我们应该使用。equals方法来比较两个对象,这个方法是所有类共有的,它继承自java.lang.Object。
下面是比较两个字符串相等的正确的方法:
// Bad way
if( (abc + def) == "abcdef" )
{
……
}
// Good way
if ( (abc + def)。equals("abcdef") )
{
……
}
5、混淆值传递和引用传递
这是一个不太容易发现的错误。因为,当你看代码的时候,你会十分确定这是一个引用传递,而它实际上却是一个值传递。
Java这两者都会使用,所以你要理解你什么时候需要值传递,什么时候需要引用传递。当你要传递一个简单的数据类型到一个函数中,比如,char、int、float或者double,你是在传递