Java 在自己的类中实例化类型

Java 在自己的类中实例化类型,java,object,instantiation,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();

我无法找出这个代码的错误

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

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

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

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

  • 将方法
    void new()
    重命名为其他方法


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

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

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

  • 将方法
    void new()
    重命名为其他方法

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

    很多事情都错了

    首先,
    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;
    }
    
    很多事情都错了

    首先,
    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;
    }
    
    将代码更改为

    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中的作用域,并将代码更改为

    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中的作用域和
    new
    is reserved关键字编译器在说什么?您应该阅读这些消息。您使用的
    new
    关键字完全错误,也许您应该从一些简单的Java教程开始。编译器在说什么?您应该阅读这些消息。您使用的
    new
    关键字完全错误,也许您应该从一些简单的Java教程开始。哦,是的,忘记了范围哦,是的,忘记了范围并不能解决我认为的
    测试
    方法的意图。@Heuster抱歉,我不明白你的意思?@fge它们不会起作用,但这是一个有效的语法:)。但这并不能解决我所认为的
    测试方法的意图。@Heuster抱歉,我不明白你的意思?@fge它们不会起作用,但它是一个有效的语法:)。