CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

作java开发快一年了,突然发现有段代码看不明白(吐血),请教大家!!!

楼主iriscole(突然空闲)2006-06-07 17:03:55 在 Java / J2SE / 基础类 提问

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

相关问题

关键词

得分解答快速导航

  • 帖主:iriscole
  • kevinliuu
  • jokerjava
  • fox1999
  • chouy
  • UnAgain
  • sjwsly3214
  • javacrazywolf
  • UnAgain
  • yamazaki1214

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo