• Java关键字this详解


    this关键字概述

    在实例方法或构造函数中,this 是对当前对象的引用调用其方法或构造函数的对象。
    可以使用 this 在实例方法或构造函数中引用当前对象的任何成员。

    this与字段一起使用

    使用this关键字的最常见的情况是字段被方法或构造函数中的参数覆盖,用来区分实例变量和局部变量。

    未使用this:

    public class Point {
        public int x = 0;
        public int y = 0;
            
        //constructor
        public Point(int a, int b) {
            x = a;
            y = b;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    使用this:

    public class Point {
        public int x = 0;
        public int y = 0;
            
        //constructor
        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    构造函数的参数覆盖对象的​​字段,要引用Point字段x,构造函数必须使用this.x

    this与构造函数一起使用

    在构造函数中,使用this关键字调用同一类中的另一个构造函数。这样做称为显式构造函数调用。

    public class Rectangle {
        private int x, y;
        private int width, height;
            
        public Rectangle() {
            this(0, 0, 1, 1);
        }
        public Rectangle(int width, int height) {
            this(0, 0, width, height);
        }
        public Rectangle(int x, int y, int width, int height) {
            this.x = x;
            this.y = y;
            this.width = width;
            this.height = height;
        }
        ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    此类包含一组构造函数。每个构造函数初始化矩形的部分或全部成员变量。构造函数为其初始值不是由参数提供的任何成员变量提供默认值。例如,无参构造函数Rectangle在坐标 0,0 处创建一个 1x1。两参数构造函数调用四参数构造函数,传入宽度和高度,但始终使用 0,0 坐标。和以前一样,编译器根据参数的数量和类型确定要调用的构造函数。
    如果存在,另一个构造函数的调用必须是构造函数的第一行。

    注:this()和super()必须放在构造函数的第一行,this和super不能同时出现在一个构造函数里面。

    在这里插入图片描述

    扩展

    实例变量

    实例变量是指在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。

    类的每个对象维护它自己的一份实例变量的副本。

    局部变量

    定义在方法之中的变量。

    含义

    实例变量:定义在类中但在任何方法之外。(New出来的均有初始化)

    当一个对象被实例化之后,每个实例变量的值就跟着确定;

    实例变量在对象创建的时候创建,在对象被销毁的时候销毁;

    实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;

    访问修饰符可以修饰实例变量;

    实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;

    实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;

    实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObjectReference.VariableName。

    异同

    局部变量要先赋值,再进行运算,而实例变量均已经赋初值。(这是局部变量和实例变量的一大区别)

    实例变量的对象赋值为null。

    局部变量不允许范围内定义两个同名变量。实例变量的作用域在本类中完全有效,当被其他的类调用的时候也可能有效。

    实例变量和局部变量允许命名冲突。

    类变量(静态变量)

    被static关键字修饰的变量。

    类方法

    static修饰的方法。

    实例方法

    由类创建实例调用。

    class A {
        public void instanceMethod() {
            System.out.println("实例方法");
        }
    
        public static void staticMethod() {
            System.out.println("静态方法");
            //编译报错
            instanceMethod();
            new A().instanceMethod(); 
        }
    }
    
    class B {
        public void callInstanceMethod() {
            //实例方法。
            new A().instanceMethod();
            //静态方法。
            A.staticMethod(); 
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述

    不以物喜,不以己悲

  • 相关阅读:
    【密码学篇】虚拟专用网技术原理与应用(商密)
    [附源码]计算机毕业设计疫情期间小学生作业线上管理系统Springboot程序
    Linux防火墙设置开机自启/永久开机不启动
    SSM酒店管理系统的设计与实现毕业设计源码260839
    CSS3实现动画加载效果
    Java 实现视频Mov转Mp4
    【CV】Landslide4Sense-2022
    主从复制是怎么实现的?
    【ECMAScript6】类Class
    Python实现自动更换IP的方法
  • 原文地址:https://blog.csdn.net/qq_35764295/article/details/126119371