static用法
static修饰的内容属于类,不单独属于某个对象,所有对象共享,内存只有这一份。用法:用于修饰成员变量,成员函数。
栈内存存放方法区,数据区,共享区。堆内存存放对象和数组
static特点
1.随着类的加载而加载,也就是会随着类的消失而消失,生命周期最长,定义静态过多,内存负担太大,对象消失静态变量也会存在。2.优先于对象而存在
3.所有对象所共享
4.可以直接被类名调用
一 实体变量和类变量的区别
1.存放位置类变量随着类的加载而存在于方法区中
实例变量随着对象的建立而存在于堆内存中
2.生命周期
类变量生命周期最长的,随着类的消失而消失
实例变量:生命周期随着对象的消失而消失
3.静态方法是用注意事项
1.静态方法只能访问静态成员 (方法和变量) ,非静态方法可以访问静态和非静态成员
2.静态方法中不可以定义this,super关键字,因为静态优先于对象存在
3.主函数是静态的
二 主函数
1.主函数是一个特殊的函数,可以被jvm调用2.public:代表着该函数访问权限是最大的
3.static:表示随着类的加载而加载
4.void :主函数没有返回值
5.main :不是关键字,但是很特别,可以被jvm识别,javac启动编译器,java启动jvm
三 对象私有化
*构造对象私有化,可以防止方法被使用四 静态代码块
static {执行语句}静态代码块随着类的加载而运行,只执行一次,通过静态代码块可以判断类有没有被加载
构造代码块给对象创建的 用{执行语句}表示,创建对象时会执行,构造代码块要比构造函数先初始化
五 构造对象创建过程中程序进行了哪些步骤
例如Person p=new Person("zhangsan","20");1.因为new的时候用到的是Person.class文件,所以会现在内存中找到Person.class文件并加载到内存中
2.执行该类的静态代码块,如果有的话,给Person.class进行初始化
3.在堆内存中开辟空间,分配内存地址
4.在堆内存中建立对象的所有属性,并进行默认初始化
5.对属性进行显示初始化
6.对对象进行构造代码块初始化
7.对对象进行对应的构造函数初始化
8.将堆内存地址付给栈内存中的p变量