static关键字学习
static代表静态,static修饰的内容称为静态内容
- static修饰的内容
- 属性
- 方法
- 代码块:没法调用,只能自动执行
- 非static修饰的代码块在对象创建之前执行,每创建一个对象非静态代码块执行一次
- static修饰的静态代码块在类加载的时候就执行了,而且只执行一次
- 内部类:调用方式只有一种(new 外部类.内部类(参数列表))
属性和方法只会在内存中存在一份,调用的使用有两种方式。1、通过类的对象来调用(不建议)2、通过类名或者接口名来调用(建议)
Java代码内存中运行的流程:
Java代码在运行的时候,先通过类装载(加载)器将.class文件加载到内存中的元数据区(方法区),下一步在堆区创建对象,然后在虚拟栈区调用方法执行代码。
-
static修饰的内容称之为静态内容(也称之为类内容),就是因为static修饰的内容在类加载时期在堆区(方法区)就创建好了,而且这些静态内容只会执行一次,而且静态内容在内存中只存在一份
-
非static修饰的内容在Java对象创建的时候才去在堆区创建,而且非static修饰的内容在内存中存在n份
-
完整的包含静态与非静态内容在内存中的画法
-
static的注意事项
- 1、static修饰的内容无法调用类中非static修饰的内容
- 2、非static修饰的内容可以调用类中static修饰的内容
- 3、static修饰的内容中无法使用this和super关键字
static的内容在类加载的时候就存在,非static的内容是随着Java对象的创建才存在的. static的内容在内存存在的时候,非static的内容不一定在内存中创建.
this和super关键字是当Java类的对象在创建的时候在当前对象的堆内存中会声明这两个关键字,其中this关键字指向当前对象,super关键字指向的是我们的父类对象空间。