一、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. 【5】Android Service 与 AIDL

    前言:本系列仅介绍基本大体的使用步骤,而不对每个步骤进行细致的讲解.读者可作为已经对相关内容有所了解后的快速查阅. 一.单应用内Service的使用 Service组件与Activity以IBinde ...

  2. Linux下搭建及配置禅道服务器详细过程-包含软件资源-Dotest-董浩

    Linux环境下搭建禅道管理工具 1:百度云盘下载: 禅道--链接:https://pan.baidu.com/s/1Stu7nOZVIPO5TnpJWjWtiQ 提取码:dnik CentOs操作系 ...

  3. R1-5天

    R语言笔记文档 2019.11.24 R语言的安装 工作目录查看与更改 变量的三种赋值 如何查看R语言帮助 ? args 基础数据类型 基本数据类型 因子.数据框.数组.矩阵.列表.向量 2019.1 ...

  4. python--numpy生成正态分布数据及randint randn normal的使用

    正太分布:也叫(高斯分布Gaussian distribution),是一种随机概率分布 机器学习中numpy.random如何生成这样的正态分布数据,本篇博客记录这样的用法 import numpy ...

  5. python画一片绿叶给你

    怎么用 turtle 画一个 π 字,于是我顺手到网上大致搜了下,发现网上没有画这个 π 字的,接着又用谷歌加英文搜索了下,还是没找到现成的答案. 不过通过这次搜索意外发现了一个有趣的网站,网站上有大 ...

  6. Luogu P3600 随机数生成器

    Luogu P3600 随机数生成器 题目描述 sol研发了一个神奇的随机数系统,可以自动按照环境噪音生成真·随机数. 现在sol打算生成\(n\)个\([1,x]\)的整数\(a_1...a_n\) ...

  7. 试着用workerman开发一个在线聊天应用

    聊天功能是很常见的一种功能,Workerman是一款开源高性能异步PHP socket即时通讯框架. 什么是Workerman? Workerman是一款 开源 高性能异步 PHP socket即时通 ...

  8. 【linux运维】linux系统上忘记密码如何操作

    目录 红帽系统忘记密码操作 红帽系统设置ip,主机名 centos系统忘记密码操作 一.红帽系统忘记密码操作 1)再出现以下界面后按键盘e键 2)进入以下界面后,再次按e键 3)使用上下键选择第2项或 ...

  9. 策略路由PBR(不含track)

    策略路由:是一种依据用户制定的策略进行路由选择的机制.(公义)在特定数据进入路由表前,对其进行操控的方式.(本人定义) 根据作用对象的不同,策略路由可分为本地策略路由和接口策略路由: · 本地策略路由 ...

  10. 如何将Javaweb工程的访问协议由http改为https及通过域名访问?

    将javaweb工程的http访问协议更改为https,需要做一下几部操作: 通过jre生成证书 调整tomcat的配置 调整工程的web.xm配置 具体详细过程如下: 一.生成证书 打开cmd切换到 ...