实例å˜é‡åˆå§‹åŒ–çš„ä½ç½®

时间:2011-02-02 11:07:54

标签: java

public class Ex
{
  int a;
  public Ex()
  {
      System.out.println("a is "+a);
   }
}

输出为:a为0

其中aåˆå§‹åŒ–...

我知é“int的默认值是零。我的问题是它在哪里被åˆå§‹åŒ–...通过默认构造函数?(我å¬è¯´é»˜è®¤æž„造函数是在我们没有æ到类中的任何构造函数时创建的)

7 个答案:

答案 0 :(得分:6)

如果您没有自己åˆå§‹åŒ–a(这是一个原始值),它会自动åˆå§‹åŒ–为默认值,在这ç§æƒ…况下为0。

阅读4.5.5节。 ({3}}中的(å˜é‡çš„åˆå§‹å€¼ï¼‰ã€‚

答案 1 :(得分:5)

其默认值为0.

æ¥è‡ªThe Javaâ„¢ Tutorials - Primitive Data Types - Default Values:

  

声明字段时并ä¸æ€»æ˜¯éœ€è¦æŒ‡å®šå€¼ã€‚声明但未åˆå§‹åŒ–的字段将由编译器设置为åˆç†çš„默认值。

â•”â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¦â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•—
â•‘        Data Type         â•‘ Default Value (for fields) â•‘
â• â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¬â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•£
â•‘ byte                     â•‘ 0                          â•‘
â•‘ short                    â•‘ 0                          â•‘
â•‘ int                      â•‘ 0                          â•‘
â•‘ long                     â•‘ 0L                         â•‘
â•‘ float                    â•‘ 0.0f                       â•‘
â•‘ double                   â•‘ 0.0d                       â•‘
â•‘ char                     â•‘ '\u0000'                   â•‘
â•‘ String (or any object)   â•‘ null                       â•‘
â•‘ boolean                  â•‘ false                      â•‘
â•šâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•©â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•

答案 2 :(得分:3)

ç»å¯¹ä¸åœ¨é»˜è®¤æž„造函数中。根æ®JLS,在任何构造函数调用之å‰ï¼Œå®ƒéƒ½æ˜¯ä½œä¸ºç±»å®žä¾‹åˆ›å»ºè¡¨è¾¾å¼ï¼ˆå½“你执行new ClassName...)的评估的一部分。æ¥è‡ªthe JLS, Java SE 8 Edition, 15.9.4:

  

接下æ¥ï¼Œä¸ºæ–°çš„类实例分é…空间。如果没有足够的空间æ¥åˆ†é…对象,则通过抛出OutOfMemoryErrorçªç„¶å®Œæˆå¯¹ç±»å®žä¾‹åˆ›å»ºè¡¨è¾¾å¼çš„评估。

     

新对象包å«åœ¨æŒ‡å®šç±»ç±»åž‹åŠå…¶æ‰€æœ‰è¶…类中声明的所有字段的新实例。在创建æ¯ä¸ªæ–°å­—段实例时,它将åˆå§‹åŒ–为其默认值(§4.12.5)。

     

接下æ¥ï¼Œä»Žå·¦åˆ°å³è¯„估构造函数的实际å‚数。如果任何å‚数评估çªç„¶å®Œæˆï¼Œåˆ™ä¸ä¼šè®¡ç®—å…¶å³ä¾§çš„任何å‚数表达å¼ï¼Œå¹¶ä¸”由于相åŒçš„原因,类实例创建表达å¼ä¼šçªç„¶å®Œæˆã€‚

     

接下æ¥ï¼Œè°ƒç”¨æŒ‡å®šç±»ç±»åž‹çš„选定构造函数。这导致为类类型的æ¯ä¸ªè¶…类调用至少一个构造函数。此过程å¯ä»¥ç”±æ˜¾å¼æž„造函数调用语å¥ï¼ˆç¬¬8.8节)指导,并在第12.5节中详细说明。

答案 3 :(得分:1)

int的默认值为0

请å‚阅this link,根æ®ç±»åž‹æ‰¾å‡ºä¸åŒçš„默认值。(Default Values部分)

答案 4 :(得分:1)

a未被åˆå§‹åŒ–,所以它给出一个零值,因为int的默认值是0。

答案 5 :(得分:1)

a具有基本类型int。在您的代ç ä¸­ï¼Œa未åˆå§‹åŒ–,默认值为0。

答案 6 :(得分:1)

在java实例中,å˜é‡å°†ä»Žæž„造函数åˆå§‹åŒ–(默认情况下,如果没有)。

public class TestFile {  
String x = null;  
int y = x.length();  
    public TestFile() {  
        // TODO Auto-generated constructor stub  
    }  
    /**  
     * @param args  
     */  
    public static void main(String[] args) {  

        TestFile tf = new TestFile();  
   }  
}  

你将得到一个堆栈跟踪

Exception in thread "main" java.lang.NullPointerException  
    at TestFile.<init>(TestFile.java:7)  
    at TestFile.main(TestFile.java:16) 
在构造函数中调用

对于é™æ€å­—段,在类加载期间åˆå§‹åŒ–