黑马程序员技术交流社区

标题: 关于静态代码块。静态代码块的实际意义是什么,有例子..... [打印本页]

作者: ReFly    时间: 2013-11-17 21:55
标题: 关于静态代码块。静态代码块的实际意义是什么,有例子.....
今天听到一位同学说一个面试题,问一个类,可不可以有多个静态代码块。
我不太确定。经测试,一个类可以有多个静态代码块。
public class StaticTest{

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
               //        System.out.println();
        }
        static{
        int x=2;       
        }
        static {
                int x=1;
        }       
}




接着又想一想上面这段sx似得的代码,到底它起个什么做用。网上搜索一下关于静态代码块的资料。不敢相信,那些讲解静态代码块的例子都是
static{  System.out.println("static");     }  类似的代码。

我知道静态代码块的特点,最先执行(随类加载,先与构造代码块,构造代码块先于构造函数执行)。

但却是这种输出语句很难体现静态代码块的价值。

希望能够更明白,静态代码块的作用。







作者: cuilitang    时间: 2013-11-17 22:11
有一些程序需要在初始化的时候加载内容,就使用静态代码块
作者: 赵晓海    时间: 2013-11-17 22:28
“最先执行(随类加载,先与构造代码块,构造代码块先于构造函数执行)。”由这句话就可以知道,静态代码块是对类进行初始化,而构造代码块是对对象进行初始化!基础视频里面有讲回去看一下就知道了!
作者: 狼王    时间: 2013-11-18 09:25
不知道除了楼上的回答还有木有其他的作用
作者: 张鹏    时间: 2013-11-18 11:14
本帖最后由 张鹏 于 2013-11-18 11:19 编辑

静态代码块,完成初始化工作,特点:最先执行,并永远只执行一次,无法被再次调用,里面的数据是静态唯一。
作者: 吴琼cola    时间: 2013-11-18 17:56
静态代码,类加载器首先加载静态代码,引用静态代码块的时候,1.不用创建对象,可以直接引用。2。这样可以避免经常使用的函数,被重复创建,浪费内存。3.引用更方便,节约时间。
作者: ysunday    时间: 2013-11-18 19:12
是这样的,一般是用不到的,很少会用,工具类可能会用到,当一个类里边的所有方法都是静态的时候,这时候这个类不需要new出来,直接类名.调用就行,那么就需要将构造函数私有化,但是既然构造函数私有了,假如类中还有属性需要初始化,那么就只能用静态代码块初始化,或者显示初始化了
写个有点牵强的例子
public class ArrayTools{
     private String name;//如果想初始化这个name可以直接 private String name = "haha"
                                     //但是还有另一种方式就是
                                     // {name = "haha"}
     private ArrayTools(){}
     public static void sort(){}
     public static void search(){}
     ......
}

很少很少用,Arrays的源码中都没找到

作者: Linuxgg    时间: 2014-2-23 18:00
#在这里快速回复#谢谢楼主期望灌水,我是来拿技术分 Sun Feb 23 18:00:56 CST 2014
作者: Linuxgg    时间: 2014-2-23 20:35
#在这里快速回复#谢谢楼主期望灌水,我是来拿技术分 Sun Feb 23 20:35:45 CST 2014




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