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它们不会起作用,但它是一个有效的语法:)。