类里面的属性尚未初始化什么时候要初始化,什么时候不要,为什么

JAVA中到底要怎么样初始化
Java中的变量作用范围:
  1. 类的属性,或者叫值域
  2. 方法里的局部变量
  3. 方法的参数
  对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。
  int类型变量默认初始值为0
  float类型变量默认初始值为0.0f
  double类型变量默认初始值为0.0
  boolean类型变量默认初始值为false
  char类型变量默认初始值为0(ASCII码)
  long类型变量默认初始值为0
  所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null。
  对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。这个问题会在以后的系列中进行详细讨论。
  对于第二种变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,编译器会抗议。如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译部通过。如果在
catch或finally里也有,则可以通过编译。总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要出事化成什么值好,就用上面的默认值吧!
  其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。
资料来源:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:645847次
积分:18617
积分:18617
排名:第495名
原创:1234篇
转载:326篇
评论:17条
(1)(3)(1)(2)(2)(5)(3)(3)(40)(218)(205)(180)(7)(1)(9)(1)(31)(41)(45)(27)(31)(11)(3)(37)(104)(60)(489)问题:java中String类型的私有属性value是如何初始化的?
描述: String类型的构造方法如下:
无参: public String() {
this.value = new char[0];
public String(String original) {
this.value = original.
this.hash = original.
} 当 运行 String s = new String("hello world"); 的时候,是如何将hello world 赋值给引用s 的呢?
解决方案1:String s = new String("hello world"); 并没有把"hello world"的引用传递给s,而是传递了其中的字符串内容数组而已,这两个字符串对象的地址是不一样的,但是它们的内容是一样的。你可以通过 s == "hello world" 发现这两个地址的区别,这也就是为什么String要通过equals来比较的原因。解决方案2:http://my.oschina.net/treenewbee/blog/352353解决方案3:String s = new String("hello world");其实是创建了两个对象,一个在栈中,一个在堆中(new 出来的对象保存在堆中),所以尽量不要这么去写。再来回答你的问题,这里其是将引用指向了堆中“hello world”的地址。
以上介绍了“java中String类型的私有属性value是如何初始化的?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/itwd/1167252.html
上一篇: 下一篇:}

我要回帖

更多关于 为什么要初始化 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信