• 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

    在这里插入图片描述

    不以物喜,不以己悲

  • 相关阅读:
    中年帕金森:守护健康,从容面对生活挑战
    LeetCode 70. 爬楼梯
    【利用冒泡排序的思想模拟实现qsort函数】
    微服务分布式基于Springcloud的拍卖管理系统597wx
    为什么说 java中的Synchronized是非公平锁
    公共用房管理系统有哪些功能和范围?
    我在使用Winform7.0开发海康相机应用的时候系统悄无声息的退出
    VEX —— Attribute type metadata
    parallelStream的讲解
    【愚公系列】2022年11月 .NET CORE工具案例-.NET Core执行JavaScript
  • 原文地址:https://blog.csdn.net/qq_35764295/article/details/126119371