【Java练习题】Java程序的输出 | 第三套(含解析)

简介: 【Java练习题】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。 作为练习,预测以下程序的输出。

// filename: Test2.java
class Test1 {
  Test1(int x) {
    System.out.println("Constructor called " + x);
  }
}
// This class contains an instance of 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”

目录
相关文章
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
2457 0
Java的CAS机制深度解析
CAS(Compare-And-Swap)是并发编程中的原子操作,用于实现多线程环境下的无锁数据同步。它通过比较内存值与预期值,决定是否更新值,从而避免锁的使用。CAS广泛应用于Java的原子类和并发包中,如AtomicInteger和ConcurrentHashMap,提升了并发性能。尽管CAS具有高性能、无死锁等优点,但也存在ABA问题、循环开销大及仅支持单变量原子操作等缺点。合理使用CAS,结合实际场景选择同步机制,能有效提升程序性能。
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
423 2
|
安全 Java
Java异常处理:程序世界的“交通规则
Java异常处理:程序世界的“交通规则
468 98
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
724 100
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
缓存 安全 Java
Java并发性能优化|读写锁与互斥锁解析
本文深入解析Java中两种核心锁机制——互斥锁与读写锁,通过概念对比、代码示例及性能测试,揭示其适用场景。互斥锁适用于写多或强一致性场景,读写锁则在读多写少时显著提升并发性能。结合锁降级、公平模式等高级特性,助你编写高效稳定的并发程序。
572 0
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。

推荐镜像

更多
  • DNS