黑马程序员技术交流社区

标题: 成员变量用不用初始化 [打印本页]

作者: ┣┫流枫    时间: 2014-8-9 22:03
标题: 成员变量用不用初始化
本帖最后由 ┣┫流枫 于 2014-8-10 21:43 编辑

看程序:
  1.     public class MyClass{
  2.     static int i;
  3.     public static void main(String[] args){
  4.     System.out.println(i);
  5.     }
  6.     }
复制代码
不明白打印的为什么是0
不是不初始化成员变量
不就不能使用啊
求大神解释:



作者: TanZhiPeng1991    时间: 2014-8-9 22:09
默认初始化
作者: ┣┫流枫    时间: 2014-8-9 22:13
TanZhiPeng1991 发表于 2014-8-9 22:09
默认初始化

变量不是不初始化不能使用吗
能说的详细点吗
作者: 晋一峰    时间: 2014-8-9 22:17
成员变量系统默认初始化     对于数字变量  默认 0
字符串  默认 null
布尔型  默认 false


作者: Bule丶    时间: 2014-8-9 22:17
成员变量是有区别的,区别就是引用类型还是基本数据类型,如果是基本数据类型那么这个变量是不会为null的,比如int,short,double等等,这些都是有默认值的,如果是引用数据类型,那么如果不赋值直接用,肯回会报null的异常的,不知道这么说楼主懂了吗?主要区别就是引用数据类型和基本数据类型的区别
作者: ┣┫流枫    时间: 2014-8-9 22:21
Bule丶 发表于 2014-8-9 22:17
成员变量是有区别的,区别就是引用类型还是基本数据类型,如果是基本数据类型那么这个变量是不会为null的, ...

  直接定义了一个int i;  打印i  就报错唉  
加了个static  就没事了    为啥
作者: Bule丶    时间: 2014-8-9 22:29
┣┫流枫 发表于 2014-8-9 22:21
直接定义了一个int i;  打印i  就报错唉  
加了个static  就没事了    为啥

我和你说喔,静态变量或者方法,是在类在内存中加载了就马上执行的就是static修饰的方法或者属性,然后才是普通的变量和方法,也就是说一个类在内存中被创造出来先后出场的顺序,类-静态的-普通的,你的i是普通的,当静态的main方法出来的时候找不到你的i,所以会报错,但是你加了static给i修饰,i和main都是同时出来的,所以就没错了,不知道这么说楼主能否理解一些
作者: ┣┫流枫    时间: 2014-8-9 22:30
Bule丶 发表于 2014-8-9 22:29
我和你说喔,静态变量或者方法,是在类在内存中加载了就马上执行的就是static修饰的方法或者属性,然后才 ...

嗯嗯 明白了   就知道是Static的事   但是不知道为啥
你这么一说就知道了
感谢  大神
作者: Bule丶    时间: 2014-8-9 22:35
┣┫流枫 发表于 2014-8-9 22:30
嗯嗯 明白了   就知道是Static的事   但是不知道为啥
你这么一说就知道了
感谢  大神 ...

不用谢,不明白的就可以问我,只要我会就行,一起交流
作者: 冷锋也温柔    时间: 2014-8-9 22:38
变量分为两种;成员变量和局部变量。
成员变量;可以初始化,也可以不初始化,不初始化时,会默认值为零。
局部变量;必须初始化,没有默认值
作者: 嘿~~    时间: 2014-8-10 12:23
成员变量如果没有被显示初始化,系统会赋给它默认值,基本类型会默认为0或者false,引用类型为null。
作者: TanZhiPeng1991    时间: 2014-8-10 18:09
┣┫流枫 发表于 2014-8-9 22:13
变量不是不初始化不能使用吗
能说的详细点吗

那是局部变量




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