黑马程序员技术交流社区

标题: 新手请教关于java中的静态代码块。 [打印本页]

作者: Evred    时间: 2014-11-4 21:52
标题: 新手请教关于java中的静态代码块。
java中的静态代码块可以处理异常或者用while循环吗?为什么?
作者: feng_0207    时间: 2014-11-5 12:52
静态代码块是在类加载的时候执行的,并且只执行一次,此时还没有生成对象,也没有对类进行一些什么操作,所以你所说的在静态代码块里写什么异常处理 while循环也没什么意义了。静态代码块主要完成一些初始化的工作。关于静态代码: 1)static代码块:静态代码块。 静态代码块的作用也是完成一些初始化工作。首先执行静态代码块,然后执行构造方法,静态代码块在类被加载的时候执行,而构造方法是在生成对象的时候执行;所谓加载类,即是,要想调用某个类来生成对象,首先需要将类加载到Java 虚拟    机上( JVM),然后由JVM 加载这个类来生成对象。
2)类的静态代码块只会执行一次,是在类被加载的时候执行的,因为每个类只会被加载一次,所以静态代码块也只会被执行一次      而构造方法则不然,每次生成一个对象的时候都会调用类的构造方法,所以 new 一次就会调用构造方法一次。
3)如果继承体系中既有构造方法,又有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层类的静态代码块   然后再去执行最顶层类的构造方法,一直执行到最底层类的构造方法。 注意:静态代码块只会执行一次。


作者: 空洞的望着窗外    时间: 2014-11-5 13:24
啊?静态代码不是跟类出现就出现了么,是在JVM开启这个类就加载了,只初始化一次,while循环有什么用。
作者: Evred    时间: 2014-11-5 19:13
feng_0207 发表于 2014-11-5 12:52
静态代码块是在类加载的时候执行的,并且只执行一次,此时还没有生成对象,也没有对类进行一些什么操作,所 ...

谢谢你的解答 我想说的是 如果静态代码块中需要处理的语句发生了异常 可以直接抛吗?还是要try catch处理呢?
作者: Evred    时间: 2014-11-5 19:15
空洞的望着窗外 发表于 2014-11-5 13:24
啊?静态代码不是跟类出现就出现了么,是在JVM开启这个类就加载了,只初始化一次,while循环有什么用。 ...

假如某些情况下静态代码块中语句需要while或者if处理的时候应该怎么办?
作者: Evred    时间: 2014-11-5 19:17
feng_0207 发表于 2014-11-5 12:52
静态代码块是在类加载的时候执行的,并且只执行一次,此时还没有生成对象,也没有对类进行一些什么操作,所 ...

谢谢你的解答 我想说的是静态代码块中的语句发生了异常 是需要trycatch处理还是抛呢 为什么
作者: feng_0207    时间: 2014-11-5 19:44
Evred 发表于 2014-11-5 19:13
谢谢你的解答 我想说的是 如果静态代码块中需要处理的语句发生了异常 可以直接抛吗?还是要try catch处理 ...

经测试  在静态代码块中出现异常  只能使用try catch处理,不能向外抛出。
作者: Evred    时间: 2014-11-5 20:36
feng_0207 发表于 2014-11-5 19:44
经测试  在静态代码块中出现异常  只能使用try catch处理,不能向外抛出。

:)  恩  刚才也问了老师  他也说是这样的结果
作者: 高昌德    时间: 2014-11-5 20:41
表示1楼解释的很详细,很好,借鉴。
作者: 空洞的望着窗外    时间: 2014-11-6 08:28
如果静态代码块中出现while,if,for等循环语句也是一次性加载吧,先与类对象的加载而加载,反正你记住静态代码块的优先级大于构造函数,构造函数大于main函数,如果出现子类,就是父类的静态代码块先加载再子类的静态代码块加载,在父类构造函数,子类构造函数,main函数。你比我爱思考啊,,,,,加油。
作者: Evred    时间: 2014-11-6 12:44
空洞的望着窗外 发表于 2014-11-6 08:28
如果静态代码块中出现while,if,for等循环语句也是一次性加载吧,先与类对象的加载而加载,反正你记住静态 ...

大家都加油!:)
作者: lighter    时间: 2014-11-6 13:43
学习下了
作者: M_______r    时间: 2014-11-6 13:50
嗯,黑马面试的时候不知道会不会问啊 只知道构造代码块 每创建对象就执行一次。
加载的流程是 静态代码块 ------- 构造代码块--------构造方法
作者: 地瓜君    时间: 2014-11-19 21:32
学习了啊。静态代码块{:3_46:}




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