Java中this的几种用法

简介:   Java中this的几种用法,this关键字必须放在非静态方法里面  this关键字代表自身,在程序中主要的使用用途有以下几个方面:  ?使用this关键字引用成员变量  ?使用this关键字在自身构造方法内部引用其它构造方法  ?使用this关键字代表自身类的对象  ?使用this关键字引用成员方法  引用成员变量  在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,有些时候可以省略,有些时候不能省略。

  Java中this的几种用法,this关键字必须放在非静态方法里面

  this关键字代表自身,在程序中主要的使用用途有以下几个方面:

  ?使用this关键字引用成员变量

  ?使用this关键字在自身构造方法内部引用其它构造方法

  ?使用this关键字代表自身类的对象

  ?使用this关键字引用成员方法

  引用成员变量

  在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,有些时候可以省略,有些时候不能省略。首先看一下下面的代码:

  /**

  *使用this引用成员变量

  */

  publicclassReferenceVariable{

  privateinta;

  publicReferenceVariable(inta){

  this.a=a;

  }

  publicintgetA(){

  returna;

  }

  publicvoidsetA(inta){

  this.a=a;

  }

  }

  在该代码的构造方法和setA方法内部,都是用this.a引用类的成员变量。因为无论在构造方法还是setA方法内部,都包含2个变量名为a的变量,一个是参数a,另外一个是成员变量a。按照Java语言的变量作用范围规定,参数a的作用范围为构造方法或方法内部,成员变量a的作用范围是类的内部,这样在构造方法和setA方法内部就存在了变量a的冲突,Java语言规定当变量作用范围重叠时,作用域小的变量覆盖作用域大的变量。所以在构造方法和setA方法内部,参数a起作用。

  这样需要访问成员变量a则必须使用this进行引用。当然,如果变量名不发生重叠,则this可以省略。

  但是为了增强代码的可读性,一般将参数的名称和成员变量的名称保持一致,所以this的使用频率在规范的代码内部应该很多。

  引用构造方法

  在一个类的构造方法内部,也可以使用this关键字引用其它的构造方法,这样可以降低代码的重复,也可以使所有的构造方法保持统一,这样方便以后的代码修改和维护,也方便代码的阅读。

  下面是一个简单的示例:

  /**

  *使用this关键字引用构造方法

  */

  publicclassReferenceConstructor{

  inta;

  publicReferenceConstructor(){

  this(0);

  }

  publicReferenceConstructor(inta){

  this.a=a;

  }

  }

  这里在不带参数的构造方法内部,使用this调用了另外一个构造方法,其中0是根据需要传递的参数的值,当一个类内部的构造方法比较多时,可以只书写一个构造方法的内部功能代码,然后其它的构造方法都通过调用该构造方法实现,这样既保证了所有的构造是统一的,也降低了代码的重复。

  在实际使用时,需要注意的是,在构造方法内部使用this关键字调用其它的构造方法时,调用的代码只能出现在构造方法内部的第一行可执行代码。这样,在构造方法内部使用this关键字调用构造方法最多会出现一次。

  代表自身对象

  在一个类的内部,也可以使用this代表自身类的对象,或者换句话说,每个类内部都有一个隐含的成员变量,该成员变量的类型是该类的类型,该成员变量的名称是this,实际使用this代表自身类的对象的示例代码如下:

  /**

  *使用this代表自身类的对象

  */

  publicclassReferenceObject{

  ReferenceObjectinstance;

  publicReferenceObject(){

  instance=this;

  }

  publicvoidtest(){

  System.out.println(this);

  }

  }

  在构造方法内部,将对象this的值赋值给instance,在test方法内部,输出对象this的内容,这里的this都代表自身类型的对象。

  引用成员方法

在一个类的内部,成员方法之间的互相调用时也可以使用“this.方法名(参数)”来进行引用,只是所有这样的引用中this都可以省略,这里就不详细介绍了。

相关文章
|
3月前
|
Java
Java中的equals()与==的区别与用法
【7月更文挑战第28天】
64 12
|
1月前
|
Java
Java 正则表达式高级用法
Java 中的正则表达式是强大的文本处理工具,用于搜索、匹配、替换和分割字符串。`java.util.regex` 包提供了 `Pattern` 和 `Matcher` 类来高效处理正则表达式。本文介绍了高级用法,包括使用 `Pattern` 和 `Matcher` 进行匹配、断言(如正向和负向前瞻/后顾)、捕获组与命名组、替换操作、分割字符串、修饰符(如忽略大小写和多行模式)及 Unicode 支持。通过这些功能,可以高效地处理复杂文本数据。
|
1月前
|
存储 Java 数据处理
Java 数组的高级用法
在 Java 中,数组不仅可以存储同类型的数据,还支持多种高级用法,如多维数组(常用于矩阵)、动态创建数组、克隆数组、使用 `java.util.Arrays` 进行排序和搜索、与集合相互转换、增强 for 循环遍历、匿名数组传递以及利用 `Arrays.equals()` 比较数组内容。这些技巧能提升代码的灵活性和可读性,适用于更复杂的数据处理场景。
|
1月前
|
安全 Java
Java switch case隐藏用法
在 Java 中,`switch` 语句是一种多分支选择结构,常用于根据变量值执行不同代码块。除基本用法外,它还有多种进阶技巧,如使用字符串(Java 7 开始支持)、多个 `case` 共享代码块、不使用 `break` 实现 “fall-through”、使用枚举类型、使用表达式(Java 12 及以上)、组合条件以及使用标签等。这些技巧使代码更加简洁、清晰且高效。
|
2月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
33 2
|
3月前
|
Java
java中return,break以及continue的用法
java中return,break以及continue的用法
43 10
|
4月前
|
Java
深入理解 Java 8 函数式接口:定义、用法与示例详解
深入理解 Java 8 函数式接口:定义、用法与示例详解
260 2
|
3月前
|
Java 编译器 数据库连接
Java面试题:什么是Java中的注解以及如何自定义注解?举例说明注解的经典用法
Java面试题:什么是Java中的注解以及如何自定义注解?举例说明注解的经典用法
72 0
|
4月前
|
Java
Java 中 MessageFormat.format 用法
Java 中 MessageFormat.format 用法
44 1
|
4月前
|
Java API 容器
Java 8 的流库:Filter、Map、FlatMap 及 Optional 的概念与用法
【6月更文挑战第9天】Java 8 引入了许多强大的新特性,其中流库(Stream API)和 Optional 类极大地简化了集合操作和空值处理。本文将深入探讨 filter、map、flatMap 以及 Optional 的概念和用法,并提供示例代码来展示其实际应用。
66 4