java随笔

Static --- 代码块 ---- 类和对象加载过程

2017-06-19  本文已影响11人  71150ce14a00

<h3>只要一个函数被static 修饰, 他和对象就没有关系了,只和类名有关系,静态方法可以直接用类名调用。</h3>

static 只能修饰成员方法和成员变量,(不能修饰构造方法,因为构造方法时跟对象有关系的,而static只能和类有关系)。

注意:

对于非静态成员变量在类加载的时候,不会开辟空间和赋值,而对于静态成员变量在类加载的时候回开辟空间并赋值

静态与动态的区别

对象方法==实例函数==非静态方法
类方法 == 静态方法

静态代码块:

static{
类加载的时候执行,顺序执行
}
构造代码块:位于类的成员变量
{
}
静态代码块和构造代码块同事存在的时候,先执行静态代码块

构造方法隐式三步:

1.per()
2.变量赋值
3.所有构造代码块
4.构造函数里代码

如果构造代码块书写在非静态成员变量上面:

  1. super()
  2. 构造代码块
  3. 成员变量赋值

在类加载的时候,JVM会先加载类中的所有静态成员变量,当所有静态成员变量加载完成后,开始给类中的所有静态成员变量进行默认初始化, 当类中所有静态成员变量默认初始化完成后,会接着给静态成员变量进行赋值显示操作,只有类中所有静态成员显示赋值结束后, 静态代码块才会运行

类的加载过程:

1、启动JVM,加载程序中需要使用的class文件。
2、在加载class文件的时候,所有的静态内容(静态成员变量,静态成员函数,静态代码块)都要加载到方法区的静态区中。
3、当类中的所有静态加载完成之后,开始给类中的所有静态成员变量默认初始化。
4、类中的所有静态成员变量默认初始化完成之后,开始给这些静态成员变量显示赋值。
5、所有静态成员变量显示赋值结束之后,开始运行类中的静态代码块。
6、当所有的静态代码块执行完成,代表当前这个class文件才彻底被加载结束。

对象的创建过程:

1、使用new关键字创建对象,在堆中给对象分配内存空间。
2、给对象所属类中的所有非静态成员变量分配空间并进行默认的初始化。
3、执行和new对象时传递参数一致的构造函数。
4、执行构造函数的的过程中有隐式的三步:
4.1、执行super() 语句,找父类的空参数构造函数
4.2、给非静态成员变量进行显示赋值。
4.3、运行构造代码块
4.4、构造函数中的自己写的代码执行。
5、构造函数执行完成,对象创建结束。

一个类中先执行静态成员然后执行构造,按顺序执行静态成员或者构造成员

栈:先进后出,所有方法开辟空间
堆: new 关键字开辟空间 默认赋值
方法区: 存放class文件字节码文件,静态区和非静态区,字符串常量池

上一篇 下一篇

猜你喜欢

热点阅读