this一般用法

  • this本质就是当前对象的地址
  • 普通方法中this总是指向调用该方法的对象,构造方法中this指向正要初始化的对象

    this内存模型

    image.png

    this在构造方法的典型应用

  • 调用重载构造器,必须位于构造方法的第一行 ```java public class User2 { int id; String name; String pwd;

    public User2(){ }

    public User2(int id,String name) {

    1. System.out.println("正在要初始化的对象:"+this);
    2. this.id = id;
    3. this.name = name;

    }

    public User2(int id,String name,String pwd) {

    1. //调用了重载的构造器!这种调用,必须位于构造方法的第一行!
    2. this(id,name);
    3. this.pwd = pwd;

    }

    public void login(){

    1. System.out.println("要登录:"+this.name+",密码:"+this.pwd);

    }

    public static void main(String[] args) {

    1. User2 u = new User2(101,"高晓琪");
    2. u.login();
    3. User2 u3 = new User2(102,"高晓武","123456");
    4. System.out.println(u3.pwd);
    5. System.out.println(u3.name);

    } }

```

static关键字核心用法

static关键字声明的变量称为静态成员变量,也成为类变量。具有以下特点:

  1. 从属于类,在内存中只有一份,在类被载入时被显示初始化;
  2. 一般用“类名.类属性\方法”来调用;
  3. 在static方法中不可直接访问非static的成员

    类方法与实例方法

    实例方法

  • 当类的字节码文件加载到内存中时,类的实例方法并没有被分配入口地址,只有当该类的对象创建以后,实例方法才分配了入口地址。从而实例方法可以被类创建的所有对象调用,还有一点需要注意,当我们创建第一个类的对象时,实例方法的入口地址会完成分配,当后续在创建对象时,不会再分配新的入口地址,也可以说,该类的所有对象共享实例方法的入口地址,当该类的所有对象被销毁,入口地址才会消失

    类方法

  • 在类方法中不能引用实例变量,实例变量的定义类似实例方法,没有用static修饰的变量,实例变量的创建与实例方法的创建相同,也是在类的对象创建时完成,所以在类方法中是不能引用实例变量的,因为这个时候实例变量还没有分配内存地址。

  • 在类方法中不能使用super和this关键字,这是因为super和this都指向的是父类和本类的对象,而在类方法中调用的时候,这些指代的对象有可能都还没有创建。
  • 类方法中不能调用实例方法

  • 与类方法相比,实例方法的定义就没有什么限制了:

    • 实例方法可以引用类变量和实例变量
    • 实例方法可以使用super和this关键字
    • 实例方法中可以调用类方法

参考

  • 构造方法、类方法、实例方法的区别可参考https://www.cnblogs.com/sunyubin/p/9751412.html

    内存模型

    image.png

    静态初始化块

  • 类似于构造方法用于对象的初始化,静态初始化块用于类的初始化操作,类加载初始化时调用

  • 可以初始化static属性
  • 在静态初始化块中不能直接访问非static成员