黑马程序员技术交流社区

标题: 静态代码块 [打印本页]

作者: 赵家阳    时间: 2012-9-7 14:21
标题: 静态代码块
静态代码块详解及在程序开发过程中有什么作用?请高手指点!
作者: 孙岳    时间: 2012-9-7 14:24
静态代码块也叫静态初始化,在类加载到内存的第一时间执行,而且只执行一次。
在使用JDBC的时候经常用做驱动的加载(听说的)。
作者: 孔肖    时间: 2012-9-7 14:27
静态代码块随着类的加载而执行,只执行一次,并优先于主函数执行,用于给类进行初始化。

举个例子 :
         class StaticCode
        {
            static
            {
                System.out.print(" a ");
            }
        }

        class StaticCodeDemo
        {
            static
            {
                System.out.print(" b "); //随着类的加载,static代码块先于主函数执行
            }

                   public static void main(String[] args)
            {
                new StaticCode(); //static代码块只执行一次
                new StaticCode();

                System.out.print(" over ");
            }

            static
            {
                System.out.print(" c "); //随着类的加载,static代码块先于主函数执行
            }
        }

        //运行结果: b  c  a  over
作者: 孔肖    时间: 2012-9-7 14:28
静态代码块随着类的加载而执行,只执行一次,并优先于主函数执行,用于给类进行初始化。

举个例子 :
         class StaticCode
        {
            static
            {
                System.out.print(" a ");
            }
        }

        class StaticCodeDemo
        {
            static
            {
                System.out.print(" b "); //随着类的加载,static代码块先于主函数执行
            }

                   public static void main(String[] args)
            {
                new StaticCode(); //static代码块只执行一次
                new StaticCode();

                System.out.print(" over ");
            }

            static
            {
                System.out.print(" c "); //随着类的加载,static代码块先于主函数执行
            }
        }

        //运行结果: b  c  a  over
作者: 广驰    时间: 2012-9-7 14:28
初始化,比起构造方法他更方便,能在里面像一般写程序那样书写你想利用或表达的逻辑,比如,一般情况下构造方法里你是不能调用一般非静态类的方法的,而静态代码块里可以持有某一类的引用而使用一般的方法,这样大大简化了代码,而又起到了初始化的效果。
作者: 郑世光    时间: 2012-9-7 14:29
静态代码是随类的加载就运行,而无需创建对象。
它是给类进行初始化。
作者: 杨卫腾    时间: 2012-9-7 14:48
  1. class StaticCode
  2. {
  3.         //静态代码块
  4.         static
  5.         {
  6.                 System.out.println("static code run!");
  7.         }
  8.         //构造代码块,作用:用于给对象进行初始化。
  9.         {
  10.                 System.out.println("gouzao code run!");
  11.         }

  12.         public static void show()
  13.         {
  14.                 System.out.println("show run!");
  15.                
  16.                 //局部代码块
  17.                 {
  18.                         int x = 9;
  19.                         x = x<<4;

  20.                         System.out.println("x="+x);
  21.                 }
  22.         }
  23. }

  24. class StaticCodeDemo
  25. {
  26.         static
  27.         {
  28.                 System.out.println("main-static code run!");
  29.         }
  30.         public static void main(String[] args)
  31.         {
  32.                 //建立了对象后这个构造代码块才会运行。
  33. //                StaticCode sc = new StaticCode();
  34. //                sc.show();

  35.                 //直接使用类名调用,构造代码块是不会运行的,再次验证了构造代码块是给对象进行初始化的。
  36.                 StaticCode.show();
  37.         }
  38. }
复制代码
静态代码块:
随着类的加载而执行,而且只执行一次。

作用:用于给类进行初始化。


构造代码块:

作用:给对象进行初始化
对象一建立就运行,而且优先于构造函数执行。
可以给所有的对象进行初始化,而构造函数是给对用的对象进行初始化的。

作者: 任艳旭    时间: 2012-9-7 14:59
用static修饰的代码块就是静态代码块。

静态代码块在类加载后执行。
静态代码块和静态方法相同,不能使用外部非静态成员。
静态代码块执行和静态变量的初始化顺序由代码从上到下顺序决定。

如果我们有一段代码想在别人使用某个类的时候就运行, 而且只运行一次, 那么就可以写在静态代码块中.
例如:
class StaticBlock {
       
        public static void main(String[] args) {
                new Person();
        }       
       
}

class Person {
        static String name;
       
        static {
                System.out.println("静态代码块");       
        }       
       
        {
                System.out.println("普通代码块");       
        }
       
        public Person() {
                System.out.println("构造函数");       
        }
       
        public static void fun() {
                System.out.println("fun()");       
        }
}
运行结果:
静态代码块
普通代码块
构造函数




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2