黑马程序员技术交流社区

标题: Java中只有引用类型才有默认值,基本类型必须初始化 [打印本页]

作者: rosv    时间: 2013-5-15 18:07
标题: Java中只有引用类型才有默认值,基本类型必须初始化
Java中的基本数据类型有默认值吗?我认为Java中只有引用类型才有默认值,基本类型使用必须初始化值,若非,请证明??(注意:数组不是基本类型!)
作者: 王靖远    时间: 2013-5-15 18:15
印象中毕老师说过char类型的初始化值,具体哪一课记不清了。好像是说char类型的初始化值是u00000对应了一个java支持的U什么表
作者: 任江峰    时间: 2013-5-15 20:45
本帖最后由 任江峰 于 2013-5-15 21:15 编辑
  1. //类的成员变量有初始值,局部变量没有初始值。
  2. class Test2
  3. {
  4.         byte byteValue;
  5.         short shortValue;
  6.         int intValue;
  7.         long longValue;
  8.         float floatValue;
  9.         double doubleValue;
  10.         char charValue;
  11.         boolean booleanValue;

  12.         static byte staticByteValue;
  13.         static short staticShortValue;
  14.         static int staticIntValue;
  15.         static long staticLongValue;
  16.         static float staticFloatValue;
  17.         static double staticDoubleValue;
  18.         static char staticCharValue;
  19.         static boolean staticBooleanValue;
  20.         public static void main(String[] args)
  21.         {
  22.                 int a;
  23.                 Test2 t = new Test2();
  24.                 //非静态成员变量
  25.                 System.out.println("--------非静态成员变量--------");
  26.                 System.out.println("byteValue="+t.byteValue);
  27.                 System.out.println("shortValue="+t.shortValue);
  28.                 System.out.println("intValue="+t.intValue);
  29.                 System.out.println("longValue="+t.longValue);
  30.                 System.out.println("floatValue="+t.floatValue);
  31.                 System.out.println("doubleValue="+t.doubleValue);
  32.                 System.out.println("charValue="+t.charValue);
  33.                 System.out.println("charValue==\\u0000:"+(t.charValue=='\u0000'));
  34.                 System.out.println("booleanValue="+t.booleanValue);

  35.                 System.out.println("--------static成员变量--------");

  36.                 //静态成员变量
  37.                 System.out.println("staticByteValue="+staticByteValue);
  38.                 System.out.println("staticShortValue="+staticShortValue);
  39.                 System.out.println("staticIntValue="+staticIntValue);
  40.                 System.out.println("staticLongValue="+staticLongValue);
  41.                 System.out.println("staticFloatValue="+staticFloatValue);
  42.                 System.out.println("staticDoubleValue="+staticDoubleValue);
  43.                 System.out.println("staticCharValue="+staticCharValue);
  44.                 System.out.println("charValue==\\u0000:"+(staticCharValue=='\u0000'));
  45.                 System.out.println("staticBooleanValue="+staticBooleanValue);

  46.                 System.out.println("--------局部变量--------");
  47.                // System.out.println("a="+a);//编译失败:错误: 可能尚未初始化变量a

  48.         }
  49. }
复制代码

QQ图片20130515211538.jpg (42.08 KB, 下载次数: 2)

运行结果:

运行结果:

作者: 张金铎    时间: 2013-5-15 20:57
本帖最后由 张金铎 于 2013-5-15 21:21 编辑

基础班刚好讲过诶:
成员变量都有默认初始化值(类内方法外的变量)
局部变量没有默认初始化值,要想使用:必须是创建,赋值,使用(方法内部的变量)。
只以int型为示例,其他类型同此。把注释打开编译报错,说明局部变量必须初始化再使用。
class Test3
{
        public static int a;
        public static void main(String[] args)
        {
        
                System.out.println("a="+a);
                test();
        }
        public static void test(){
                //int a;int b;
                //int c=a+b;
        }
}
这跟是不是基本类型没有关系吧。成员变量的数组,照样也会有默认初始值。
作者: xiewen    时间: 2013-5-15 21:05
本帖最后由 xiewen 于 2013-5-21 01:36 编辑

一个类中的成员实例变量都有初始值,所以类中基本数据类型的实例变量也有默认初始值。如果变量是实例成员变量就不用指定初始值,局部变量就要指定初始值。
                    黑马云青年为您解答
作者: 杨彬    时间: 2013-5-22 19:09
int a 与int[] arr 声明在main外,也就是成员变量,成员变量我认为就是拿来用的,没有默认值怎么用?

  static int a;
  static int[] arr;
  public static void main(String[] args) {
        System.out.println(a);
        System.out.println(arr);       
        arr=new int[5];
        System.out.println(arr[0]);
}      

作者: Miss小强    时间: 2013-5-22 19:50
成员变量上的基本类型是有初始化值的;
int byte 等 对应0
char 对于''
依次类推,
而基本类型作为成员变量时要指定初始化值,或者说,要对他进行初始化;否则使用时会报错;

作者: 胡浩    时间: 2013-5-23 11:15
这个和是基本类型和引用类型没有关系吧,在一个类中,如果是成员变量的话,jvm就会默认给一个初始值,如果是成员变量的话,需要自己赋值才能是用的。
“黑马云青年为您解答”
作者: 第一枭雄    时间: 2013-5-23 23:53
无论是引用类型还是基本类型,成员变量永远都可以在定义的时候不赋值。

因为静态成员变量是优先于类的存在,必然会默认初始化。这个不用说。
而非静态的情况下不能被静态方法调用,非静态方法调用哥就一定创建对象,所以非静态成员变量在堆内存,也会自动初始化。

但定义的时候建议给出初始化值,哪怕是null。
作者: 木子天涯    时间: 2015-11-14 00:21
是的没有错   基本数据类型必须复制了才能使用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2