|
基础:Java中两个特殊变量this和super
( 2008/3/3 11:41 )
在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; } } 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("aaron")后,就会自动调用UserInfo(String name,int number)构造函数。 可见,熟练掌握this在Java程序设计过程中是非常重要的 在Java中,有时还会遇到子类中的成员变量或方法与超类(有时也称父类)中的成员变量或方法同名,因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量和方法就隐藏了超类的成员变量或方法,但是我们如果想要使用超类中的这个成员变量或方法,此使就需要用到super,请看下面的类。 class Country { String name; void value() { name="China"; } } 下面的子类中,自类的成员变量和方法隐藏了超类的成员变量name和方法value(), class City extends Country String name; void value() { name="Beijing"; super.value(); System.out.println(name); System.out.println(super.name); } 所以显示的结果为 Beijing China 如果我们想要使用超类的构造函数则应当使用super(参数列表)的形式。
|
·资料分享:Java开发中该注意的一些东西 (9-25) ·Java安全:运用加密技术保护Java源代码 (9-25) ·认识java JVM与c/c++的执行效率 (9-23) ·教你轻松提高Java代码的性能 (9-19) ·Java开发最容易犯的几种错误 (9-19) 热议文章·对于北电信市场一线的一些看法 (9-17) 评:固定电话的优势比移动的优势几乎没有,如果有的话那可能是号码比较短:)中国人比较念... ·评论:如何击中中移动的软肋 (9-11) ·我的e家遭家庭计划冲击 中移动掀家庭市场之战 (9-7) ·联通华盛易主中国电信 新联通组建终端公司华凯 (9-7) ·联通网通合并后名称暂定为联合网络通信公司 (8-27) ·中国电信获得800MHz频率几成定局 (8-19) ·3G发牌猜想:三家运营商将同领TD牌照? (8-19) ·浅谈IPTV与DVB系统的融合 (9-27) ·光纤到户(FTTH)接入全解析 (9-27) ·3G视频点播系统中流媒体协议栈的解决方案 (9-27) ·基于MPEG-4和RTP的网络视频监控系统研究 (9-27) ·网络视频监控浅析 (9-27) ·视讯会议业务发展分析 (9-27) |
|||||||||||||||
|