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