我无法弄清楚这段代码有什么问题
class Test {
int a;
Test() {
a=10;
}
void new() {
Test obj1=new Test();
Test obj2=new Test();
obj1.a=20;
obj2.a=30;
}
void test(Test obj3,Test obj4) {
new();
obj3=obj1;
obj4=obj2;
}
}
请有人解释这段代码到底出了什么问题?
答案 0 :(得分:2)
很多事情都错了。
例如,new
是保留关键字,您不能将其用作方法名称;
然后,在这个函数中:
void test(Test obj3,Test obj4)
{
new();
obj3=obj1;
obj4=obj2;
}
obj1
和obj2
未定义。如果您使用“new()
方法”,则obj1
和obj2
引用会超出范围,无法再访问;
最后,obj3
和obj4
不受此test()
方法的影响,因为Java按值传递参数,而不是参考:
// doesn't work; when the caller returns, victim is still the same
public void changeInt(int victim)
{
victim = 0;
}
答案 1 :(得分:2)
将您的代码更改为
class Test
{
int a;
Test obj1;
Test obj2;
Test()
{
a=10;
}
void tester()
{
obj1=new Test();
obj2=new Test();
obj1.a=20;
obj2.a=30;
}
void test(Test obj3,Test obj4)
{
tester();
obj3=obj1;
obj4=obj2;
}
}
尝试了解java中的Scope,new
是保留关键字
答案 2 :(得分:1)
obj1
和obj2
在test()
方法中不可见。 void new()
是非法的方法声明,因为new
是关键字。
您需要将obj1
和obj2
声明为实例方法,或者需要以某种方式将其作为参数传递给test()
方法。
将方法void new()
重命名为其他内容。
我的建议只是解决编译错误。它没有考虑代码中的逻辑错误(如果有的话)。