题目:将Incrementable的代码段改写成一个完整的可运行程序。
代码段在P29到P30
class StaticTest {
static int i = 47;
}
class Incrementable {
static void increment() {
StaticTest.i++
}
}
public class test42 {
public static void main(String[] args) {
Incrementable.increment();
System.out.println(StaticTest.i);
}
}
class Incrementable {
static void increment() {
StaticTest.i++;
}
}
class StaticTest {
static int i = 47;
}
控制台输出48,说明i的值确实被改变了。
在这里,由于方法increment()是静态方法,所以调用它时不需要创建Incrementable的实例化对象,直接用“.”调用即可。
除此之外,笔者做了一些试验性的尝试,比如:
increment()方法已经被声明为静态了,可以写同名方法吗?尝试结果发现,只要参数列表不同,就可以任意创建,不受static的影响。修改后代码如下:
public class test42 {
public static void main(String[] args) {
Incrementable.increment();
Incrementable incrementable = new Incrementable();
incrementable.increment(2);
System.out.println(StaticTest.i);
}
}
class Incrementable {
static void increment() {
StaticTest.i++;
}
void increment(int a) {
StaticTest.i--;
}
}
class StaticTest {
static int i = 47;
}
控制台输出是47.
所以我们可以间接确认前一节的内容,区分同名方法靠的是参数列表,与是否用static,public,private等无关,又例如:
public void increment(int a) {
StaticTest.i--;
}
private void increment(int a) {
}
此时编译器提示错误:increment(int a) has already defind.
在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。
以上。