检查代码错误

来源:互联网 发布:cms系统开发文档 编辑:程序博客网 时间:2024/04/30 07:10
1、关于成员变量的问题
下面的代码有错误吗?

class Something {
    int i;
    public void doSomething() {
        System.out.println("I = " + i);
    }
}

上面的代码没错误。但是,如果把 i 放在方法内,那么这段代码就错了。
原因在于 i 是成员变量,成员变量有默认值,整型成员变量的默认值是0,调用该类的doSomething()方法,输出的结果是I = 0。

同样的问题,下面的代码有问题吗?

class Something {
    final int I;
    public void doSomething() {
        System.out.println("I = " + i);
    }
}

乍一看,和上面代码没什么区别,只是加了一个final修师符。但这里的的确确是错误的代码,Final int i是个final的instantvariable (实例变量,或叫成员变量)。Final的instant variable没有defaultvalue,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为"final int I = 0;"。

2、关于类的问题

一个java类文件命名为OtherThing.java,而类的代码为:
class Something {
    private static void main(String[] something_to_do) {       
        System.out.println("Do something …");
    }
}

有错误吗?是正确的。如果在源程序中包含有公共类的定义,则该源文件名必须与该公共类的名字完全一致,字母的大小写都必须一样。如果源程序中不包含公共类的定义,则该文件名可以任意取名。如果在一个源程序中有多个类定义,则在编译时将为每个类生成一个.class文件。

3、关于接口问题
先看代码:
public interface TestInterface {
    int a = 0;
}
public class Something implements TestInterface {
    public void something() {
        TestInterface.a = 10;
    }
}

请问上面的代码有问题吗?错了,在接口中声明的属性默认隐含为 public static final,final修饰的属性值是不能修改的。

接口中只定义可实现的抽象方法,在具体继承接口的类中实现方法。下面给出一个接口的定义,指出错误:
1    public interface TestInterface {
2        int a = 0;
3        private void test();
4        public static void test();
5        public static final void test();
6        public final void test();
7        public void test(int a);
8        protected void test(String str);
9        abstract void test(double d);
10   }
(为了更好阅读,我在每行前加了行号)
如果在学接口的时候注意到这点的话,上面的内容很容判断出错误在哪里。这点就是:“一个Java接口的方法只能是抽象的和公开的,Java接口不能有构造子。
那么上面的代码错误很明显就是3,4,5,6,8行。
原创粉丝点击