栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

今天没了解复习或学习新知识,刷了点题,记录一下错题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

今天没了解复习或学习新知识,刷了点题,记录一下错题

以下程序的输出结果为
class base{    
    public base(String s){
    System.out.print("B");
    }
}

public class Derived extends base{
    public Derived (String s) {
    System.out.print("D");
    }
public static void main(String[] args){
    new Derived("C");
    }
}

A:BD

B:DB

C:C

D:编译不通过

这道题我一开始选中的A选项,这里也确实容易错,但答案是D,下面让我们来分析一下。

首先我们都知道实例化子类之前会先实例化父类的构造方法。如果说按照这个逻辑,那我们就会先输出B,再输出D,答案成A了?不不不,别忘了,super(),子类的构造方法的第一行都有一个默认的super(),super()会调用父类的无参构造,但是在这个里面我们父类自己定义了一个有参构造,所以我们不会默认生产无参构造,所以就无法实例化我们的子类。想要成功通过编译的话,需要在子类构造方法中加super("这里传参数"),或者是在父类中我们自己再定义一个无参构造。

 

初始化顺序依次是:(静态变量、静态初始化块)–>(变量、初始化块)–> 构造器;如果有父类,则顺序是:父类static方法 –> 子类static方法 –> 父类构造方法- -> 子类构造方法

有关下述Java代码描述正确的选项是( )
public class TestClass {
    private static void testMethod() {
    System.out.println("testMethod");
    }

    public static void main(String[] args){
    ((TestClass)null).testMethod();
    }
}

A:编译不通过

B:运行正常,输出testMethod

C:编译通过,运行异常,报NullPointerException

D:编译通过,运行异常,报NoSuchMethodException

刚开始看到这个题目的时候心里就在想null在这里是什么鬼,还可以这样子用??反手就一个编译不通过。结果。。。答案为B。what'up?!一步一步来,首先我们都知道static代表静态方法,静态方法可以通过类名直接访问。且静态方法在类实例化之前就已经加载完了,所以静态方法不能调用非静态方法,但非静态方法可以调用静态方法。接着null是可以被强制转换成任何类型的!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/287922.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号