在方法内实例化公共对象

时间:2016-06-08 06:13:42

标签: java oop

我试图在类的方法中实例化一个对象,以便它可以在类的任何地方使用。我来自python背景,它非常简单,你可以将实例化的对象传递给它的实例" s" self"如下。

self.camera = CameraInstance()

你是如何用Java做到的?我尝试了类似下面的东西,但它并不喜欢它。

private void init_camera_settings() {
    public CameraInterface camera;
    camera.TakePhoto()
}

private void someotherMethod() {
    camera.TakePhoto()
}

两种方法属于同一类。原因是因为我只想在某些情况下实例化相机对象。

谢谢!

3 个答案:

答案 0 :(得分:3)

您无法在方法中声明字段。在Java中,类型要么具有字段,要么不具有字段。同一个类的每个实例都有相同的字段集。

但您可以声明字段(不在方法中)并决定仅在方法中为其指定

// Note: avoid public fields
public CameraInterface camera;

private void initCameraSettings() {
    camera = new Camera();
}

private void someotherMethod() {
    camera.takePhoto();
}

(该字段将具有默认值,在本例中为null,直到您为其指定不同的值。)

顺便说一句,我强烈建议反对公共领域。我将每个字段设为私有,并添加属性以允许在必要时访问。这允许您稍后更改实现细节。一个例外是public static final不可变类型的字段,基本上是常量,但即使在那里我也要谨慎。

答案 1 :(得分:1)

要在不同方法的class中使用变量,变量应该具有类范围。您通常使用new来创建新对象

public MyClass {

    public CameraInterface camera = new Camera ();


private void init_camera_settings() {
    camera.TakePhoto()
}

private void someotherMethod() {
    camera.TakePhoto()
}
}

答案 2 :(得分:0)

self.camera = CameraInstance()

相当于:

class Foo {

    private CameraInstance camera;

    public Foo() {
        this.camera = new CameraInstance();
    }

    // use "this.camera" in methods.
}