【Java练习题】Java程序的输出 | 第三套(含解析)
【摘要】 难度等级: 中等预测以下 Java 程序的输出:// 文件名: Test.javaclass Test { int x = 10; public static void main(String[] args) { Test t = new Test(); System.out.println(t.x); }}该程序运行良好并打印 10。在 Java 中,成员可以使用类声明进行初始化。当初...
难度等级: 中等
预测以下 Java 程序的输出:
// 文件名: Test.java
class Test {
int x = 10;
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.x);
}
}
该程序运行良好并打印 10。在 Java 中,成员可以使用类声明进行初始化。当初始化值可用并且初始化可以放在一行时,此初始化工作得很好(有关更多详细信息,请参阅此)。例如,以下程序也可以正常工作。
// 文件名: Test.java
class Test {
int y = 2;
int x = y+2;
public static void main(String[] args) {
Test m = new Test();
System.out.println("x = " + m.x + ", y = " + m.y);
}
}
上述程序的输出是“x = 4, y = 2”。y 首先被初始化,然后 x 被初始化为 y + 2。所以 x 的值变成了 4。
当一个成员在类声明和构造函数中都被初始化时会发生什么?考虑以下程序。
// 文件名: Test.java
public class Test
{
int x = 2;
Test(int i) { x = i; }
public static void main(String[] args) {
Test t = new Test(5);
System.out.println("x = " + t.x);
}
}
上述程序的输出是“x = 5”。Java 中使用类声明的初始化类似于C++ 中使用Initializer List 的初始化。所以,在上面的程序中,在构造函数内部赋值的值覆盖了 x 之前的值 2,x 变为 5。
作为练习,预测以下程序的输出。
// 文件名: Test2.java
class Test1 {
Test1(int x) {
System.out.println("Constructor called " + x);
}
}
// 这个类包含一个 Test1 的实例
class Test2 {
Test1 t1 = new Test1(10);
Test2(int i) { t1 = new Test1(i); }
public static void main(String[] args) {
Test2 t2 = new Test2(5);
}
}
程序的输出是Constructor called 10 Constructor called 5。
首先在main方法中实例化t2对象。由于局部变量的初始化顺序比构造函数先,首先实例变量(t1),在类Test2中被分配到内存。在这一行中,创建了一个新的 Test1 对象,在类 Test1 中调用构造函数并打印“Constructor called 10”。接下来调用 Test2 的构造函数,并再次创建类 Test1 的新对象并打印“Constructor called 5”。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)