首页 > 试题广场 >

下面叙述错误的是 ( )

[单选题]

下面叙述错误的是 ( )

  • 一个类可以有多个构造方法
  • 最终类不能派生子类,最终方法不能被覆盖
  • 如果一个类中没有定义构造方法,则Java在生成这个类的实例时不会调用构造方法。
  • 数组一旦创建之后,就不能再改变其长度
推荐

本题选C

A.一个类可以有多个构造方法,实际上就是方法的重载,正确

B.用final修饰的类不能被继承,方法不能被覆盖,正确

C.如果没有构造方法,编译器会自动添加一个空参构造方法,错误

D.由源码可知,数组内部采用字符数组存储,该字符数组用final修饰,长度一旦确定不可再变,正确

(答题不易,望采纳)

编辑于 2020-03-04 14:04:54 回复(1)
本题目正确答案:C
分析:
1)A 选项,一个类可以有多个构造方法,是正确的;
Java创建一个类的时候,会默认提供一个无参的构造方法(构造函数),根据需要,编程人员可以创建多个带参数的有参构造方法 (构造函数)。
public class Student {
    //无参构造方法(构造函数)
    public Student() {

    }

    //有一个参构造方法(构造函数)
    public Student(String name) {

    }

    //有两个参构造方法(构造函数)
    public Student(String name, int age) {

    }

    //有三个参构造方法(构造函数)
    public Student(String name, int age, String address) {

    }
}
2)B 选项,最终类不能派生子类,最终方法不能被覆盖,是正确的;
定义一个 final 修饰的 Student 类,
public final class Student {
    //无参构造方法(构造函数)
    public Student() {

    }

    //有一个参构造方法(构造函数)
    public Student(String name) {

    }

    //有两个参构造方法(构造函数)
    public Student(String name, int age) {

    }

    //有三个参构造方法(构造函数)
    public Student(String name, int age, String address) {

    }
}
定义一个子类 StudentZi 类,尝试继承 Student 类

会提示不能继承一个被 final 修饰的类;
final 类不能被继承,因此final类的成员方法没有机会被覆盖,默认是 final 的;在设计类的时候,如果这个类不需要有子类,类的实现细节不允许变动,并且确定这个类不会再被扩展,可以将这个类设置为 final 类。
如果一个类不允许子类覆盖某个方法,可以将这个方法设置为final方法。
将方法声明为final的原因主要有两个:
①将方法锁定:防止任何子类修改它的意义和实现;
②高效:编译器遇到调用final方法的时候,会转入内嵌机制,大大提高执行效率。
3)C选项,如果一个类中没有定义构造方法,则Java在生成这个类的实例时不会调用构造方法,是错误的;
Java 在生成类的时候,会默认提供一个无参的构造方法(构造函数);
无参构造方法存在的意义:
在Java程序编写中,子类的构造方法必定会调用父类的构造方法,如果在子类的构造方法中没有指定调用父类的哪个构造方法,在实例化子类对象时,子类会默认调用父类的无参构造方法。如果在父类中没有定义无参构造方法的话,编译会报错。
4)D选项,数组一旦创建之后,就不能再改变其长度,是正确的;
数组的定义:Java 语言中提供的数组是用来存储固定大小的同类型元素。当你创建了一个数组时,它的容量是不变的,而且在生命周期也是不能改变的。
拓展:数组和集合的区别:
1)数组声明了它容纳的元素的类型,而集合不声明。
2)数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。
3)数组的存放的类型只能是一种(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。
4)数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的。
编辑于 2020-03-04 14:53:04 回复(1)
本题选C。
类的构造方法不是要求必须定义的。如果在类中没有定义任何一个构造方法,则 Java 会自动为该类生成一个默认的构造方法。默认的构造方法不包含任何参数,并且方法体为空。
因此C项错误。
编辑于 2020-03-03 20:01:35 回复(1)
😀答案解析
A.方法中当然可以有多个构造方法,其实利用的是方法重载的原理(普通成员方法都可以同名凭什么我构造方法不行?)
B.最终类就是被final修饰的类(如果理解final的中文意思应该能猜到),都最终了说明肯定不能被继承啦。同样我最终方法也不能被重写了
C.没有写构造方法时,jvm自动提供无参构造(不然你以为你平时没写构造方法为什么可以new出来实例),但是注意当你写了有参构造时,你还想用无参就得再写上了,因为这时jvm不提供了
D.随便进入个数组的源码可以很容易看见,它是以字符数组存储数组,这个字符数组被final修饰,被final修饰的成员变量是不可再次赋值(也可以理解为不可变)
(其实这题就是考final修饰词和构造方法)
发表于 2021-12-07 16:59:48 回复(0)
本题选择 C 当你声明一个类时,JVM 就会自动为你生成一个该类默认的构造方法,该构造方法与你的类方法同名,无返回值,但是当你声明了其他的构造起,JVM 就不会为你默认的生成无参的构造方法了。
发表于 2022-03-08 18:17:23 回复(0)
如果没有手写构造方法,类中会默认一个空构造方法。
发表于 2023-03-21 23:58:03 回复(0)

选C

A、对。可以使用重载的形式(参数列表中,类型不同或顺序不同或个数不同),来使一个类拥有多个构造器。

B、对。final修饰的类为最终类,不可被继承;修饰方法为最终方法,不可被子类重写;修饰属性为常量,一旦初始化不可再更改。

C、错。一个类中没有定义构造器,那么会默认定义了一个调用了父类空参构造器的空参构造器。

D、数组在分配内存空间时,是直接开辟了一整块连续的内存空间供其使用,使其能够在内存层面实现他在逻辑层面的连续性。而这块内存空间分配出去之后,其后边的空间可能会被其他数据用来存储,如果要进行容量扩充,那无疑会影响到后边的数据存储。

发表于 2024-02-28 16:17:09 回复(0)
看了评论才想起了,java默认有无参构造方法的,这...
发表于 2023-01-08 09:13:21 回复(0)
Mark数组和集合:
数组的定义:Java 语言中提供的数组是用来存储固定大小的同类型元素。当你创建了一个数组时,它的容量是不变的,而且在生命周期也是不能改变的。
拓展:数组和集合的区别:
1)数组声明了它容纳的元素的类型,而集合不声明。
2)数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。
3)数组的存放的类型只能是一种(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。
4)数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的。
发表于 2022-07-05 11:26:29 回复(0)
默认生成一个无参构造
发表于 2022-07-01 19:05:53 回复(0)

A.一个类可以有多个构造方法,实际上就是方法的重载,正确

B.用final修饰的类不能被继承,方法不能被覆盖,正确

C.如果没有构造方法,编译器会自动添加一个空参构造方法,错误

D.由源码可知,数组内部采用字符数组存储,该字符数组用final修饰,长度一旦确定不可再变,正确

发表于 2020-06-14 17:39:48 回复(0)
选择C,如果没有构造方法,编译器会自动添加一个空参构造方法。置顶的答的很详细
发表于 2020-03-31 17:23:33 回复(0)
C, 没有写构造方***默认给出一个无参空构造方法来执行的
发表于 2020-03-03 14:53:42 回复(0)