0

我无法弄清楚这段代码有什么问题

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;
    }
}

请有人解释一下这段代码到底有什么问题?

4

3 回答 3

2

很多事情都是错的。

一是new保留关键字,不能用作方法名;

然后,在这个函数中:

void test(Test obj3,Test obj4)
{
    new();
    obj3=obj1;
    obj4=obj2;
}

obj1并且obj2没有定义。一个你脱离了你的“new()方法”,你的obj1obj2引用超出了范围,再也无法到达;

最后,obj3并且obj4不会受此test()方法的影响,因为 Java 通过值而不是引用传递参数:

// doesn't work; when the caller returns, victim is still the same
public void changeInt(int victim)
{
    victim = 0;
}
于 2013-06-14T07:00:32.447 回答
2

Change your Code to

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;
}
}

And Try to learn about Scope in java and and new is reserved keyword

于 2013-06-14T07:03:33.303 回答
1

obj1并且obj2在方法内部是不可见的test()void new()是非法的方法声明,因为new是关键字。

  1. 您需要将obj1and声明obj2为实例方法,或者需要以某种方式将其test()作为参数传递给该方法。

  2. 将方法重命名为void new()其他名称。

我的建议只是解决编译错误。它不考虑代码中的逻辑错误(如果有的话)。

于 2013-06-14T06:59:02.017 回答