“static关键字ä¸å¯¹ç±»å£°æ˜Žåšä»€ä¹ˆï¼Œå®ƒå¯¹å˜é‡æˆ–方法声明åšäº†ä»€ä¹ˆã€‚â€

时间:2011-02-15 18:25:07

标签: java static inner-classes nested-class

æ¥è‡ªï¼šJavaWorld

我ç†è§£staticåªèƒ½ä¸ŽåµŒå¥—类一起使用,这使它们等åŒäºŽé¡¶çº§ç±»ã€‚我也ç†è§£è¿™å¯ä»¥ä½¿å®ƒä»¬ç‹¬ç«‹äºŽå°é—­ç±»å£°æ˜Žã€‚

  1. 这就是ç†è®ºï¼Œä»»ä½•äººéƒ½å¯ä»¥æƒ³åˆ°ä¸€ä¸ªå¾ˆå¥½çš„实际例å­ï¼Œè¯´æ˜Žä¸ºä»€ä¹ˆæˆ‘们需è¦è¿™æ ·åšï¼Ÿ (链接中的示例很å¯èƒ½æ˜¯å†…部类AFAIK的示例。)

  2. 此外 - 问题背åŽçš„原因 - 为什么有一个å«ç³Šä¸æ¸…çš„å称,为什么“é‡å¤ä½¿ç”¨â€å•è¯static并给它一个ä¸åŒçš„å«ä¹‰ï¼Ÿ

5 个答案:

答案 0 :(得分:4)

当您的类自然嵌套时使用它,但ä¸éœ€è¦å†…部类在Java中使用的auto-magic $ this父引用。æ¯ä¸ªéžé™æ€å†…部类都包å«å¯¹å…¶åŒ…å«å®žä¾‹çš„嵌入å¼å¼•ç”¨ã€‚当您实际上ä¸éœ€è¦è¯¥å¼•ç”¨æ—¶ï¼Œæœ€å¥½ä¸è¦åˆ›å»ºå®ƒã€‚它å¯èƒ½å¯¼è‡´å¯¹è±¡åœ¨å†…存中åœç•™çš„时间比它们需è¦çš„时间长得多,当你开始åºåˆ—化对象/å°è¯•é€šè¿‡ç½‘络å‘é€å®ƒä»¬æ—¶ï¼Œå®ƒä¹Ÿä¼šå¾ˆç—›è‹¦ã€‚你最终å¯èƒ½ä¼šå¾—到比你更大的对象图。预期或需è¦åºåˆ—化ï¼

Map.Entry的实现就是一个很好的例å­ã€‚它嵌套在地图实现中显然是“自然的â€ï¼Œä½†æ˜¯æ²¡æœ‰å¿…è¦çœŸæ­£å°†çˆ¶å¼•ç”¨ä¿å­˜å›žåœ°å›¾ã€‚

对于#2,它有什么ä¸åŒï¼Ÿå­—段或方法上的é™æ€æ„味ç€å®ƒæ˜¯ç±»å®šä¹‰çš„属性而ä¸æ˜¯å®žä¾‹ã€‚您无需实例å³å¯è®¿é—®å’Œä½¿ç”¨å®ƒã€‚嵌套类上的é™æ€ä¹Ÿæ„味ç€å®ƒæ˜¯ç±»å®šä¹‰çš„属性,您å¯ä»¥åœ¨æ²¡æœ‰å®žä¾‹çš„情况下访问和使用它。

答案 1 :(得分:2)

  1. 顶级课程的å¯è§æ€§å¯ä»¥æ˜¯å…¬å¼€çš„或包装的;但嵌套é™æ€ç±»çš„å¯è§æ€§ä¹Ÿå¯ä»¥æ˜¯ç§æœ‰çš„或å—ä¿æŠ¤çš„。 声明嵌套类还å¯ä»¥æ”¹è¿›ç±»çš„打包(结构化)并关è”它们的ä¾èµ–关系,例如Map.Entry。虽然,它也å¯èƒ½æ˜¯æ¨¡ç³Šçš„。

  2. å•è¯static具有在类级别声明实例的å«ä¹‰ã€‚例如,static int i为类声明一个整数。顶级类与声明类级别的类相åŒæ˜¯ç›¸åŒçš„。

答案 2 :(得分:1)

我å¯ä»¥è§£å†³ä½ çš„第二个问题。

Some other keywords have overloaded meanings,因此static示例ä¸æ˜¯å”¯ä¸€çš„。 static甚至在é™æ€å¯¼å…¥çš„上下文中有å¦ä¸€ç§å«ä¹‰ã€‚它正在é‡å¤ä½¿ç”¨ä½ å·²ç»ç†Ÿæ‚‰è¿‡çš„å¦ä¸€ç§æƒ…况,å³ä½¿å®ƒå…·æœ‰å®Œå…¨ä¸åŒçš„å«ä¹‰ï¼Œå®ƒä¹Ÿæ˜¯æœ‰æ„义的。

例如,finalå¯ç”¨äºŽæ ‡è¯†åªèƒ½ä¸€æ¬¡åˆå§‹åŒ–çš„å˜é‡ã€‚它还有其他å«ä¹‰ï¼Œæ¯”如识别无法覆盖的方法。

superå’Œsynchronized也用于多ç§æƒ…况。

答案 3 :(得分:1)

  
      
  1. 这就是ç†è®ºï¼Œä»»ä½•äººéƒ½å¯ä»¥æƒ³åˆ°ä¸€ä¸ªå¾ˆå¥½çš„实际例å­ï¼Œä¸ºä»€ä¹ˆæˆ‘们需è¦è¿™æ ·åšï¼Ÿ (链接中的示例很å¯èƒ½æ˜¯å†…部类AFAIK的示例。)
  2.   

这样åšæœ‰åŠ©äºŽåžƒåœ¾æ”¶é›†ã€‚éžé™æ€å†…部类包å«å¯¹å¤–部类的引用。

例如:如果你有一个庞大的外部类,它在æŸä¸ªä»»åŠ¡åˆ—表中创建一个Runnable队列,那么Runnable的存在å¯èƒ½æˆä¸ºå”¯ä¸€é˜»æ­¢å®ƒè¢«æ”¶é›†çš„东西。现在,内部类强制JVMä¿ç•™ä¸€å †æ— ç”¨çš„堆空间,它å¯èƒ½å¿…须移出伊甸园并进入更难收集的幸存者空间。

  
      
  1. å¦å¤– - 问题背åŽçš„原因 - 为什么è¦æœ‰ä¸€ä¸ªå«ç³Šä¸æ¸…çš„å字,为什么“é‡å¤ä½¿ç”¨â€ï¼†gt;这个è¯é™æ€å¹¶ç»™å®ƒä¸€ä¸ªä¸åŒçš„å«ä¹‰ï¼Ÿ
  2.   

您更喜欢称之为什么?在语言方é¢ï¼Œä½¿ç”¨é™æ€ä¸ä¼šå¯¼è‡´è¯­æ³•ä¸­çš„任何歧义。对我æ¥è¯´ï¼Œâ€œé™æ€â€æ˜¯æœ‰é“ç†çš„。内部类的实例ä¸æ˜¯å¤–部类实例的æˆå‘˜ï¼Œå之亦然。

答案 4 :(得分:1)

这些上下文中static的共享å«ä¹‰æ˜¯â€œåœ¨ç¼–译时å¯è§£æžâ€ï¼ˆè€Œä¸æ˜¯å¿…须在对象实例上查找它们并通过虚拟方法表)。这适用于é™æ€æ–¹æ³•ï¼Œé™æ€å˜é‡å’Œé™æ€å†…部类。我认为当编译器编写者选择你的语言关键è¯æ—¶ä¼šå‘生这ç§æƒ…况,概念上他将它们组åˆåœ¨ä¸€èµ·ä½œä¸ºâ€œæˆ‘å¯ä»¥ä¼˜åŒ–的东西â€ã€‚

相关问题