21

定义类属性和初始化它们有区别吗?在某些情况下您想要做一个而不是另一个?

例子:

下面的代码片段应该指出我的意思的区别。我在那里使用了一个原语和一个对象:

import Java.util.Random;

public class Something extends Activity {
    int integer;
    Random random = null;

    Something(){
        integer = 0;
        random = new Random();
        ....

对比

import Java.util.Random;

public class Something extends Activity {
    int integer = null;
    Random random;

    Something(){
        integer = 0;
        random = new Random();
        ....
4

3 回答 3

20

首先,您不能将原语设置为 null,因为原语只是null对象引用的数据。如果你试图编译int i = null你会得到一个不兼容的类型错误。

其次,将变量初始化为null0在类中声明它们是多余的,就像在 Java 中一样,原语默认为0(or false),对象引用默认为null. 但是,局部变量并非如此,如果您尝试以下操作,您将在编译时收到初始化错误

 public static void main(String[] args)
 {
     int i;
     System.out.print(i);
 }

将它们显式初始化为默认值0or falseornull是没有意义的,但您可能希望将它们设置为另一个默认值,然后您可以创建一个具有默认值的构造函数,例如

public MyClass
{
   int theDate = 9;
   String day = "Tuesday";

   // This would return the default values of the class
   public MyClass()
   {
   }

   // Where as this would return the new String
   public MyClass (String aDiffDay)
   {
      day = aDiffDay;
   }
}
于 2013-07-09T04:32:39.837 回答
2

山库和墨菲斯正确回答了这个问题。首先,将原始 int 变量“integer”设置为 null 时会出现编译错误;您只能对对象执行此操作。其次,Shanku 是正确的,Java 为实例变量分配了默认值,在您的示例代码中它们是“整数”和“随机”;根据范围(公共、私有、受保护、包),实例变量可以在类内或之外查看。

但是,没有为局部变量分配默认值。例如,如果您在构造函数中分配了一个变量,例如“int height;” 那么它不会被初始化为零。

我建议阅读Java 变量文档,它很好地描述了变量,此外,您还可以查看Java 教程,这也是很好的阅读材料。

于 2013-07-09T04:34:08.317 回答
1

在 Java 中,初始化在语言规范中明确定义。对于字段和数组组件,在创建项目时,系统会自动将它们设置为以下默认值:

数字:0 或 0.0

布尔值:假

对象引用:空

这意味着将字段显式设置为 0、false 或 null(视情况而定)是不必要且多余的。

于 2013-07-09T04:24:22.163 回答