Static关键字

static关键字

修饰 类成员变量、成员方法、代码块、内部类、静态引包;

静态代表内存中只有一个备份,在类初始加载时进行初始化,并且只初始化一次;存放在JVM 方法区(又叫静态区,存放静态变量,class信息)。

一、类型

1、修饰成员变量:

static修饰的静态成员变量在内存中只有一个备份,类初次加载时初始化;非静态成员变量在创建对象时进行初始化,各个对象中拥有副本互不影响。

2、修饰成员方法:

static修饰成员方法,不需要创建对象情况下,可直接使用方法,静态方法不能使用非静态成员和非静态方法,但是非静态方可以使用静态方法和静态成员,因为非静态归属对象,静态归属类,不创建对象可以使用类方法,但是创建对象可以使用对象方法和类方法。

3、修饰代码块

修饰一个和多个代码块优化性能,比如,某些方法中的变量(出生年限)是固定的,因此放在static代码块在类加载时初始化一次是性能最好的。

4、内部类

static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以,普通内部类创建必须先创建一个外部类,因为,内部类构造函数中系统为我们添加了指向外部类的引用,因此是持有外部类的应用,有关联,但同时可以访问外部类的成员。

静态内部类是解决单例和防止内存泄露中使用较多;

5、静态导包:

import static com.ancient.face.*

引入类的最后还加上了".*",代表类中的所有类方法直接导入。

采用static导入包后,在不与当前类的方法名冲突的情况下,无需使用“类名.方法名”的方法去调用类方法了,直接可以采用"方法名"去调用类方法,就好像是该类自己的方法一样。

二、初始化过程

1、类加载和构造过程

1、加载类

2、初始化静态变量和代码块中变量;

3、初始化普通变量;

4、类构造函数初始化;

如果使用上,没有创建对象直接调用类的静态方法,则静态方法会在2、3步骤中间,因为,没有初始化对象,静态成员变量是类加载后初始化的,然后可以使用类静态方法,如果在使用对象方法,则创建对象,则普通变量进行初始化,然后是构造函数;

2、子类继承父类的构造初始化过程:

宗旨:

1、先构造父类,再构造子类

2、如果类中有成员对象,则调用成员对象构造函数;

顺序:

1、父类静态变量(父类加载后初始化)

2、父类静态代码块

3、子类静态变量子类静态代码块(子类加载后初始化)

4、父类普通变量(父类对象实例构造函数前执行)

5、父类普通代码块

6、父类构造函数(父类构造函数)

7、子类普通变量(子类对象实例构造函数前执行)

8、子类普通代码块

9、子类构造函数(父类构造函数)

构造函数参数传递

1、子类有参或无参构造函数不调用父类构造函数,系统都会调用默认父类无参构造函数;

2、子类调用父类有参构造方法必须实现super,调用了父类有参数的构造方法,则不会再自动调用无参数的构造方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值