2021-10-24 Java错题集锦

本文探讨了Java中构造函数的执行过程,特别是父类构造函数内部方法调用的实际指向。强调在没有显式指定的情况下,会优先使用子类的方法。同时讲解了`Math.ceil()`和`Math.floor()`函数的作用,并展示了相关代码的执行结果。还提到了`StringBuffer`类的特性,即引用不可变但内容可变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
java.exe是JVM,执行编译好的文件
javadoc.exe是用来制作Java文档的
jdb则是Java调试的工具

以下代码执行的结果显示是多少( )?

public class Demo {
  class Super {
 
    int flag = 1;
 
    Super() {
      test();
    }
 
    void test() {
      System.out.println("Super.test() flag=" + flag);
    }
  }
  class Sub extends Super {
 
    Sub(int i) {
      flag = i;
      System.out.println("Sub.Sub()flag=" + flag);
    }
    void test() {
      System.out.println("Sub.test()flag=" + flag);
    }
  }
  public static void main(String[] args) {
    new Demo().new Sub(5);
  }
}

在这里插入图片描述
这里出错的一个问题是,我想到了父类的构造函数被调用了,里面有个test()方法,我认为调用的是父类的test()因为必须是从父类的构造函数中调用的,没想到调用的还是子类的test()方法,所以说,只要没有显式的调用父类方法的情况下,一定是优先使用子类方法的,无论是在哪里进行调用的。

在这里插入图片描述
this表示的是当前在运行的对象,所以static和this是不能混一起用的。而第一个选项虽然有点奇怪,但是其实是没问题的,虽然他访问的是private的值,但是实际上因为这是在同一个类里访问的,所以是完全没问题的。

下面代码输出是?

double d1=-0.5;
System.out.println("Ceil d1="+Math.ceil(d1));
System.out.println("floor d1="+Math.floor(d1));

在这里插入图片描述
ceil:获取大于等于当前值的整数
floor:获取小于等于当前值的整数

在这里插入图片描述

解释一下StringBuffer,他也是被Final所修饰的,所以引用地址不能被修改,但是内部的字符数组不是被Final所修饰的,所以他是可以修改字符的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值