Java类中定义或初始化属性

22

定义类属性和初始化类属性有区别吗?有哪些情况下您希望执行其中之一?

示例:

以下代码片段应该说明我所指的区别。我在那里使用了基元和对象:

import Java.util.Random;

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

    Something(){
        integer = 0;
        random = new Random();
        ....
vs.
import Java.util.Random;

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

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

我会在类级别上列出变量,并使用构造函数对它们进行初始化。 - Venki
同时,您正在尝试将 null 传递给原始类型,这可能会引起一些麻烦。 - Venki
3个回答

21

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

其次,在类中声明变量时将它们初始化为null0是多余的。在Java中,原始类型默认为0(或false),而对象引用默认为null。然而,在局部变量的情况下,情况并非如此。如果你尝试以下操作,你将在编译时得到一个初始化错误:

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

显式地将它们初始化为默认值0falsenull是无意义的,但如果您想将它们设置为其他默认值,则可以创建一个具有默认值的构造函数,例如:

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;
   }
}

2
Shanku和Morpheus正确回答了这个问题。首先,将原始int变量"integer"设置为null会导致编译错误;你只能对对象执行此操作。其次,Shanku是正确的,Java会为实例变量(在你的示例代码中为"integer"和"random")分配默认值;实例变量可以在类内或类外部查看,具体取决于范围(public,private,protected,package)。
然而,默认值不会局部变量分配。例如,如果你在构造函数中分配了一个变量,如"int height;",则它将不会被初始化为零。
我建议阅读Java变量文档,其中很好地描述了变量,并且你还可以查看Java教程,这也是很好的阅读材料。

1
在Java中,初始化是在语言规范中明确定义的。对于字段和数组组件,在创建项目时,系统会自动将它们设置为以下默认值:
数字:0或0.0
布尔值:false 对象引用:null
这意味着明确将字段设置为0、false或null(如果适用)是不必要和冗余的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接