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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵家阳 中级黑马   /  2012-9-7 14:21  /  1834 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态代码块详解及在程序开发过程中有什么作用?请高手指点!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新人提问,多多鼓励

查看全部评分

7 个回复

倒序浏览
静态代码块也叫静态初始化,在类加载到内存的第一时间执行,而且只执行一次。
在使用JDBC的时候经常用做驱动的加载(听说的)。
回复 使用道具 举报
静态代码块随着类的加载而执行,只执行一次,并优先于主函数执行,用于给类进行初始化。

举个例子 :
         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

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
静态代码块随着类的加载而执行,只执行一次,并优先于主函数执行,用于给类进行初始化。

举个例子 :
         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
回复 使用道具 举报
初始化,比起构造方法他更方便,能在里面像一般写程序那样书写你想利用或表达的逻辑,比如,一般情况下构造方法里你是不能调用一般非静态类的方法的,而静态代码块里可以持有某一类的引用而使用一般的方法,这样大大简化了代码,而又起到了初始化的效果。
回复 使用道具 举报
静态代码是随类的加载就运行,而无需创建对象。
它是给类进行初始化。
回复 使用道具 举报
  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. }
复制代码
静态代码块:
随着类的加载而执行,而且只执行一次。

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


构造代码块:

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

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
用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()");       
        }
}
运行结果:
静态代码块
普通代码块
构造函数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马