`
finalme
  • 浏览: 656 次
  • 性别: Icon_minigender_1
  • 来自: 长春
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java的this关键字应用

阅读更多
this关键字主要有三个应用:

  一、this调用本类中的属性,也就是类中的成员变量。

  二、this调用本类中的其他方法;

  三、this调用本类中的其他构造方法,调用时要放在构造方法的首行。

下面是网上摘来的:

应用一:引用成员变量。

  

      Public Class Student{
  String name; //定义一个成员变量name

  private void SetName(String name){ //定义一个参数(局部变量)name

  this.name=name; //将局部变量的值传递给成员变量

  }

  }

  如上面这个代码中,有一个成员变量name。同时在方法中有个形式参数,名字也是name。然后再方法中将形式参数name的值传递给成员变量name。虽然我们可以看明白这个代码的含义,但是作为Java编译器它是怎么判断的呢?到底是将形式参数name的值传递给成员变量name,还是反过来讲成员变量name的值传递给形式参数name呢?也就是说,两个变量名字如果相同的话,那么Java如何判断使用哪个变量?此时this这个关键字就起到作用了。This这个关键字其代表的就是对象中的成员变量或者方法。也就是说,如果在某个变量前面加上一个this关键字,其指的就是这个对象的成员变量或者方法,而不是指成员方法的形式参数或者局部变量。为此在上面这个代码中,this.name代表的就是对象中的成员变量,又叫做对象的属性。而后面的name则是方法的形式参数。代码this.name=name就是将形式参数的值传递给成员变量。这就是上面这个代码的具体含义。

  一般情况下,在Java语言中引用成员变量或者成员方法都是以对象名.成员变量或者对象名.成员方法的形式。不过有些程序员即使在没有相同变量的时候,也喜欢使用this.成员变量的形式来引用变量。这主要是从便于代码的阅读考虑的。一看到这个this关键字就知道现在引用的变量是成员变量或者成员方法,而不是局部变量。这无形中就提高了代码的阅读性。不过话说回来,这是this关键字在Java语言中的最简单的应用。从这个应用中,我们可以看出this关键字其代表的就是对象的名字。掌握这个基本的原理之后,再了解后续的一些高级应用,也就是水到渠成的事情了。

  笔者这里只是以一个形式参数为例。其实如果是局部变量的话,也是相同的道理。如在上面的代码中,name不是形式参数,而是一个局部变量。此时Java也会遇到相同的疑惑,即变量名name代表的到底是局部变量还是形式参数?name=name到底代表的是什么含义?根据局部变量的作用域,在方法内部,如果局部变量与成员变量同名的话,那么是以局部变量为准。可是在name=name这个赋值语句中,将局部变量的值赋值给自己,显然并不是很合适。根据代码的含义,本来的意思应该是将局部变量赋值给成员变量。为了更清晰的表达这个含义,为此最好采用如下的书写格式:this.name=name。这里的this关键字含义就是对象名student。为此this.name就表示student.name。这就转换为正规的成员变量应用了。

  应用二:调用类的构造方法。

  在一个Java类中,其方法可以分为成员方法和构造方法两种。构造方法是一个与类同名的方法,在Java类中必须存在一个构造方法。如果在代码中没有显示的体现构造方法的话,那么编译器在编译的时候会自动添加一个没有形式参数的构造方法。这个构造方法跟普通的成员方法还是有很多不同的地方。如构造方法的话一律是没有返回值的。而且也不用void关键字来说明这个构造方法没有返回值。而普通的方法可以有返回值、也可以没有返回值,程序员可以根据自己的需要来定义。不过如果普通的方法没有返回值的话,那么一定要在方法定义的时候采用void关键字来进行说明。其次构造方法的名字有严格的要求,即必须与类的名字相同。也就是说,Java编译器发现有个方法与类的名字相同才把其当作构造方法来对待。而对于普通方法的话,则要求不能够与类的名字相同,而且多个成员方法不能够采用相同的名字。在一个类中可以存在多个构造方法,这些构造方法都采用相同的名字。只是形式参数不同。Java语言就凭用户参数的参数来判断调用那个构造方法。

      this关键字除了可以调用成员变量之外,还可以调用构造方法。如下面的代码:

  

      public class Student{ //定义一个类,类的名字为student。
  public Student(){ //定义一个方法,名字与类相同故为构造方法

  this(“luobo”)

  }

  public Student(String name){ //定义一个带形式参数的构造方法

  }

  }

  在上面这个代码中,笔者定义了两个构造方法,一个带参数,另一个没有带参数。构造方法都不会有返回值,不过由于构造方法的特殊性,为此不必要在构造方法定义时带上void关键字来说明这个问题。在第一个没有带参数的构造方法中,笔者使用了this(“luobo”)这个代码。这个代码表示什么含义呢?在构造方法中使this关键字表示调用类中的构造方法。如果一个类中有多个构造方法,因为其名字都相同,跟类名一致,那么这个this到底是调用哪个构造方法呢?其实,这跟采用其他方法引用构造方法一样,都是通过形式参数来嗲用构造方法的。如上例中,this关键字后面加上了一个参数,那么就表示其引用的是带参数的构造方法。如果现在有三个构造方法,分别为不带参数、带一个参数、带两个参数。那么Java编译器会根据所传递的参数数量的不同,来判断该调用哪个构造方法。从上面这个示例中可以看出,this关键字不仅可以用来引用成员变量,而且还可以用来引用构造方法。

  不过如果要使用这种方式来调用构造方法的话,有一个语法上的限制。一般来说,利用this关键字来调用构造方法,只有在无参数构造方法中第一句使用this调用有参数的构造方法。否则的话,翻译的时候,就会有错误信息。这跟引用成员变量不同。如果引用成员变量的话,this关键字是没有位置上的限制的。如果不熟悉这个限制的话,那么还是老老实实的采用传统的构造方法调用方式为好。虽然比较麻烦,但是至少不会出错。

  应用三:返回对象的值。

  this关键字除了可以引用变量或者成员方法之外,还有一个重大的作用就是返回类的饮用。如在代码中,可以使用return this,来返回某个类的引用。此时这个this关键字就代表类的名称。如这个代码在上面这个student类中,那么这个代码其代表的含义就是return student。可见,这个this关键字除了可以引用变量或者成员方法之外,还可以做为类的返回值。这才是this关键字最引人注意的地方。

  在使用this关键字的时候,需要注意一个细节问题。在笔者谈到的第一个案例中,利用this关键字来引用成员变量。即this.name=name。这个语句是将局部变量或则形式参数赋值给成员变量。其实,此时这个this关键字不加也可以起到类似的效果。即上面这个语句中,与name=name这个语句时相同的。即Java编译器会自动将第一个name当作成员变量来对待。而将等号右边的name变量当作形式参数。虽然这么书写代码,可以节省this这几个字符的输入。但是对于代码的阅读是不利的。为此,从代码的阅读性考虑,如果成员变量与形式参数或者局部变量相同的话,那么最好是使用this.成员变量(成员方法)的方式来引用成员变量。虽然语法上没有错误,但是作为一个高级的JAVA程序员,在代码书写的规范上,也不能够忽视。

分享到:
评论

相关推荐

    Java语言中This关键字应用浅析

    Java语言中This关键字应用浅析,看完后帮助于JAVA中类的操作。

    Java零基础-this关键字.md

    读者将学习什么是this关键字以及它在实例方法、构造方法和内部类中的具体应用。此外,还将探讨this关键字与静态成员、方法参数和方法重载之间的关系。 能学到什么: 理解Java中this关键字的含义和作用。 掌握this...

    java中的this关键字完全解读

    一文详解java中的this关键字 最近在看《java编程思想》感觉解决了很多以前学习Java遇到的疑惑。这里详细探讨一下this关键字的几大使用范畴:(应该也就只有以下几种用法) 首先this关键字只能在非静态方法内部使用。...

    Javaw基础课程笔记.zip

    Java 视频教程目录: day01、Java 语言发展史_JDK的安装_HelloWorld程序的...day09:Java 类的继承_super和this关键字。 day10:Java 接口。 day11:Java final 关键字_内部类_成员内部类_局部内部类_匿名内部类。

    Java入门教程(微学苑)-part1

    3.13 Java this关键字详解 49 3.14 使用this区分同名变量 49 3.15 作为方法名来初始化对象 50 3.16 作为参数传递 51 3.17 Java方法重载 52 3.18 Java类的基本运行顺序 53 3.19 Java包装类、拆箱和装箱详解 54 3.20 ...

    java中this与super关键字的使用方法

    主要介绍了java中this与super关键字的使用方法的相关资料,希望通过本文能帮助到大家,让大家彻底理解应用java中this与super,需要的朋友可以参考下

    “this”在Java中的应用分析.pdf

    java提供了丰富的类(Class)、接口(Interface)以及相应的方法(Method)。使用这些类或接口,用户可以定义自己的类或子类,并以这些类为模板创建对象(Objec)t。关键字"this"与"对象"密切相关,并使程序设计变得规范、...

    java编程基础,应用与实例

    9.2 final关键字 138 9.3 接口 139 9.4 Cloneable 接口 143 9.5 Enumeration接口 144 9.6 巩固练习 145 第10章 内隐类(inner class) 146 10.1 静态类(static class) 146 10.2 成员类(member class)...

    Java2实用教程.rar

    4 5this关键字 4 6包 4 6 1包语句 4 6 2import语句 4 6 3将类打包 4 7访问权限 4 7 1私有变量和私有方法 4 7 2共有变量和共有方法 4 7 3友好变量和友好方法 4 7 4受保护的成员变量和方法 4 7 5public类与友好类 4 8...

    学习Java第十四天练习代码Day14.rar

    学习Java第十四天的练习代码,包含super关键字、继承中对象的创建、this关键字与super关键字、多态的基本应用

    Java语音学习,基础教程

    掌握面向对象编程:了解类和对象的概念,学会封装、继承和多态,并理解构造器、super和this关键字的用法,以及接口和抽象类的概念和权限修饰符。 熟悉常用API:包括Date、DateFormat、Calendar、System和...

    JAVA语言程序设计【高清版】.pdf

    第1章 Java语言 1 1.1 Java语言简介 1 1.1.1 Java语言的问世 1 1.1.2 Java语言的组成 1 1.2 开发环境的安装 3 1.3 一个简单的Java应用程序 4 1.3.1 Java应用程序示例 4 1.3.2 使用Java核心API文档 7...

    Java面向对象程序设计笔记

    2.3.this关键字: 10 2.4.子类对象的构造和初始化: 11 2.5.方法的覆盖: 11 2.6.各种数据类型之间的相互转换: 12 3.静态成员 13 4. Final关键字: 13 5. 抽象类: 13 6. 接口 14 7. 接口与抽象类...

    Java开发详解.zip

    020509_【第5章:面向对象基础】_this关键字笔记.pdf 020510_【第5章:面向对象基础】_static关键字笔记.pdf 020511_【第5章:面向对象基础】_理解main方法笔记.pdf 020512_【第5章:面向对象基础】_代码块笔记.pdf ...

    java程序设计实验指导代码

    5.4 实验3 变量的作用域和this关键字 5.5 实验4 方法重载 第6章 继承和多态 6.1 预备知识 6.2 实验1 子类的派生与方法覆盖 6.3 实验2 多态性与动态绑定 6.4 实验3 嵌套类和内部类 第7章 包、接口和常用工具类...

    JAVAJsp的网上书店系统

    At present JAVA is the hottest programming language for WEB development, This text described the characteristics of JAVA and JSP technology and the state of operating on Internet, It introduced the ...

    Java 基础核心总结 +经典算法大全.rar

    与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 ...

    JAVA基础课程讲义

    this关键字 65 static 关键字 66 静态初始化块(经常用来初始化类,加载类信息时执行!) 67 package 68 JDK中的主要包 68 import 68 eclipse的使用 69 继承(extend, inheritance) 70 为什么需要继承?继承的作用? ...

    张孝祥Java就业培训教程.pdf

    本书不仅全面的介绍了Java语言本身,最重要还交会读者去掌握编程思想,找到编程感觉,而不是死记硬背语言本身,书中涉及到的应用问题分析,远远超了一个Java程序员在学习和应用Java过程中所有可能碰到的问题。...

    java自学之道

    5、this关键字 5.1 this方法应用举例 6. Static关键字 6.1 static应用举例 7. super关键字 7.1 super应用举例 8. abstract关键字 9. final关键字 9.1 final介绍 9.2 final使用注意事项 三、继承 1、继承的概念 1.1 ...

Global site tag (gtag.js) - Google Analytics