Java 请帮助我理解';分配';方法在下面的代码中
输出Java 请帮助我理解';分配';方法在下面的代码中,java,oop,Java,Oop,输出 class TestDem { public static void main(String ar[]) { Test ob1 = new Test(1, 2); System.out.println("1st object"); ob1.print(); Test ob2 = new Test(); System.out.println("2nd object"); o
class TestDem {
public static void main(String ar[]) {
Test ob1 = new Test(1, 2);
System.out.println("1st object");
ob1.print();
Test ob2 = new Test();
System.out.println("2nd object");
ob2.print();
ob2.assign(ob1); //dont understand how this statement works with the 'assign' method
System.out.println("After assigning object 1 to object 2");
System.out.println("1st object");
ob1.print();
System.out.println("2nd object");
ob2.print();
}
}
此方法与您使用的构造函数类似:-
void assign(Test ob) {
this.a = ob.a;
this.b = ob.b; //What does ob.b do?
}
- 不同之处在于,在此方法中,您从传递的引用而不是参数a和b本身获取
和a
的值b
- 还要注意,它不是构造函数。。它只是将传递的引用的值分配给当前对象。。而构造函数在创建实例后初始化实例的状态
this
指向)将与传递的对象具有相同的值
ob.a是做什么的
ob.a引用传递到此方法中的类Test
的引用ob
的实例变量a
因此,如果您有:-
public Test(int a, int b) {
this.a = a;
this.b = b;
}
然后执行此方法时:-
public Test(int a, int b) {
this.a = a;
this.b = b;
}
由于,此
引用当前引用,因此方法分配中的此
将引用ob1
,因为我们调用此引用
并且,您将在main方法中使用参考ob2
,在assign
方法的参数中使用指向同一对象的ob
因此,ob1.a(this.a)将等于ob2.a,并且
ob1.b(this.b)将等于ob2.b
Test ob2 = new Test(1, 2);
Test ob1 = new Test();
ob1.assign(ob2);
在Java中(除了int等基本类型,这里不讨论它们),所有东西都扩展对象
您定义了一个类Test
,该类隐式扩展了对象
。
此类有两个成员变量:a
和b
,属于int
类型
如果ob
属于Test
类型,则可以使用ob.a
和ob.b
访问其成员(因为a
和b
是公共的)。您可以使用ob.a=anitvalue
和ob.b=anitvalue
设置它们的值
这就是您在assign
方法中所做的:传递另一个类型为Test
的对象,并将其值复制到封闭对象中(this.a=value
,this.b=value
)
因此,您的方法的结果是通过复制外部对象的状态来修改您的内部状态。方法void assign(Test ob)
获取类型为Test
的对象ob
。然后,它将ob
的a
值分配给调用该方法的类的a
值,然后将该值分配给b
值
如果将该方法重命名为copy(Test ob)
可能会更清楚该方法的作用是什么?您应该仔细阅读。
Test ob2 = new Test(1, 2);
Test ob1 = new Test();
ob1.assign(ob2);
void assign(Test ob) { //How can a class(Test) be passed as an argument in a method?
this.a = ob.a; //What does ob.a do?
this.b = ob.b; //What does ob.b do?
} //How can a object 'ob' be passed as an argument?