精华内容
下载资源
问答
  • 在使用this和super关键字时
    2022-07-28 19:30:06

    静态方法中不能使用super和this关键字原因是:

    静态方法是存储在静态区内的,静态区会随着类加载器一起加载到内存当中,这时候,只是加载到内存当中,但是并没有真正的去运行,此时也就没有产生实例化的对象,this是表示当前对象的。super表示父类的对象,这时候,连实例化的对象都没有产生,所以this和super也就不存在。综上所述!就不能在静态方法中使用this和super关键字!

    更多相关内容
  • 1.this关键字 ...(2)局部变量或方法参数覆盖了成员变量,添加this关键字明确引用的是类成员还是局部变量或是方法参数。 ps:Java语言中每实例化一次对象,都会自动调用一次构造方法。 .

    1.this关键字

    1)说明:this关键字用于表示本类当前对象(成员变量,成员方法),当前对象不是某个new出来的实体对象,而是当前正在编辑的类,this关键字只能在本类中使用。虽然我们知道this可以调用成员变量和成员方法,但Java语言中最常规的调用方式是使用“对象.成员变量(或方法)"进行调用。

    (2)在局部变量或方法参数覆盖了成员变量时,添加this关键字明确引用的是类成员还是局部变量或是方法参数。

     
    

    ps:在Java语言中每实例化一次对象,都会自动调用一次构造方法。

     

    public class Test05 {
    
    public String name;
    
    private int age;
    
    public String getName() {
    
    return name;
    
    }
    
    public void setName(String name) {
    
    this.name = name;
    
    }
    
    //若没有关键字this,则变成this=this,这里的this指的都是局部变量,添加this后就升格为类变量
    
    public int getAge() {
    
    return age;
    
    }
    
    public void setAge(int age) {
    
    this.age = age;
    
    }
    
    }

    (3)通过this关键字可以调用成员方法或成员变量(一般省略this)

     
    
    package two0116;
    
    public class Test05 {
    
    public String name;
    
    private int age;
    
    public void siHI(){
    
    System.out.println("Hi~");
    
    }
    
    public void method(){
    
    this.siHI();
    
    siHI(); //11和12行均可
    
    }
    
    }

    (4)仅在构造方法中访问构造方法使用this(参数1,参数2......);

     
    
    public class Test05 {
    
    public String name="zhang san";
    
    private int age;
    
    public Test05() {
    
    System.out.println("我是无参构造");
    
    }
    
    public Test05(String name, int age) {
    
    this();
    
    this.name = name;
    
    this.age = age;
    
    System.out.println("我是有参构造");
    
    }
    
    public static void main(String[] args) {
    
    new Test05("123",12);
    
    }
    
    }
    
    // 结果为
    
    // 我是无参构造
    
    // 我是有参构造

    注意事项:

    (—):只能在构造方法内部用this调用构造方法,且this应放在构造方法内的第一行且只能出现一次。

    (二):不能在一个类中的两个构造方法中(有参和无参构造)都用this(参数);互相调用,这样会陷入死循环。

    (5)this可作为方法的返回值,例如返回图书类本类的对象

     
    
    public Book getBook(){
    
    return this; //返回Book类的本类对象
    
    }

    人类完整版

     
    
    public class People {
    
    String name;
    
    int age;
    
    public People() {
    
    }
    
    public People(String name, int age) {
    
    this.name = name;
    
    this.age = age;
    
    }
    
    public People getPeople(){
    
    return this;
    
    }
    
    public void say(){
    
    System.out.println("*****");
    
    }
    
    }
     
    

    2.super关键字

    成员变量

    this.成员变量 - 访问本类成员变量

    super.成员变量 -访问父类成员变量

    成员方法

    this.成员方法 - 访问本类成员方法

    super.成员方法 -访问父类成员方法

    构造方法

    在构造方法内第一行 this(有参或空参) -访问本类构造方法

    在子类构造方法内第一行 super(有参或空参) -访问父类构造方法

    ps:this和super很像;参照着来准没错

    展开全文
  • super:super关键字和this的作用类似,将被隐藏的父类的成员变量成员方法变为可见,或者说用来引用被隐藏的父类的成员成员变量成员方法。 使用场景: 1.使用super和this调用成员变量方法 有时会遇到子类中的...

    一、this和super关键字区别
    1.为什么要使用super?
    子类要访问父类方法或变量。
    子类中调用父类的构造方法。

    this:
    this关键字只能用于方法的方法体内,表示对“调用方法的那个对象”的引用。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态代码块中绝对不能出现this。

    super:
    super关键字和this的作用类似,将被隐藏的父类的成员变量和成员方法变为可见,或者说用来引用被隐藏的父类的成员成员变量和成员方法。

    二、使用场景:
    1.使用super和this调用成员变量和方法

    有时会遇到子类中的成员变量或方法与父类中的成员变量或方法同名。因为子类的成员变量或方法名优先级高,所以子类的同名成员变量或方法就隐藏了父类的成员变量或方法,就需要用到super。看不懂看代码,自己试着理解

    class Country{
        String name;
        void value() {
            name = "china";
        }
    }
    public class City extends Country{
        String name;
        void value() {
            name = "Xian";
            super.value();
            //不调用此方法时,super.name返回的是父类的成员变量的值null
            System.out.println(name);
            System.out.println(super.name);
        }
        public static void main(String[] args) {
            City c=new City();
            c.value();
        }
    }
    //运行结果:
    //Xian
    //china
    

    为了在子类中引用父类中的成员变量name和方法value(),在代码中使用了super、super.name和super.value()。若不调用super.value(),super.name返回父类的成员变量默认值null,调用此方法时,super.value()方法把成员变量name赋值为China,再利用super.name调用父类的成员变量的值。另外,要注意的是super.name 调用的是父类的成员变量的值

    class Country{
        String name="shanxi";
        String value(String name) {
            name = "china";
            return name;
        }
    }
    
    public class City extends Country{
        String name;
        String value(String name) {
            name = "Xian";
            super.value("失败");
            //不调用此方法时,super.name返回的是父类的成员变量的值null
            System.out.println(name);
            System.out.println(super.name);
            return name;
        }
        public static void main(String[] args) {
            City c=new City();
            c.value("成功");
        }
    //Xian
    //shanxi
    

    此时,super.name返回的值是父类成员变量的值shanxi,而此时的super.value()方法是不起作用的。

    2.用super和this调用构造方法

    
    class Person{
        public static void prt(String s){
            System.out.println(s);
        }
        Person(){
            prt("A Person");
        }
        Person(String name){
            prt("A Person name is:"+name);
        }
    }
    
    
    public class Chinese extends Person{
        Chinese(){
            super();//调用父类的无参构造方法(1)
            prt("A chinese");//(4)
    
        }
        Chinese(String name){
            super(name);//调用父类具有相同形参的构造方法(2)
            prt("his name is:"+name);
        }
        Chinese(String name,int age){
            this(name);//调用当前子类中具有相同形参的构造方法(3)
            prt("his age is:"+age);
    
        }
    
        public static void main(String[] args) {
            Chinese cn=new Chinese();
            cn=new Chinese("zhiwen");
            cn=new Chinese("zhiwen",38);
    
        }
    
    //A Person
    //A chinese
    //A Person name is:zhiwen
    //his name is:zhiwen
    //A Person name is:zhiwen
    //his name is:zhiwen
    //his age is:38
    

    在这段代码中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟上适当的参数,因此它的意义也就有了新的变化。super后加参数表示用来调用父类中具有相同形式的参数的构造方法,如(1)和(2)处。this后加参数表示调用的是当前类具有相同形式参数的构造方法,如(3)处。当然,在Chinese的各个重载构造方法中,this和super的一般用法仍可使用,比如(4)处,你可以将它替换为“this.prt”(因为它继承了父类中的那个prt方法)或者使用“super.prt”(因为它父类中的方法且可以被子类访问到),他照样可以运行,但这样似乎有点画蛇添足的感觉。

    3.子类的构造方法如果要引用super的话,必须把super放在方法的首行

    class Base{
        Base(){
            System.out.println("Base");
        }
    }
    public class Checket extends Base{
        Checket(){
            super();//调用父类的构造方法,一定要放在这个方法的首个语句
            System.out.println("Checket");
        }
    
        public static void main(String[] args) {
            Checket c=new Checket();
    
        }
    //Base
    // Checket
    }
    
    

    如果想使用super调用父类构造的方法,但是没有放在第一行的话,那么在super之前的语句,肯定是为了满足自己想要完成某些行为的语句,但是又用super调用父类的构造方法,那么以前所做的修改就都回到以前了,就是说又成了父类的构造方法了。

    总结
    1.不能同时出现在一个同一个构造函数调用其他构造函数
    super(参数):调用父类中的某一个构造方法,应该为构造方法中的第一条语句。
    this(参数):调用本类中另一种形式的构造方法,应该为构造方法中的第一条语句。
    this()和super()不能同时出现在一个构造方法里面,因为this必然会调用其他构造方法,其他构造方法中必然也会有super语句的存在,在同一个构造方法里面有相同的语句就失去了语句的意义,编译也不会通过。
    2.调用构造函数的区别:
    super:引用当前对象的直接父类中的成员,用来访问直接父类中被隐藏的成员变量或方法。父类与子类中有相同的成员时使用,如:super.变量名或super.成员方法名(实参)。
    this:代表当前对象名,在程序中易产生二义性之处,应使用this来指明当前对象。如果方法的形参与类中的成员变量同名,这时需用this来指明成员变量名。
    3.使用的前提不一样:
    super关键字必须要有继承才能使用;
    this关键字不需要存在继承也可以使用。
    4.其他:
    调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含的调用super(),如果父类中
    没有这种构造方法,那么在编译的时候会报错。

    this和super都指的是对象,所以均不可以在static方法中使用。

    展开全文
  • 一.this关键字 this: this代表本类的引用,或者是指该类的一个对象,代表着方法的调用者,哪个对象调用的这个方法,方法中的this就代表这个对象.例如set,get 方法中的this: public class Teacher { //定义私有成员...

     目  录 

    一.this关键字

    this:

    为什么要有this关键字呢?

    在非静态方法中,始终隐藏着一个对象this:

    this关键字什么时候不能省略呢?

    二.super关键字​

    super:

    为什么new子类会先调用父类的  构造方法  ?​

    super关键字什么时候不能省略呢? 

     三.this关键字和super关键字的区别​

    this关键字和super关键字的相同点!


    一.this关键字

    this:

            this代表 本类的引用 ,或者是指该类的一个对象,代表着方法的调用者,哪个对象调用的这个方法,方法中的this就代表这个对象.例如set,get 方法中的this:

    public class Teacher {
        //定义私有成员变量
        private String name;
        private int age;
       
        //get,set方法中的this就代表了Teacher这个当前类,Teacher这个类调用的name这个属性
        public void setName(String name){
            this.name=name;                
        }
        public String getName(){
            
            return name;
        }
    
        public int getAge() {
            
            return age;
        }
    
        public void setAge(int age) {
            
            this.age = age;
        }
    
    }
    

    为什么要有this关键字呢?

    当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题,如下图:

    如果加入了this关键字,就会有如下效果: 

    在非静态方法中,始终隐藏着一个对象this:

    public class Test2 {
        int num=90;  
    
        public void a(){         
            System.out.println(this.num);      //这个this加或者不加都不会报错!
        }
    }
    

    this关键字什么时候不能省略呢?

    在实例方法(例如set和gat方法)中或者构造方法中,需要区分局部变量和实例变量时,this便不能省略.

    补:当前构造方法需要调用另一个本类构造方法时,"this();"这个语句需要放在构造方法的第一行.

    二.super关键字

    super:

            在类的方法中使用,代表 父类的空间表示或者父类的引用 .在子类中的方法使用super,可以 访问父类的数据(成员变量,成员方法).

    为什么new子类会先调用父类的  构造方法  ?

    每个子类的构造方法中的第一行,都有一条默认的super();语句去调用父类的空参构造方法先来完成父类的初始化.所以new子类时会先执行默认的隐藏的super();语句,就会先调用父类的构造方法.

    public class Fu {      //定义父类
        public Fu(){
            System.out.println("父类构造方法执行了");
        }
    }
    public class Zi extends Fu {       //定义子类继承Fu类
        public Zi(){ 
            System.out.println("子类构造方法执行了");
        }
    }
    public class Test3 {
        public static void main(String[] args) {
            Zi z=new Zi();      //创建了一个子类对象
        }
    }

    输出结果:

    super关键字什么时候不能省略呢? 

    ​​​​​​​子类与父类中存在同名的变量或属性,如果在子类中访问父类中的属性,那么super不可以省略!

     三.this关键字和super关键字的区别

    • this代表的是本类对象的引用
    • 调用成员变量 :       this.成员变量         调用本类的成员变量
    • 调用构造方法 :      this()     调用本类的无参构造方法    this(...)        调用本类的有参构造方法
    • 调用成员方法 :     this.成员方法         调用本类的成员方法
    • this可以单独使用.      例如System.out.println(this);

     

    • super代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
    • 调用成员变量 :       super.成员变量     调用父类的成员变量
    • 调用构造方法 :      super()    调用父类的无参构造方法   super(...)       调用父类的构造方法
    • 调用成员方法 :     super.成员方法     调用父类的成员方法
    • super不可以单独使用,必须带一个.    例如:System.out.println(this);

    注意:this();与super();两个不可共存,都存在的化会编译报错.

    this关键字和super关键字的相同点!

    • 都可以存在实例方法和构造方法中.
    • 都不能使用在静态方法中.
    • 大部分情况下可以省略.
    • 只能出现在构造方法的第一行.

    (小编也在努力学习更多哟!以后会多多分享哒!)

    希望对友友们有所帮助!!!!

    展开全文
  • thissuper关键字讲解

    2020-12-17 21:40:12
    一、this关键字 this是一个引用,它指向自身的这个对象。 看内存分析图: 假设我们堆内存new了一个对象,这个对象里面你想象着他有一个引用thisthis指向这个对象自己,所以这就是this,这个new出来的...
  • 一、this关键字的用法 this关键字代表当前对象的引用,用当前类中。主要有三个用法 this(),代表当前类中调用其他的构造方法,并且只能构造方法中写,只能调用一次,只能写第一...二、super关键字的用法 super
  • this super 的区别、用法及注意 this 用法一: 访问调用本类的属性方法(受访问属性限制) 实现: this.XX 用法二: 本类的构造方法中调用本类...3、this()和super()不能共存于一个构造方法中,不能使用
  • Java中的this和super关键字全面解析

    千次阅读 2021-02-26 08:22:19
    一、this和super关键字区别this表示当前对象:this.属性 区别成员变量局部变量this.() 调用本类的某个方法this() 表示调用本类构造方法,只能用构造方法的第一行语句。this关键字只能出现非static修饰的代码中...
  • java中this和super关键字

    2021-10-03 21:30:03
    1、this关键字 this() 代表本类中的构造方法中调用另一个构造方法 必须放在构造方法的第一句,不能出现两个 ...2、super关键字 super() 代表本类中父类的构造方法,也只能写第一句 父类的构
  • 3.super和this不能同时调用构造方法,因为this也必须构造方法的第一个 2.this和super区别: 代表的对象不同: this:代表本身调用者这个对象 super:代表父类对象的引用 前提: this:没有继承也可以使用 ...
  • this super 关键字的作用

    千次阅读 2020-11-01 19:47:37
    this super 关键字的作用   this 是对象内部指代自身的引用,同时也是解决成员变量局部变量同 名问题;this 可以调用成员变量,不能调用局部变量;this 也可以调用成员 方法,但是普通方法中可以省略 this...
  • Java中this关键字和super关键字* 一个对象对应一个thisthis是一个变量,是一个引用。this保存当前对象的内存地址指向自身。 super关键字代表的就是“当前对象”的那部分父类型特征。 this和super出现实例方法...
  • 先简单介绍一下this 和super 一、this  this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。  this的用法java中大体可以分为3种: 1、普通的直接引用 this相当于是指向当前对象本身。 2...
  • 使用this可以引用成员变量成员方法 例: public class Demo { int num=0; //成员变量 public Demo(int num){ //有参构造 this.num=num; } public Demo(){ //无参构造方法里为成员初始化值 this(5); ...
  • 静态方法当中不允许出现 this 关键字 super: 代表对当前对象的直接父类对象的引用 可以调用父类的非 private 成员变量方法 super(); 可以调用父类的构造方法,只限构造方法中使用,且必须是第一条...
  • this super 关键字的区别

    千次阅读 2019-10-16 22:11:17
    方法中使用本类属性,都会隐含地使用this关键字,当然也可以明确使用this可以看成是一个变量,它的值就是当前对象的引用 this关键字只能方法内部使用,表示对“调用方法的那个对象”的引用如果是同一类...
  • 主要介绍了java中thissuper关键字使用方法的相关资料,希望通过本文能帮助到大家,让大家彻底理解应用java中this与super,需要的朋友可以参考下
  • this表示当前对象引用(并不是当前对象),可以借助this来访问对象的字段方法。 this关键字的作用: ...super关键字的作用: 调用父类的构造方法 去访问被隐藏的父类的属性 去调用被覆写的父类的方法 ...
  • this关键字与super关键字详解

    万次阅读 多人点赞 2018-02-02 12:17:03
    一.this关键字 1.实例一: (1)需求:使用Java类描述一个动物; (2)实例: class Animal{ String name; //成员变量 String color; public Animal(String n,String c){ name = n; color = c; } ...
  • 构造方法是一个类的对象通过new关键字创建自动调用的,程序中不能向调用其他方法一样通过方法名(也就是类名)来调用。但如果一个类有多个构造方法,可以一个构造方法中通过this(paras…)来调用其他的构造...
  • 首先来了解下static 关键字 ...当静态方法加载进内存进栈,如果静态方法中有this super 关键字时this和super也被加载到了内存,但是这个时候并没有对象的引用,this和super没有初始化...
  • #this关键字使用方法代码分析 package basic.Filea; /** * this的介绍 * this是一个引用,this变量保存了内存地址指向自己 * 每一个对象都有一个this * this不能出现static静态方法中 * 1.this的使用方法有...
  • 简述java中this和super关键字的区别作用

    千次阅读 多人点赞 2019-04-09 08:58:20
    JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引用,...
  • 一.super关键字的用法有三种: 1.子类的成员方法种,访问父类的成员变量(重名或不重名)。 public class Fu3 { int num = 10; } public class Zi3 extends Fu3{ int num = 20; public void method(){...
  • 主要介绍了Java编程中this关键字与super关键字的用法示例,super是this的父辈,继承过程中两个关键字经常被用到,需要的朋友可以参考下
  • ①类进行初始化,初始化的简便方法(适用于eclipse) Source→Generate Constructor using Fields…→Generate 具体的构造方法中的内容这我就不解释了,相信大家应该都知道 ②Salary类使用super关键字调用父类的...
  • This关键字 1.this可以用来修饰:属性,方法,构造器。...但是一般选择省略 “this.”,特殊情况下,当属性形参同名,必须使用this.变量”的 方式表明此变量是属性,而非形参。 2.2类的构造器中,我们使用...
  • 阿里面试题:说一下JAVA中THIS和SUPER关键字的底层实现原理 this Java 中,每当一个对象创建后,Java 虚拟机都会给这个对象分配一个指向自身的引用,也就是 this。 同时如果对象是子类对象,则还会有一个 super...
  • this关键字和super关键字的区别

    千次阅读 2018-12-26 23:52:48
    this表示当前对象:  this.属性 区分成员变量局部变量  this.() 调用本类的某个方法 ... this关键字只能出现非static修饰的代码中  super表示父类对象:  super.属性 表示父类对象中的成员变量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 155,542
精华内容 62,216
关键字:

在使用this和super关键字时