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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 瓶中人 中级黑马   /  2013-11-3 11:00  /  1344 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

       非静态初始化主要用于对象的初始化操作,在每次创建对象时都要调用一次,其执行顺序在构造方法之前。
       如果初始化块前有static关键字修饰,那么该初始化块称为静态初始化块。由于非静态成员不能在静态方法中使用,同样也不在静态初始化块中,因此静态初始化块主要用于初始化静态变量和静态方法。静态初始化块只调用一次,是在类被第一次加载到内存时,并非一定要创建对象才执行。
     静态初始化块的执行顺序在非静态初始化块之前。
     示例如下:
public class Test
{
        public static void main(String[] args)
        {
                T a = new T();
                T a2 = new T();
        }
}
class T
{

        {
            System.out.println("==非静态初始化块==");
        }
        static
     {
             System.out.println("==静态初始化块==");
         }
         public T(){
                System.out.println("==无参的构造方法==\n");
         }
}

结果为:==静态初始化块==
            ==非静态初始化块==
            ==无参的构造方法==

           ==非静态初始化块==
            ==无参的构造方法==
通过上述示例可以看出静态初始化块仅在第一次创建对象时执行,第二次就没有执行,而非静态代码块则可以在每次创建对象都执行一次。
还有静态代码块是在类加载器第一次加载该类时调用,不一定非要创建对象才触发,如果使用“类名.静态方法(静态属性)”也会执行静态初始化块的。
       如下例:
public class Test
{
        public static void main(String[] args)
        {
                T.sayHi();
        }
}
class T
{
        static
        {
             System.out.println("==静态初始化块==");
        }
          public static void sayHi()
      {
               System.out.println("HelloWorld!");
      }
}

结果: ==静态安初始化块==
         HelloWorld

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
难道非静态代码块又称构造函数代码块?在老毕的视频称为构造函数代码块
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马