Java 变量到底要如何初始化

原创 2016年05月31日 06:32:16
本问题讨论变量的初始化,所以先来看一下Java中有哪些种类的变量。
  • 类的属性,或者叫值域
  • 方法里的局部变量
  • 方法的参数

对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。
  1. int类型变量默认初始值为0
  2. float类型变量默认初始值为0.0f
  3. double类型变量默认初始值为0.0
  4. boolean类型变量默认初始值为false
  5. char类型变量默认初始值为0(ASCII码)
  6. long类型变量默认初始值为0
  7. 所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null。

对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。这个问题会在以后的系列中进行详细讨论。

对于第二种变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,编译器会抗议。如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译部通过。如果在catch或finally里也有,则可以通过编译。总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要出事化成什么值好,就用上面的默认值吧!

其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。 
版权声明:本文为芝麻软件工作室原创文章,未经芝麻软件工作室允许不得转载。

相关文章推荐

深度思考Java成员变量的初始化

写Java代码的时候很少去关注成员变量的声明和初始化顺序。语言的设计者们又为什么会这样设计?比如说很常见的一种abstract(抽象)类不能采用final进行修饰。这个问题比较好理解。因为一个类一旦被...

Java变量自动初始化

在Java中有些变量使用的时候不需要人为的初始化,系统会自动给变量赋默认的值 例如: boolean 变量的初始值如果有的话,则为false。 int           变量的初始值如果有...

Java变量初始化

  • 2014-08-26 07:42
  • 62KB
  • 下载

java类变量初始化顺序

Java方法重写到底调用哪儿一个方法,到底用本类还是父类的成员变量

介绍这次要讲解的内容非常有尿点,因为知道答案后你会非常的高兴,orz*方法重写中存在的问题public class TestMianSi03 { public static void main...

黑马程序员---JAVA中成员变量初始化规则

------Java培训、IOS培训、.NET培训、期待与您交流!------ JAVA尽力保证,所有变量在使用前能得到恰当的初始化,因为如果变量没有被初始化,那么很容易导致程序出错。 所有在类中的变...

JAVA final 、super 关键字以及继承关系中父类与子类实例变量初始化的 理解

1,final 修饰符修饰变量、方法、类 时有什么作用? ①final 修饰变量:该变量被赋初值后,不能对它重新赋值 ②final 修饰方法:此方法不能重写,即父类中某方法被final修饰,在子类...
  • hapjin
  • hapjin
  • 2015-10-20 22:27
  • 1568

Java中有关变量初始化先后顺序的思考和实验(三)

Java中有关类的加载和初始化先后顺序的思考和实验(二)

JAVA变量初始化顺序

1.在调用构造初始化之前,会首先对成员变量进行自动初始化。 public class Counter { int i; Counter() { i = 7 ; ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)