Dotcpp  >  编程教程  >  Java类和对象  >  Java this关键字

Java this关键字

点击打开在线编译器,边学边练

this是Java的一个关键字,表示某个对象。this可以出现在实例方法和构造方法中,但不可以出现在类方法中。


在构造方法中使用this

this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。


例如:

public class People {
    int leg,hand;
    String name;
    People(String s) {
        name = s;
        this.init(); //可以省略this.,即写成init();
    }
    void init() {
        leg = 2;
        hand = 2;
        System.out.println(name+"有"+hand+"只手"+1eg+"条腿");
    }
    public static void main(String args[]) {
        People boshi = new People("布什");
    }
}


在实例方法中使用this

实例方法只能通过对象来调用,不能通过类名来调用。当this关键字出现在实例方法中时,就代表正在调用该方法的当前对象。


实例方法可以操作类的成员变量,当实例成员变量在实例方法中出现时,一般格式为:

this.成员变量;


当static成员变量在实例方法中出现时,一般格式为:

类名.成员变量;


例如:

class A {
    int x;
    static int y;
    void a() {
        this.x = 10;
        A.y = 20;
    }
}


该A类中的实例方法a中出现了this,this代表使用a的当前对象,所以“this.x”就表示当前对象的变量x,当对象调用方法a时,将10赋给该对象的变量x。当一个对象调用方法时,方法中的实例成员变量就是指分配给该对象的实例成员变量,而static变量和其他对象共享。因此,通常情况下,可以省略实例成员变量名字前面的“this.”以及static变量前面的“类名.”。


例如:

class A {
    int x;
    static int y;
    void a() {
        x = 10; //省略this.
        y = 20; //省略类名.
    }
}


注意:

当实例成员变量的名字和局部变量的名字相同时,成员变量前面的“this.”或“类名.”就不可以省略。


类的实例方法可以调用类的其他方法,对于实例方法调用的一般格式为:

this.方法;


对于类方法调用的一般格式为:

类名.方法;


例如:

class B {
    void b() {
        this.c();
        B.d();
    }
    void c() {
        System.out.println("hi");
    }
    static void d() {
        System.out.println("ok");
    }
}


该B类中的方法b中出现了this,this代表调用方法b的当前对象,所以方法b的方法体中this.c()就是当前对象调用方法c,也就是说,在某个对象调用方法b的过程中,又调用了方法c。由于这种逻辑关系非常明确,一个实例方法调用另-个方法时可以省略方法名字前面的“this.”或“类名.”。


例如:

class B {
    void b() {
        c(); //省略this.
        d(); //省略类名.
    }
    void c() {
        System.out.println("hi");
    }
    static void d() {
        System.out.println("ok");
    }
}


注意:

this不能出现在类方法中,这是因为类方法可以通过类名直接调用,这时可能还没有任何对象诞生。



本文固定URL:https://www.dotcpp.com/course/752

上一课:

Java方法重载

下一课:

Java包

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Java教程
第一章 Java入门
第二章 Java运算符和表达式
第三章 Java流程控制
第四章 Java类和对象
第五章 Java子类与继承
第六章 Java接口与实现
第七章 Java内部类与异常类
第八章 Java常用实用类
第九章 Java输入输出流
第十章 Java数组
Dotcpp在线编译      (登录可减少运行等待时间)