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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天听到一位同学说一个面试题,问一个类,可不可以有多个静态代码块。
我不太确定。经测试,一个类可以有多个静态代码块。
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");     }  类似的代码。

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

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

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






评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 这样的问题就是论坛需要的,感谢你的问题,.

查看全部评分

8 个回复

正序浏览
#在这里快速回复#谢谢楼主期望灌水,我是来拿技术分 Sun Feb 23 20:35:45 CST 2014
回复 使用道具 举报
#在这里快速回复#谢谢楼主期望灌水,我是来拿技术分 Sun Feb 23 18:00:56 CST 2014
回复 使用道具 举报
ysunday 中级黑马 2013-11-18 19:12:42
7#
是这样的,一般是用不到的,很少会用,工具类可能会用到,当一个类里边的所有方法都是静态的时候,这时候这个类不需要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的源码中都没找到
回复 使用道具 举报
静态代码,类加载器首先加载静态代码,引用静态代码块的时候,1.不用创建对象,可以直接引用。2。这样可以避免经常使用的函数,被重复创建,浪费内存。3.引用更方便,节约时间。
回复 使用道具 举报
本帖最后由 张鹏 于 2013-11-18 11:19 编辑

静态代码块,完成初始化工作,特点:最先执行,并永远只执行一次,无法被再次调用,里面的数据是静态唯一。
回复 使用道具 举报
不知道除了楼上的回答还有木有其他的作用
回复 使用道具 举报
“最先执行(随类加载,先与构造代码块,构造代码块先于构造函数执行)。”由这句话就可以知道,静态代码块是对类进行初始化,而构造代码块是对对象进行初始化!基础视频里面有讲回去看一下就知道了!

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 继续加油哈,论坛靠你们的活跃.

查看全部评分

回复 使用道具 举报
有一些程序需要在初始化的时候加载内容,就使用静态代码块

评分

参与人数 1黑马币 +6 收起 理由
狼王 + 6 加油哈,多活跃

查看全部评分

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