Java static关键字和构造函数执行顺序

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变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值