Java学习----Day4 对象的创建过---this.的本质---static关键字内存分析

对象的创建过程

在这里插入图片描述

this.的本质

实例方法中(非构造非静态):this指代的是正在调用当前方法的对象
构造方法中               : this指代的是正在new的对象本身

在这里插入图片描述

关键点:

  1. this指代的一定是对象,是jvm堆中的某个class的实例对象的引用;this代表的不是class或者其他。
  2. this出现的位置一般是在方法体内部(包括方法参数位置),假设this在methodA中出现,那么this指代的就是正在调用methodA的那个对象;即便this出现在方法体外部。如,假设在class A 中定义成员变量 A a = this; 最终这行代码仍然会被放入class A 的到构造函数中执行。
  3. 为了便于理解,对this在普通方法和构造方法中进行了区分。其实,构造方法的真正功能是对对象进行初始化。
    实际上,在jvm层面上,在执行构造方法之前,jvm已经为在堆中给对象分配好了内存空间,并将该对象的引用当做参数传递到构造方法中,构造方法的执行,只是为了给对象进行初始化。所以,我们仍然可以按照第一条表述来理解,即,构造方法是由新创建的对象来调用的,构造方法中的this,仍然指代的是正在调用该构造方法的对象。
  4. 静态方法以及静态代码块中,不能使用this。原因很简单,从逻辑上讲,静态方法是可以直接通过类名进行调用的,根本就没有实例对象,所以在静态方法中,不能使用this;静态代码块,是在jvm第一次加载该类时执行的,此时更不会有实例对象,所以this也不能出现在静态代码块中。从java语法上讲,静态方法的参数列表中是没有this参数的。
  5. this不能用于static中

static关键字

“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
基本作用

方便在没有创建对象的情况下来进行调用(方法/变量)

被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问

static类不能调用非静态方法,而普通的类可以调用静态方法;

在这里插入图片描述

  • static方法
      static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问, 因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

    但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。

猜你喜欢

转载自blog.csdn.net/weixin_43606241/article/details/84370629