首页 > 试题广场 >

在使用super和this关键字时,以下描述错误的是()

[不定项选择题]
在使用super和this关键字时,以下描述错误的是()
  • 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
  • super()和this()不一定要放在构造方法内第一行
  • this()和super()可以同时出现在一个构造函数中
  • this()和super()可以在static环境中使用,包括static方法和static语句块
super和this都只能位于构造器的第一行,而且不能同时使用,这是因为会造成初始化两次,this用于调用重载的构造器,super用于调用父类被子类重写的方法
发表于 2019-08-22 22:40:23 回复(6)
1、super()表示调用父类构造函数、this()调用自己的构造函数,而自己的构造函数第一行要使用super()调用父类的构造函数,所以这俩不能在一个构造函数中会出现重复引用的情况
2、super()和this()必须在构造函数第一行,所以这一点也表明他俩不能在一个构造函数中
3、this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块(里面不能使用非static类型的)。

发表于 2019-11-22 17:58:48 回复(1)
static修饰的方法不能存在this指针
发表于 2019-08-23 11:10:44 回复(1)
super() == 父类构造器
this() ==  当前类其他类构造器
类的生命周期包括:加载.连接.初始化,使用,卸载,5个阶段.
初始化过程分为
  • 执行类构造器<clinit>():主要是类变量的赋值动作的和静态语句块的中的语句合并.即static数据的处理
  • 执行类的构造器<init>():构造方法实例变量的初始化赋值
所以static变量和static代码块是在构造方法之前执行的,那时候还没有构造方法.(D选项)

初始化的触发机制有5种,其中当初始化一个类的时候,如果发现父类没有被初始化,需要初始化父类.所以一定是父类被初始化之后,才会有子类别初始化.

如果在子类调用父类的super()构造方法,可以理解为还是对父类的一种初始化,不放在第一行的话,不符合父类被初始化才会有子类初始化,逻辑混乱.所以必须放在第一行,

如果在子类中掉用不同的this()构造方法,放在第一行理解为当前构造方法可以是被调用的构造方法的一种增强.不放在第一行的话,个人认为执行逻辑理解为会有两构造器执行,第一个构造器执行到一半,在执行一个构造器,逻辑上不通.

this和super要求都在第一行,所以不能同时存在,而且逻辑上也不通.



发表于 2020-02-22 13:36:26 回复(0)
super()和this()不能同时在构造方法中使用,因为会导致重复实例化两次,而且这俩函数也不能放入static中,因为静态中不能操作实例对象
发表于 2019-11-10 09:15:29 回复(0)
发表于 2019-05-20 17:35:37 回复(0)
        对于派生类的构造函数来说,第一行且仅第一行总是会被等效成调用基类的某一个构造函数的,基类的构造函数只会调用一次,以免造成基类重复初始化。只不过很多情况下,基类有无参数构造函数,因此不需要显式地在派生类构造函数中第一行写出super(),但其实是编译器自动添加的。因此 A正确,B错误。

        super()用于调用基类无参数构造函数,this() 用于类中重载的构造函数调用无参数的构造函数,也就是已经在其第一行调用了一个基类构造函数,因此不可以再调用基类无参数构造函数super(),因此两者不能同时使用 C错误。

        super()和this()都必须由一个对象发出,所以必须在非static环境中使用。
发表于 2022-01-10 15:29:27 回复(0)
静态代码块中是不能有this和super这种实例对象映射,静态代码属于类加载,优先于实例的加载,因此会出现在运行静态代码块时实例对象还没加载的情况
发表于 2021-12-29 11:38:01 回复(0)
在方法中定义使用的this关键字,它的值是当前对象的引用.也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况.

而且,更为重要的是this和super都无法出现在static 修饰的方法中,static 修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象.如果使用的是类来调用而不是对象,则 this就无法指向合适的对象.所以static 修饰的方法中不能使用this.
发表于 2019-11-14 21:51:16 回复(0)
哦,原来this()和super()都要放在第一行
发表于 2020-03-25 18:09:00 回复(0)
super(),或 this() 必须在构造方法的第一行。
super() 和 this() 不能同时出现在一个构造函数中。

发表于 2022-02-28 22:15:56 回复(0)
this()和super()都不可以在static环境中使用
发表于 2021-09-22 00:14:31 回复(1)
super和this必须在第一行,所以c不对
编辑于 2021-08-09 21:30:15 回复(0)
构造方法中使用this、super就是用于调用构造器的
所以只能使用一个、且必须放在第一行
——是这样理解吗
发表于 2021-06-27 12:29:50 回复(0)
我想知道this()是怎么出现在构造函数第一行的?在什么情况下出现?没想明白,有解释的么?
发表于 2021-03-28 15:38:01 回复(1)
喔喔,其实知道super和this都只能位于第一行就知道C是错误的了,两个同时存在怎么保证都是第一行?
发表于 2021-03-11 15:44:39 回复(0)
1、super()表示调用父类构造函数、this()调用自己的构造函数,而自己的构造函数第一行要使用super()调用父类的构造函数,所以这俩不能在一个构造函数中会出现重复引用的情况 2、super()和this()必须在构造函数第一行,所以这一点也表明他俩不能在一个构造函数中 3、this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块(里面不能使用非static类型的)。
发表于 2020-08-30 10:46:27 回复(0)
BCD
A.super()必须写在子类构造方法的第一行,因为必须先执行父类的构造函数,这是java子类与父类继承关系中函数运行的顺序s
B.必须放在第一行
C.this()和super()不能同时出现,因为任何的子类都必须要先调用父类的构造函数,而当你采用“显示构造方法调用”即用this(...)调用当前类的其他构造函数时,这个时候父类的构造就在this(...)里面执行了,this(...)里面应该不仅包括当前类的构造,还必须包括父类的构造
D.this()和super()不能在static环境中执行,1.当一个类实例化时,先执行静态代码块,在执行构造函数,也就是说static函数或代码块执行时,构造函数还没有运行,所以无法调用,就算调用了,类的静态成员也是无法调用非成员变量。
编辑于 2020-07-21 16:52:27 回复(0)
解释一下D
因为this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。Static修饰的内容,先于任何的实例(对象)存在。即Static内容在类加载时就已经存在了,但是对象是在创建时才在内存中生成。

编辑于 2020-03-18 19:25:56 回复(0)
以为是正确的……
发表于 2020-02-24 10:56:03 回复(0)