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的instant variable (实例变量,或叫成员变量)。Final的instant variable没有default value,必须在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行。
下面的代码有错误吗?
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的instant variable (实例变量,或叫成员变量)。Final的instant variable没有default value,必须在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行。