在自己的类中实例化一个类型

时间:2013-06-14 06:57:48

标签: java object instantiation

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

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

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

3 个答案:

答案 0 :(得分:2)

很多事情都错了。

例如,new是保留关键字,您不能将其用作方法名称;

然后,在这个函数中:

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

obj1obj2未定义。如果您使用“new()方法”,则obj1obj2引用会超出范围,无法再访问;

最后,obj3obj4不受此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)

obj1obj2test()方法中不可见。 void new()是非法的方法声明,因为new是关键字。

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

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

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