一、this关键字概述

1. this作为对象的引用,它总是指向调用该方法的对象

2. this的最大作用:让类中的一个方法访问该类中的另一个方法或实例变量

二、this关键字的两种用法

1. 在方法中引用调用该方法的对象

public class Dog
{
public void jump()
{
System.out.println("正在跳跃");
} public void run()
{
// 使用this引用调用run()方法的对象
this.jump();
System.out.ptintln("正在奔跑");
}
}

补1:当this出现在某个方法体中,它所代表的对象是不确定的,但它的类型是确定的(它所代表的只能是当前类的实例),只有当这个方法被调用时,它所代表的对象才被确定下来(谁在调用这个方法,this就代表谁)

补2:Java允许对象的一个成员直接调用另一个成员,可以省略this前缀

补3:省略this前缀只是一种假象,虽然上列程序可以省略jump()方法之前的this,但实际上这个this依然是存在的,我们通常把调用成员变量、方法的对象称为“主调”。在Java语言中,调用成员变量、方法时,主调是必不可少的,即使代码中省略了主调,但实际的主调依然存在。一般来说,如果调用静态成员时省略了前面的主调,那么默认使用该类作为主调;如果调用非静态成员时省略了前面的主调,那么默认使用this作为主调。

补4:同一个类的一个方法调用另外一个方法时,如果被调方法是静态方法,则默认使用类作为调用者;如果被调方法是普通方法,则默认使用this作为调用者。也就是说,表面上看起来某些方法可以被独立执行,但实际上还是使用类或者this来作为调用者。

2. 在构造器中引用该构造器正在初始化的对象

public class ThisInConstructor
{
public int a;
public ThisInConstructor()
{
// 在构造器里定义一个a变量
int a = 0; // 使用this代表该构造器正在初始化的对象
this.a = 6;
}
}

补1:由于构造器是直接使用new关键字来调用,而不是使用对象来调用的,所以this在构造器中代表该构造器正在初始化的对象。(要知道,在普通实例方法中使用this时,由于普通实例方法是由对象来调用的,而构造器是由new关键字调用的,且此时存在的对象还不能被外部程序访问<只能在该构造器中通过this来引用>,所以this在构造器中不能代表已生成的对象,而只能代表该构造器正在初始化的对象。)

补2:创建对象的根本途径是构造器,如创建实例“ThisInConstructor th = new ThisInConstructor();”语句正是通过new关键字来调用该类的构造器。

三、static修饰的方法中不能使用this

1. 如果在静态方法中使用this关键字,则this将无法指向合适的对象,因为静态方法是由类来调用的

2. 由于静态方法中不能使用this,所以静态方法不能访问不使用static修饰的普通成员

5. this关键字的更多相关文章

  1. 作为一个新手的Oracle(DBA)学习笔记【转】

    一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...

  2. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  3. java面向对象中的关键字

    1,super关键字 super:父类的意思 1. super.属性名 (调用父类的属性) 2. super.方法名 (调用父类的方法) 3. super([参数列表])(调用父类的构造方法) 注意: ...

  4. 关于javascript中的this关键字

    this是非常强大的一个关键字,但是如果你不了解它,可能很难正确的使用它. 下面我解释一下如果在事件处理中使用this. 首先我们讨论一下下面这个函数中的this关联到什么. function doS ...

  5. transient关键字的用法

    本篇博客转自 一直在路上 Java transient关键字使用小记 1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java ...

  6. Java关键字:static

    通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...

  7. Core Java 总结(关键字,特性问题)

    2016-10-19 说说&和&&的区别 初级问题,但是还是加入了笔记,因为得满分不容易. &和&&都可以用作逻辑与的运算(两边是boolean类型), ...

  8. Net中的常见的关键字

    Net中的关键字有很多,我们最常见的就有new.base.this.using.class.struct.abstract.interface.is.as等等.有很多的,在这里就介绍大家常见的,并且有 ...

  9. php多关键字查询

      php单一关键字查询 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 tdansitional//EN" "http: ...

  10. Keil> 编译器特有的功能 > 关键字和运算符 > __weak

    __weak 此关键字指示编译器弱导出符号. 可以将 __weak 关键字应用于函数和变量声明以及函数定义. 用法 函数和变量声明 对于声明,此存储类指定一个 extern 对象声明,即使不存在,也不 ...

随机推荐

  1. java中的IO流操作总结

    概要:

  2. 新手springmvc web简单搭建过程-caidachun

    第一次做整了一天,中间各种报错,大佬肯定要嘲笑我了,但还是很有成就敢,现在只知道怎么装配,还不知道为什么,还需要学习.加油 1.新建动态web项目 2. 添加jar包,可以到网上下载,commons- ...

  3. 04_javaSE面试题:方法的参数传递机制

    题目 import java.util.Arrays; /** * @author kevin * @date 2019/7/10 9:46 */ public class Exam4 { publi ...

  4. This compilation unit is not on the build path of java project (此编译单元不在java项目的生成路径上)

    This compilation unit is not on the build path of a Java project 解决办法​ 索发现,大致是因为项目文件缺失. 解决办法:找到项目根目录 ...

  5. <Topological Sort> ( 高频, hard) 269

    . Alien Dictionary 这些就是有向图的边,对于有向图中的每个结点,计算其入度,然后从入度为0的结点开始 BFS 遍历这个有向图,然后将遍历路径保存下来返回即可.下面来看具体的做法: 根 ...

  6. <Matrix> 311 378

    311. Sparse Matrix Multiplication 稀疏矩阵的计算.稀疏矩阵的特点是有大量的0,如果采用暴力算法则比然会有很多无意义的计算. C[ i ][ j ] += A[ i ] ...

  7. numpy中多维数组的绝对索引

    这涉及到吧多维数组映射为一维数组. 对于3维数组,有公式: def MAP(x,y,z): return y_s * z_s * x + z_s * y + z 此公式可以推广到N维 测试代码:(两个 ...

  8. Sql Server 判断表是否存在方法总结

    #使用场景: 1.在创建表之前,需要先判断该表是否已经存在: 2.在删除表之前,需要先判断该表是否已经存在: #方法总结: 1.判断实体表是否存在的方法: 1).方法一: * from sysObje ...

  9. 1+x证书Web前端开发HTML+CSS专项练习测试题(八)

    1+x证书Web前端开发HTML+CSS专项练习测试题(八) 官方QQ群 1+x 证书 Web 前端开发 HTML+CSS 专项练习测试题(八) http://blog.zh66.club/index ...

  10. IT兄弟连 Java语法教程 数据类型转换

    类型转换是将一个值从一种类型更改为另一种类型的过程.例如,可以将String(字符串,字符串是Java中非常特殊的数据类型,字符串属于引用类型,但是可以像基本类型一样使用字面值赋值)类型数据“456” ...