Java static关键字和构造函数执行顺序
来源:互联网 发布:兼职网络维护 编辑:程序博客网 时间:2024/06/05 14:07
static修饰的有变量 有方法。
**
static修饰变量
**
**一、静态方法随着类的加载而出现,随着类的消失而消失;
所以静态方法是先于对象出现的,也是先于非静态方法出现,不能用静态方法调用后出现的非静态方法。
二、静态优先于对象,被所有对象共享;
一般静态成员变量都是类中成员共有的属性或者方法;
三、因为静态先存在于内存,无法访问后来对象中的数据,所以静态无法访问非静态,也不能存在this,因为this代表当前对象,静态先于对象存在。**
当static修饰变量时候,表示这个变量储存在方法区中是一个类变量,static修饰的变量是对象的共性。
比如一个person类 中有一个属性叫country 内容都是中国。那么就可以把这个变量修饰成static 这样就不用等创建对象的时候在堆中给每个对象都创建一个country属性的内存,这样节省内存,而且这样的话也不用
new person.country ,可以直接用类名调用。person.country
static 修饰的是一个对象的共性,以后就不用再赋值了,生命周期最长可以直接存储在方法区中。
static修饰方法
什么时候用static修饰方法
当这个方法中没有引用对象中的非静态方法的时候可以用static修饰方法
因为static修饰的方法存在方法区中跟static修饰的变量一样,当对象在堆中创建之前就存在方法区中了 这样如果静态方法调用非静态变量,那时候非静态变量还没有创建(非静态变量是对象创建之后,在堆中创建的)
静态代码块
static{system.out.print("啊啊啊啊啊啊")}
随着类的加载而执行 而且只执行一次 ,如果有两个不同的静态代码块也是只执行一个
因为有了static 所以执行顺序有些变化
比如一个 person p= new person();这个对象创建经历了什么?
1.因为new 用到了person.class 所以会先找到person.class文件,并加载到内存中
2.执行该类中的静态代码块 如果有的话给person.class初始化。
3.在堆内存中分配内存,分配地址空间。
4.在堆内存中建立对象特有属性,并进行默认初始化(就是String赋值null,int类型赋值0)
5.对属性进行显示初始化
6.对对象进行相应的构造代码块初始化
7.对对象进行构造函数初始化
8.把对象的内存地址赋值给栈内存的p变量
- Java static关键字和构造函数执行顺序
- Java static块与构造函数的执行顺序
- Java中构造函数、static块、{}块的执行顺序
- static块和构造函数的执行顺序
- static块和构造函数的执行顺序
- Java new一个子类对象时static和构造函数的执行顺序
- 构造函数与static执行顺序
- java基础第三天 构造函数和static关键字
- static 变量,static代码块,构造函数执行顺序
- java构造函数和初始化函数的执行顺序
- java构造函数以及static关键字
- java构造函数和静态变量的执行顺序
- Java静态变量和构造函数的执行顺序
- Java静态变量和构造函数的执行顺序
- java构造函数和静态变量的执行顺序
- [转]关于JAVA中执行static块与构造函数的先后顺序
- 【Java基础】类的实例化、static、父类构造函数执行顺序
- Java基础:类的实例化、static、父类构造函数执行顺序
- 单片机的各种存储的含义和区别
- OJ
- [Linux] 总结各系统 双网卡绑定
- 与true
- javawebday11(junit debug调试 泛型 遍历 list set map 使用通配符T)
- Java static关键字和构造函数执行顺序
- 系统调用原理
- WiderFace数据集用于训练人脸检测模型
- spring mvc 环境Jackson转换器jsonp请求=方式1
- FreeMarker教程篇--第一个freemarker程序
- tomcat 多实例部署
- 我的第一篇博客
- Python:入门到实现网络爬虫 Day3
- bzoj2654 tree(kruskal+二分)