this一般用法
- this本质就是当前对象的地址
普通方法中this总是指向调用该方法的对象,构造方法中this指向正要初始化的对象
this内存模型
this在构造方法的典型应用
调用重载构造器,必须位于构造方法的第一行 ```java public class User2 { int id; String name; String pwd;
public User2(){ }
public User2(int id,String name) {
System.out.println("正在要初始化的对象:"+this);
this.id = id;
this.name = name;
}
public User2(int id,String name,String pwd) {
//调用了重载的构造器!这种调用,必须位于构造方法的第一行!
this(id,name);
this.pwd = pwd;
}
public void login(){
System.out.println("要登录:"+this.name+",密码:"+this.pwd);
}
public static void main(String[] args) {
User2 u = new User2(101,"高晓琪");
u.login();
User2 u3 = new User2(102,"高晓武","123456");
System.out.println(u3.pwd);
System.out.println(u3.name);
} }
static关键字核心用法
static关键字声明的变量称为静态成员变量,也成为类变量。具有以下特点:
当类的字节码文件加载到内存中时,类的实例方法并没有被分配入口地址,只有当该类的对象创建以后,实例方法才分配了入口地址。从而实例方法可以被类创建的所有对象调用,还有一点需要注意,当我们创建第一个类的对象时,实例方法的入口地址会完成分配,当后续在创建对象时,不会再分配新的入口地址,也可以说,该类的所有对象共享实例方法的入口地址,当该类的所有对象被销毁,入口地址才会消失
类方法
在类方法中不能引用实例变量,实例变量的定义类似实例方法,没有用static修饰的变量,实例变量的创建与实例方法的创建相同,也是在类的对象创建时完成,所以在类方法中是不能引用实例变量的,因为这个时候实例变量还没有分配内存地址。
- 在类方法中不能使用super和this关键字,这是因为super和this都指向的是父类和本类的对象,而在类方法中调用的时候,这些指代的对象有可能都还没有创建。
类方法中不能调用实例方法
与类方法相比,实例方法的定义就没有什么限制了:
- 实例方法可以引用类变量和实例变量
- 实例方法可以使用super和this关键字
- 实例方法中可以调用类方法
参考
构造方法、类方法、实例方法的区别可参考https://www.cnblogs.com/sunyubin/p/9751412.html
内存模型
静态初始化块
类似于构造方法用于对象的初始化,静态初始化块用于类的初始化操作,类加载初始化时调用;
- 可以初始化static属性
- 在静态初始化块中不能直接访问非static成员