我没有初始化变量但仍然收到输出

时间:2014-11-19 18:50:20

标签: java initialization

这是我的代码:

class Xyz{
   public static void main(String args[])
   {
      first fobj = new first(10);
      for(int i=0;i<5;i++){
         fobj.add();
         System.out.printf("%s",fobj);
      }
   }
}

class first{
   public int sum=0;
   public final int num;
   first(int x){
      num=x;
   }

   public void add(){
      sum+=num;
   }

   public String toString()
   {
      return String.format("sum = %d" ,sum);
   }
}


output:
sum=10
sum=20
sum=30
sum=40
sum=50

在课程first中,我没有初始化一个名为&#34; sum&#34;的变量。但我仍然得到输出。有人可以向我解释一下吗? asgfafgalsdfkjsaflkasflaskfalskfajlskfaskfaslkjflaskfaslkflasjkf。

3 个答案:

答案 0 :(得分:2)

实例成员会自动初始化为默认值JLS-4.12.5 Initial Values of Variables

  

每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化(§15.9§15.10):

     

...

For type `int`, the default value is zero, that is, 0. 

答案 1 :(得分:0)

类和实例数据成员会自动默认为其类型的所有位数关闭值(0的情况下为int),即使您没有明确地这样做。由于sum是实例数据成员,因此它隐式默认为0

这由§4.12.5 of the Java Language Specification

涵盖
  

每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化(§15.9,§15.10.2):

     
      
  • 对于类型byte,默认值为零,即(byte)0的值。
  •   
  • 对于类型short,默认值为零,即(short)0的值。
  •   
  • 对于类型int,默认值为零,即0
  •   
  • 对于类型long,默认值为零,即0L
  •   
  • 对于类型float,默认值为正零,即0.0f
  •   
  • 对于类型double,默认值为正零,即0.0d
  •   
  • 对于类型char,默认值为空字符,即'\u0000'
  •   
  • 对于类型boolean,默认值为false
  •   
  • 对于所有参考类型(§4.3),默认值为null
  •   

答案 2 :(得分:0)

在Java中,即使您自己不做,也会在创建对象时自动将所有成员变量初始化为其默认值。 int的默认值为0