Java中构造函数的意义何在



在下面的代码中,只在构造函数中创建数组有什么优点/缺点/原因吗?也就是说,我应该知道下面的两段代码之间有什么区别吗?

仅在构造函数中。

public class multidimensionalarraysExp {
    public multidimensionalarraysExp() {
        int[][] intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}};
    }
}

相比之下:

public class multidimensionalarraysExp {
    private int[][] intArray;
    public multidimensionalarraysExp() {
        intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}};
    }
}

我假设这是因为如果我在构造函数中创建它,我就不能说它是公共的还是私有的等等。那么这是默认的吗?

我当然可以这样做,但为什么一开始就有构造函数呢?

public class multidimensionalarraysExp {
        private intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}};
        public multidimensionalarraysExp() {
        }
    }

一些基本问题,但我不明白为什么需要一个构造函数。。。。。

在第一个例子中,您将数组声明为局部变量,因此它只能在构造函数内部访问。

在第二个例子中,数组将在整个类(private(中可访问。

根据这个答案(根据您的情况调整(,有一些理由更喜欢使用第三种方式:

  • 没有区别-实例变量初始化实际上是由编译器放入构造函数中的
  • 第三个片段可读性更强
  • 不能对第三个代码段进行异常处理
  • 另外还有初始化块,它也由编译器放入构造函数中
public multidimensionalarraysExp() {
    int[][] intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}};
}

这里,数组只能在构造函数中访问,因为它是构造函数的局部变量。

若在类级别声明数组,则可以在整个类中访问它,但在以下情况下,当您通过默认构造函数创建类的实例时,将对其进行初始化。

public multidimensionalarraysExp() {
    intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}};
}

因此,如果您创建new multidimensionalarraysExp(),您的数组将被初始化。

为什么首先要有构造函数?

它只会在创建实例之后为变量赋值,而不是在第二种情况下创建实例之前。

如果要为类的不同实例分配不同的数组值,可以将数组作为参数传递给构造函数。

 public multidimensionalarraysExp(int[][] intArray) {
        this.intArray = intArray;
    }

在第一个片段中,您的数组是一个局部变量,因此它在此类的其他方法中不可用。

在您的情况下,在构造函数中初始化数组(第二个片段(和在声明字段时初始化数组(第一个片段(没有区别。在构造函数中初始化数组的唯一原因是若要传递一些参数。

根据oracle的文档,两种方式都可以,没有偏好。

构造函数的作用是初始化对象的状态。

例如,如果数组的长度或其值会根据传递给构造函数的值而变化,则可以使用构造函数初始化数组。

例如,一个类卡可以接受一套套装,这将初始化具有给定套装的所有12张卡。

但是,如果数组没有根据构造函数的类型或传递给它的值而更改,那么在构造函数内部初始化数组是没有意义的。

相关内容

  • 没有找到相关文章

最新更新