如何深入理解Java类的初始化和实例化过程?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1301个文字,预计阅读时间需要6分钟。
前言:上一篇我们了解了一个类的生命周期:加载-验证-准备-解析-初始化-使用-卸载。当初始化完成后,一个类所拥有的所有类变量(被static修饰的变量)都会被赋予初始值。但未被static修饰的变量,其值尚未确定。
前言
上一篇我们知道了一个类的生命周期是:加载->验证->准备->解析->初始化->使用->卸载。
当初始化完成以后,一个类所有的类变量(被static修饰的变量)都被赋值。但是未被static修饰的成员变量又是何时被赋值的呢?
一个类何时会被初始化
一个类何时被初始化可以分为以下几类:
- 1.创建类的实例(new)。
- 2.访问某个类或接口的静态变量,或者对该静态变量赋值。
- 3.调用类的静态方法。
- 4.通过反射方式执行以上三种行为。
- 5.初始化子类的时候,会触发父类的初始化。
- 6.Java虚拟机启动时被标明为启动类的类。(有main方法的类)
- 7.JDK 1.7开始提供的动态语言支持。(了解即可)
我们来说道说道第3点和第6点
我们平常在使用main方法和调用某个类的静态方法的时候,是不是发现,并不能直接调用静态方法和main方法所在类的非静态方法和非静态变量。
可是明明不是说了在调用静态方法和执行main方法的时候,所在的类已经被初始化了吗?
是的!在上一章节我们就说,类初始化的时候会按照我们编写代码的顺序为类变量(static修饰的变量)进行赋值。注意哦,此时这个类仅仅只有静态变量被正确赋值了哦。
本文共计1301个文字,预计阅读时间需要6分钟。
前言:上一篇我们了解了一个类的生命周期:加载-验证-准备-解析-初始化-使用-卸载。当初始化完成后,一个类所拥有的所有类变量(被static修饰的变量)都会被赋予初始值。但未被static修饰的变量,其值尚未确定。
前言
上一篇我们知道了一个类的生命周期是:加载->验证->准备->解析->初始化->使用->卸载。
当初始化完成以后,一个类所有的类变量(被static修饰的变量)都被赋值。但是未被static修饰的成员变量又是何时被赋值的呢?
一个类何时会被初始化
一个类何时被初始化可以分为以下几类:
- 1.创建类的实例(new)。
- 2.访问某个类或接口的静态变量,或者对该静态变量赋值。
- 3.调用类的静态方法。
- 4.通过反射方式执行以上三种行为。
- 5.初始化子类的时候,会触发父类的初始化。
- 6.Java虚拟机启动时被标明为启动类的类。(有main方法的类)
- 7.JDK 1.7开始提供的动态语言支持。(了解即可)
我们来说道说道第3点和第6点
我们平常在使用main方法和调用某个类的静态方法的时候,是不是发现,并不能直接调用静态方法和main方法所在类的非静态方法和非静态变量。
可是明明不是说了在调用静态方法和执行main方法的时候,所在的类已经被初始化了吗?
是的!在上一章节我们就说,类初始化的时候会按照我们编写代码的顺序为类变量(static修饰的变量)进行赋值。注意哦,此时这个类仅仅只有静态变量被正确赋值了哦。

