首页 > 试题广场 > 在使用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 回复(1)
1、super()表示调用父类构造函数、this()调用自己的构造函数,而自己的构造函数第一行要使用super()调用父类的构造函数,所以这俩不能在一个构造函数中会出现重复引用的情况
2、super()和this()必须在构造函数第一行,所以这一点也表明他俩不能在一个构造函数中
3、this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块(里面不能使用非static类型的)。

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

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

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

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

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



发表于 2020-02-22 13:36:26 回复(0)
在方法中定义使用的this关键字,它的值是当前对象的引用.也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况.

而且,更为重要的是this和super都无法出现在static 修饰的方法中,static 修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象.如果使用的是类来调用而不是对象,则 this就无法指向合适的对象.所以static 修饰的方法中不能使用this.
发表于 2019-11-14 21:51:16 回复(0)
发表于 2019-05-20 17:35:37 回复(0)
以为是正确的……
发表于 2020-02-24 10:56:03 回复(0)
super()和this()不能同时在构造方法中使用,因为会导致重复实例化两次,而且这俩函数也不能放入static中,因为静态中不能操作实例对象
发表于 2019-11-10 09:15:29 回复(0)
漏选了C 。。。
发表于 2019-09-11 15:16:34 回复(0)
我看成选对的,结果还对了2个。。
发表于 2020-04-19 21:03:14 回复(0)
哦,原来this()和super()都要放在第一行
发表于 2020-03-25 18:09:00 回复(0)
解释一下D
因为this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。Static修饰的内容,先于任何的实例(对象)存在。即Static内容在类加载时就已经存在了,但是对象是在创建时才在内存中生成。

编辑于 2020-03-18 19:25:56 回复(0)

  class test {
    
    public test() {

        super();// 构造函数调用必须是 [ 构造函数中的 ] 第一个语句
        // this();//递归性构造函数调用 HasStatic()

        this.hashCode();
        super.hashCode();
    }

    {
//        super();//调用必须是 [ 构造函数中的 ] 第一个语句
//        this();//调用必须是 [ 构造函数中的 ] 第一个语句
        this.hashCode();
        super.hashCode();
    }
    static {
//        super();//调用必须是 [ 构造函数中的 ] 第一个语句
//        this();//调用必须是 [ 构造函数中的 ] 第一个语句
        //super.hashCode();// 不能在静态上下文中使用 super
        //this.hashCode();//不能在静态上下文中使用 this
        
    }

    void say1() {
//        super();//调用必须是 [ 构造函数中的 ] 第一个语句
//        this();//调用必须是 [ 构造函数中的 ] 第一个语句
        this.hashCode();
        super.hashCode();
        
    }
    static void say2() {
//        super();//调用必须是 [ 构造函数中的 ] 第一个语句
//        this();//调用必须是 [ 构造函数中的 ] 第一个语句
        // super.hashCode();// 不能在静态上下文中使用 super
        // this.hashCode();//不能在静态上下文中使用 this
        
    }
}
发表于 2020-03-05 12:15:14 回复(0)
妈的,瞎了
发表于 2020-01-19 08:44:38 回复(0)
难道B不是错的吗?
super()或this()不是一定要放在构造器的第一行的吗??!!?
发表于 2019-11-22 17:53:27 回复(2)

D是对的? static中不能用this吧?


发表于 2019-11-12 09:02:49 回复(0)
this和super都只能位于构造器的第一行
发表于 2019-11-09 08:11:20 回复(0)
super跟this 都只能在方法的第一行,而且不能同时使用,这样会造成初始化两次
发表于 2019-10-23 20:29:36 回复(0)
靠,选描述错误的
发表于 2019-10-19 08:37:06 回复(0)
super this 放在构造器第一行,且部门同时使用
发表于 2019-09-10 15:50:58 回复(0)