Java中的两个特殊变量this和super

原创 2001年05月11日 13:28:00

                             Java中的两个特殊变量this和super
Wayne


  在Java中有两个非常特殊的变量:this和super,这两个变量在使用前都是不需要声明的。this变量使用在一个成员函数的内部,指向当前对象,当前对象指的是调用当前正在执行方法的那个对象。super变量是直接指向超类的构造函数,用来引用超类中的变量和方法。因此它们都是非常有用的变量,下面我想介绍一下this和super的使用方法。

  1、this

  让我们先看一段代码吧:

  class PersonInformation

  {

   String name,gender,nationality,address;

   int age;

   void PersonInformation(String p_name,String p_gender,String p_nationality,String p_address,int p_age)

   {

    name=p_name;

    gender=p_gender;

    nationality=p_nationality;

    address=p_address;

    age=p_age;

   }

  }
 
  你会发现,在PersonInformation()函数中这个对象的方法提示可以直接访问对象的成员变量的,而且在同一个范围中,定义两个相同的名字的局部变量是不允许的,如果确实想使类的成员变量和方法的参数或方法自己定义的局部变量同名的话就需要想一种方法使成员变量与更它同名的方法参数或局部变量区分开来,这就要使用到this变量。下面我想改写一下上面的代码,使PersonInformation类的构造函数的每个参数都有与对象成员变量相同的名字,而成员变量的初值由参数给出。

  class PersonInformation

   {

    String name,gender,nationality,address;

    int age;

    void PersonInformation(String name,String gender,String nationality,String address,int age)

    {

    this.name=name;

    this.gender=gender;

    this.nationality=nationality;

    this.address=address;

    this.age=age;

    }

   }

  由上一例中,我们可以看出,该构造函数中必须使用this,this在方法体重用来指向引用当前正在执行方法的那个对象实例,this变量的类型总是为包含前执行方法的类,上例中,我们要区别参数name和成员变量name,写成name=name显然是不允许的,在参数或局部变量名与类成员变量同名的时候,由于参数或局部变量的优先级高,这样在方法体中参数名或局部变量名将隐藏同名的成员变量,因此,为了值名成员变量,你必须使用this显示地指明当前对象。

  有时候会遇到这种情况,我们全面的访问当前对象,而不是访问某一个个别的实例对象,我们也可以使用this,并利用Java中的toString()方法(它能够返回一个描述这个对象的字符串)如果把任何一个对象传递到System.out.println方法中,这个方法调用这个对象的toString方法,并打印出结果字符串,所以,我们可以用如下方法System.out.println(this),来打印出任何对方法固有参数的当前状态。

  this还有一个用法,就是构造函数的第一个语句,它的形式是this(参数表),这个构造函数就会调用同一个类的另一个相对的构造函数。请看下面的例子:

  class UserInfo

  {

   public UserInfo(String name)

   {

    this(name,aNewSerialNumber);

   }

   public Userinfo(String name,int number)

   {

    userName=name;

    userNumber=number;

   }

   }

  如果你调用UserInfor newinfotable = new UserInfo("Wayne Zheng")后,就会自动调用UserInfo(String name,int number)构造函数。

   可见,熟练掌握this在Java程序设计过程中是非常重要的
2、super

  在Java中,有时还会遇到子类中的成员变量或方法与超类(有时也称父类)中的成员变量或方法同名,因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量和方法就隐藏了超类的成员变量或方法,但是我们如果想要使用超类中的这个成员变量或方法,此使就需要用到super,请看下面的类。

   class Country

   {

    String name;

    void value()

    {

     name="China";

    }

   }

  下面的子类中,自类的成员变量和方法隐藏了超类的成员变量name和方法value(),

   class City extends Country

    String name;

    void value()

    {

     name="Hefei";

     super.value();

     System.out.println(name);

     System.out.println(super.name);

    }
 
   为了在子类中引用超类中的成员变量name和方法value(),在代码中我们使用了super,super.name和super.value();

   所以显示的结果为

   Hefei

   China

   如果我们想要使用超类的构造函数则应当使用super(参数列表)的形式。

 

 

java中静态方法中为什么不能使用this、super和直接调用非静态方法

这个要从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆...
  • ZhangWangYang
  • ZhangWangYang
  • 2016年05月04日 23:24
  • 6455

Java中this()和super()的注意点

使用super和this应该注意这些: 1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造...
  • u013256816
  • u013256816
  • 2015年09月01日 09:25
  • 4381

【java】this()与super()使用详解

package test; public class ThisTest {     private int i=0;     //第一个构造器:有一个int型形参     ThisTest(i...
  • lzm18064126848
  • lzm18064126848
  • 2015年07月26日 15:48
  • 3762

Java中两个非常特殊的变量:this和super

  • 2008年12月03日 00:18
  • 37KB
  • 下载

Java中的两个特殊变量this和super

在Java中有两个非常特殊的变量:this和super,这两个变量在使用前都是不需要声明的。this变量使用在一个成员函数的内部,指向当前对象,当前对象指的是调用当前正在执行方法的那个对象。super...
  • crurtyx
  • crurtyx
  • 2011年08月31日 10:31
  • 134

JAVA中this与super两个关键字的用法

讨论一下JAVA中this与super两个关键字的用法。 在Java中this通常指当前对象,super通常指父对象,如果想引用当前对象的某种东西,比如当前对象的成员属性或者方法,则可使用this来...
  • q874724218
  • q874724218
  • 2016年02月28日 15:21
  • 121

Lesson_for_java_day09--继承、实例化、构造方法、覆盖、重载、this关键字、super关键字、全局变量和局部变量

/* -------------------------------继承初步------------------------------------------------ 什么是继承: 在面向...
  • u013233075
  • u013233075
  • 2014年04月15日 21:10
  • 644

JAVA面向对象基础:继承、变量隐藏、方法重写、包、修饰符、this、super

本文转载链接地址:http://android.yaohuiji.com/archives/3214 一、继承 1、继承的概念 继承是面向对象的三大特性之一。在语义上继承的意思是照法律或遵照...
  • doov_arthur
  • doov_arthur
  • 2011年11月25日 11:09
  • 2114

Java中super的几种用法并与this的区别,this的特殊用法

1.     子类的构造函数如果要引用super的话,必须把super放在函数的首位. class Base {     Base() {        System.out.println("...
  • y376259159
  • y376259159
  • 2014年09月13日 22:55
  • 334

this & super 这两个关键字的意义和用法

通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量。但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自...
  • u010114993
  • u010114993
  • 2014年05月01日 11:37
  • 850
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中的两个特殊变量this和super
举报原因:
原因补充:

(最多只允许输入30个字)