A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 【灰太狼】 中级黑马   /  2013-12-21 18:42  /  2277 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态初始化器是在什么时候执行?不是创建对象的时候和构造函数一起执行把?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

11 个回复

倒序浏览
在加载构造函数之前
回复 使用道具 举报
刘松703 发表于 2013-12-21 18:44
在加载构造函数之前

什么意思,是创建一个对象的时候,先执行静态初始化器,然后在执行构造函数?
回复 使用道具 举报
加载类时一般实现加载静态变量,公共变量,再加载构造函数的,你可以写代码,在一些地方加上输出语句观察以下其输出顺序
回复 使用道具 举报
  静态方法是随着类的加载而加载的。优先与对象存入内存中。
回复 使用道具 举报
静态函数随着类的加载而加载,优先于构造代码块和构造函数,静态代码块又优先于静态函数
回复 使用道具 举报
静态代码构造器,在类加载的时候,就会执行,并且只会执行一次。
再次创建对象什么的,都不会再执行了。
回复 使用道具 举报
弘一 中级黑马 2013-12-22 08:26:24
8#
静态修饰后的成员变量和成员方法、静态代码块。都是随着类的加载而加载。
所以当你第一次创建对象时调用了一次类后,就只运行一次。然后再次创建对象
也不会执行,因为静态代码块是属于类的东西,而不是属于对象的
class A
{
        static{
                System.out.println("静态代码块");
        }

        {
                System.out.println("构造代码块");
        }

        public A(){}
}

public class Test
{
        public static void main(String[] args)
        {
                A a = new A();
                A a1 = new A();
        }
}
//运行结果
静态代码块
构造代码块
构造代码块

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
静态代码块   构造代码块   执行该类类构造函数  给变量显示初始化
回复 使用道具 举报
静态方法,静态变量,静态初始化器 因为是静态的  所以按照你写的顺序执行

构造函数,属性都是属于实例化的东西,所以比非静态的后执行

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
你说的是静态代码块吧?

静态代码块
随着类的加载而执行。只执行一次。优先于主函数运行。
用于给类进行初始化。
eg:
class Person
{
        static
        {
                静态代码块代码;
        }
}


希望能对你有帮助。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
恩恩 中级黑马 2013-12-22 11:01:47
12#
AVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
先初始化父类的静态代码--->初始化子类的静态代码-->
(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马