作java开发快一年了,突然发现有段代码看不明白(吐血),请教大家!!!
public class MyListServlet extends HttpServlet{
private Hashtable hashForm = null;
4 {
5 if(hashForm==null){
6 .....代码
7 }
8 }
public void init() throws ServletException {
.....
}
.....
}
请问第4行至第8行这样写可以吗?没见过这种写法,这段代码什么时候被执行?作用是什么?
问题点数:100、回复次数:37Top
1 楼kevinliuu()回复于 2006-06-07 17:16:03 得分 5
类被调用时执行,并且先于构造函数
类似static{ //代码 } ;Top
2 楼jokerjava(冷血)回复于 2006-06-07 17:16:58 得分 5
可以 相当于写在构造函数里Top
3 楼fox1999(红狐)回复于 2006-06-07 17:20:04 得分 5
类似static{ //代码 } ;
Top
4 楼zhiyuzhe(每晚夜里自我独行,随处荡,多冰冷)回复于 2006-06-07 17:32:11 得分 0
楼上都是高人,学习一下,我也没见过这种写法Top
5 楼goodboy1881(积木)(谁都别拦着我在水源升星)回复于 2006-06-07 17:33:20 得分 0
唉……这种写法不好看,不推荐,没有意义啊。
Top
6 楼xiaostar007(你从哪里来,要到何处去)回复于 2006-06-07 17:56:46 得分 0
这种写法不喜欢,Top
7 楼Ryo_Hazuki(困了)回复于 2006-06-07 18:00:03 得分 0
素啊少见的Top
8 楼wizardblue()回复于 2006-06-07 19:34:03 得分 0
这种代码的意义在于浪费同事的生命Top
9 楼fatcatman()回复于 2006-06-07 19:43:44 得分 0
markTop
10 楼zez(思恩 闭关练功ing...)回复于 2006-06-07 19:57:14 得分 0
呵呵,存在都是有道理的..
不认识,第一次见到的, 最好找相关资料充充电, 知道这样写的作用,以及为什么要这样...
Top
11 楼chouy(chouy)回复于 2006-06-07 20:17:00 得分 5
可以 相当于写在构造函数里
-----------------------------------
不太一样吧? 我只知道执行顺序不同!具体用法没想到.
先执行static属情的赋值,下一步执行static无参函数,然后是普通赋值,最后是构造函数.
Top
12 楼UnAgain()回复于 2006-06-07 20:23:01 得分 5
这不是static{//代码}
而是相当于写在构造函数里的。
比如你的这一句
private Hashtable hashForm = null;
既是声明,又是初始化。而4-8与之类似,并且与成员变量的声明同属于一个执行级别,会在对象实例化时,先于constructor中的代码执行。Top
13 楼schol(敲击思想的键盘,滑动灵感的鼠标~~~好男儿志在四方)回复于 2006-06-07 21:46:19 得分 0
先mark一下。Top
14 楼VisualLion(狮子)回复于 2006-06-07 21:49:47 得分 0
markTop
15 楼sjwsly3214(烽火幽灵)回复于 2006-06-07 22:48:11 得分 60
看看这段代码的运行结果你就会明白了
public class Example{
String stra = new String(“Hello World”);
{
stra = “Hello”;
System.out.println(“初始块被调用”);
}
static{
stra = “STATIC”;
System.out.println(“静态初始块被调用”);
}
public Example(){
stra = “Welcome To Constructor”;
System.out.println(“构造函数被调用”);
}
public show(){
System.out.println(stra);
}
pubilc static void main(String[] args){
Example example = new Example();
example.show;
}
}
运行结果:
静态初始块被调用
初始块被调用
构造函数被调用
Welcome To Constructor
希望你能明白!
Top
16 楼javacrazywolf()回复于 2006-06-07 23:01:15 得分 5
恩 对 我今天也正好刚刚看到 叫静态初试块
Top
17 楼GALFORDD(風来のシレン)回复于 2006-06-07 23:08:06 得分 0
mark下Top
18 楼jackcao0628()回复于 2006-06-07 23:16:12 得分 0
TO:sjwsly3214(烽火幽灵)
------------
这段代码是我 写的啊~~
汗!!!Top
19 楼UnAgain()回复于 2006-06-07 23:36:26 得分 5
我再完善一下sjwsly3214(烽火幽灵)的测试
pubilc static void main(String[] args){
System.out.println("\n现在开始创建Example实例……");
Example example = new Example();
example.show();
}Top
20 楼yamazaki1214()回复于 2006-06-07 23:54:13 得分 5
第4行到第8行属于内部类——匿名类,这个是很常用的!Top
21 楼onlytiancai(谁染枫林醉)回复于 2006-06-08 08:46:44 得分 0
汗,一看基础就没学好,我学.net的还知道那是一种内部类呢。Top
22 楼xiachedan(瞎扯蛋)回复于 2006-06-08 08:57:22 得分 0
关注!Top
23 楼mx1029()回复于 2006-06-08 09:05:08 得分 0
学到东西了,谢谢了。Top
24 楼ttjacky(豆豆糖)回复于 2006-06-08 10:56:41 得分 0
学了一招Top
25 楼huhbc()回复于 2006-06-08 11:25:20 得分 0
基础知识阿
学习了Top
26 楼lnjzxx(网站挂Google广告赚美元 - gg.6692.com)回复于 2006-06-08 13:31:53 得分 0
哎现在的年轻人总把自己看得太高。
我做ASP和ASP.NET都5年了,照样有看不明白的代码。Top
27 楼andy971024(伟志)回复于 2006-06-08 15:25:16 得分 0
去看看java编程思想的第八章接口与内隐...Top
28 楼jk88811(你的就是我的,我的还是我的~!)回复于 2006-06-08 15:36:04 得分 0
使用Java匿名内部类特性时, 这种语法是必须的.
不过像上面这样的用法真是不值得推荐...Top
29 楼iriscole(突然空闲)回复于 2006-06-08 15:48:11 得分 0
你说思想和架构不明白,我还信!!!5年还看不懂代码,那真是白痴了。Top
30 楼_void(以下排名不分先後)回复于 2006-06-08 17:26:09 得分 0
晕啦,误人子弟呀,那些叫嚣所谓内部类,匿名类的,装出一副不懂装懂的样子~~
这叫做 "初始化块" ,与 "静态初始化块" 区别,也叫做 "非静态初始化块"
"静态初始化块"在类加载时只执行一次
而"初始化块"是在对象实例化的时候执行,并且先于构造函数执行``
唉,怎么任这些人在嚷嚷,就没个人出来纠正下~~
_____________________
我所要的从来没有出现过~~Top
31 楼Coeus(天空什么时候下起了雨)回复于 2006-06-08 17:28:51 得分 0
zez(思恩 闭关练功ing...)
我喜欢他的回复Top
32 楼lihao17025()回复于 2006-06-08 17:40:01 得分 0
既然是初始化被调用,干嘛要用这种方式写啊
反正我是第一次看到过啊/1
俺是学了点啊Top
33 楼dhb008(风之雨丸)回复于 2006-06-08 18:52:44 得分 0
学习ingTop
34 楼yanransoft()回复于 2006-06-08 19:17:28 得分 0
强。。Top
35 楼jackie2004(时光的羁绊)回复于 2006-06-08 22:13:21 得分 0
记录Top
36 楼yyfchina(乱舞春秋)回复于 2006-06-08 23:01:10 得分 0
学习中......Top
37 楼_void(以下排名不分先後)回复于 2006-07-11 17:21:05 得分 0
"非静态初始化块"的用处有两个:
1."非静态初始化块" 在对象实例化的时候执行,并且先于构造函数执行
这时他做的事就是构造函数的事,既然这样,但为什么要有个"非静态初始化块"?
这个在有多个构造函数并且构造函数里的代码有相同的时候,可以把这些构造函数相同的操作集中到"非静态初始化块"中,这样可以避免代码的冗余.
2.用于匿名内部类的"构造函数"
众所周知,在匿名类中不可能有命名的构造函数,因为他根本就没有名字
那怎么来实现构造函数所实现的实例化动作,这时就能够用"非静态初始化块"来制造一个构造函数的效果~~
__________________________
我所要的从来没有出现过~~Top




