Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 请帮助我理解';分配';方法在下面的代码中_Java_Oop - Fatal编程技术网

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
    的值
  • 还要注意,它不是构造函数。。它只是将传递的引用的值分配给当前对象。。而构造函数在创建实例后初始化实例的状态
类(测试)如何作为参数在方法中传递

我们没有通过类测试,相反,我们通过了对类测试对象的参考

此方法只创建该引用指向的对象的副本(本例中为ob)。。因此,执行此方法后,当前对象(由
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?