Java 如何从类中的方法访问对象?

Java 如何从类中的方法访问对象?,java,Java,我有两个类,A和B。A包含我想在B中使用的属性 每次初始化一个新对象时,我想将在B中初始化的所有对象放入一个数组中。使用此代码,第一个对象应转到数组位置1,第二个对象应转到数组位置2,依此类推。变量n基本上决定了对象应该到达的位置 我知道用“this”我可以从这个对象中访问单个变量(正如你在x和y中看到的),但我不知道如何访问整个对象。您可以看到,我的代码中有一条注释,它显示了我尝试执行的操作。它不起作用,因为它的语法不正确 我必须在那里放些什么才能让它工作 class A{ p

我有两个类,A和B。A包含我想在B中使用的属性

每次初始化一个新对象时,我想将在B中初始化的所有对象放入一个数组中。使用此代码,第一个对象应转到数组位置1,第二个对象应转到数组位置2,依此类推。变量n基本上决定了对象应该到达的位置

我知道用“this”我可以从这个对象中访问单个变量(正如你在x和y中看到的),但我不知道如何访问整个对象。您可以看到,我的代码中有一条注释,它显示了我尝试执行的操作。它不起作用,因为它的语法不正确

我必须在那里放些什么才能让它工作

class A{
        private int x, y;
        private static int n;
        A(int x, int y){
                this.x = x;
                this.y = y;
                n++;
                //B.object[n] = this.object;
                //I tried this but it doesn't work
        };
}

class B{
        public static A[] object = new A[10];
        public static void main(){
                A object1 = new A(1,2);
                A object2 = new A(3,4);
                A object3 = new A(5,6);
        };
}

B
类中的
对象
引用包含
A
类型的数组
,因此只需设置
B.object[n]=this
如下所示(此处,
this
本身表示当前的
对象,因此无需说
this.object
):

另外,在Java中,
main
方法将
String[]
作为输入参数(如上所示),这将是JVM在开始时执行的方法(尽管使用
main()
,代码会编译,但JVM不会在开始时调用它)



但作为旁注,请记住,您正在尝试的操作会创建循环依赖项(类a依赖于类B,然后类B依赖于类a),因此请避免这样做

尽管javaguy的解决方案解决了您的问题,但它可能会导致编译器发出警告,警告构造函数中存在“泄漏”

这在多线程环境中可能有潜在的危险,因为它允许您在
a
完全运行其构造函数之前(通过
B.object
)获取对
a
的引用

在这种情况下,更好的模式可能是在
A
中有一个静态助手方法,它为您构造这些对象,将它们添加到列表中,然后返回对它们的引用

class A{
    private static int n;

    private int x, y;

    public static A createA(int x, int y){
        A result = new A(x, y);
        n++;
        B.object[n] = result;
        return result;
    }

    private A(int x, int y){
        this.x = x;
        this.y = y;
    }
}



class B{
        public static A[] object = new A[10];
        public static void main(String[] args){
                A object1 = createA(1,2);
                A object2 = createA(3,4);
                A object3 = createA(5,6);
        }
}

通过将构造函数设为私有,可以确保
新的A(1,2)
不会从另一个类中工作,因此必须使用helper方法获取实例。

这就是“this”关键字的作用,但您没有可以联系的实例,因为您使用的是静态方法。
object
未在类
A
中定义,因此编译器错误。use
B.object[n]=此同样,将main定义为
公共静态void main(String[]args)
如果你想让你的程序执行我不想执行类A,这就是为什么我不需要main方法的原因。javaguy实际上很好地解决了我的问题。我只知道使用“this”可以访问对象变量,而没有意识到“this”就是对象本身。我以前不知道。我还测试了javaguys代码,它完全符合我的要求。
class A{
    private static int n;

    private int x, y;

    public static A createA(int x, int y){
        A result = new A(x, y);
        n++;
        B.object[n] = result;
        return result;
    }

    private A(int x, int y){
        this.x = x;
        this.y = y;
    }
}



class B{
        public static A[] object = new A[10];
        public static void main(String[] args){
                A object1 = createA(1,2);
                A object2 = createA(3,4);
                A object3 = createA(5,6);
        }
}