理解这个java类

时间:2013-08-02 20:46:19

标签: java class methods

有人可以给我详细解释这段代码并告诉我为什么打印出它打印的输出。这是我测试的示例练习题。我真的很擅长这些方法和类的一部分。所以假设我对这个主题知之甚少。请逐行说明并告诉我价值的变化。因此,如果在测试中出现类似的问题,我将能够做到这一点。 产量是苹果,葡萄,梨,猕猴桃,橙子,梨,梨,葡萄,橙子,20

public Purchase questionSampleInClass(Purchase p1, int newX) {
    newX=30
    Purchase p2= new Purchase("banana", 5, 4.50, 12);
    Purchase p3= new Purchase("plum", 6, 5.50, 10);
    p1=p2;
    p3=this;
    p3.setName("pears");
    p1.setName("oranges");
    p1 = new Purchase("kiwi", 6, 3.00, 3);
    System.out.println(this.getName());
    System.out.println(p2.getName());
    System.out.println(p3..getName());
    return p2;
}

public class PurhaseDemoClassProblem {
    public static void main(String{} args) {
        Purchase oneSale= new Purchase("apples", 4, 3.50, 6);
        Purchase twoSale= new Purchase("grapes", 8, 1.99, 4);
        Purchase threeSale;
        int x=20;
        System.out.println(oneSale.getName());
        Syste,.out.println(twoSale.getName());
        threeSale= oneSale.questionSampleInClass(twoSale, x);
        System.out.println(oneSale.getName());
        System.out.println(twoSale.getName());
        System.out.println(threeSale.getName());
        System.out.println(x);
    }
}

2 个答案:

答案 0 :(得分:2)

你的程序的执行从main()方法开始,所以让我们从那里开始。

前两行:

Purchase oneSale= new Purchase("apples", 4, 3.50, 6);
Purchase twoSale= new Purchase("grapes", 8, 1.99, 4);

创建两个分配了一些值的Purchase对象。 (name =“apples”,“grapes”)我们没有足够的细节知道其他值是什么。

第三行创建第三个Purchase对象,但未指定任何值。

Purchase threeSale;

Int x=20只是将值20赋给名为x的整数变量。

接下来的两行将前两个Purchase对象的名称打印到控制台。 (“苹果”,“葡萄”)

System.out.println(oneSale.getName());
System.out.println(twoSale.getName());

下一行 threeSale= oneSale.questionSampleInClass(twoSale, x); 在oneSale购买对象上调用方法questionSampleInClass()。它在方法调用中传递两个参数:twoSale Purchase对象和整数x

questionSampleInClass()方法中, 第一个命令newX=30将值从20更改为30. 但这对于您的测试来说是一个技巧,对于questionSampleInClass()方法中的变量newX,该值仅为30。变量x的值保持不变,为20。

Purchase p2= new Purchase("banana", 5, 4.50, 12);
Purchase p3= new Purchase("plum", 6, 5.50, 10);

再创建两个名为“banana”和“plum”的商品。

p1=p2;

将p2(“banana”)引用的Purchase对象分配给p1。它作为“葡萄”购买进入方法,但现在被分配给“banana”购买对象。

p3=this;

重新分配p3 Purchase变量以引用与oneSale相同的对象。 p3变量现在引用“apple”购买对象。 “李子”物体丢失了。

p3.setName("pears");

此命令将“apple”购买对象的名称更改为“梨”。注意:p3变量指向与oneSale Purchase对象相同的对象。

p1.setName("oranges");

将p1引用的Purchase对象的名称从“banana”更改为“oranges”。注意:这也是变量p2引用的相同对象。

p1 = new Purchase("kiwi", 6, 3.00, 3);

将p1变量分配给名为“kiwi”

的新创建的Purchase对象
System.out.println(this.getName());

将当前对象的名称打印到控制台。价值是“梨子” “this”是我们的oneSale变量,因为我们在oneSale对象上调用了此方法。 oneSale.questionSampleInClass(twoSale,X);

System.out.println(p2.getName());

打印p2引用的Purchase对象的名称:“oranges”

System.out.println(p3.getName());

打印p3引用的Purchase对象的名称:“pears”

然后,QuestionSampleInClass()方法返回main()并将p2“pear”对象分配给threeSale。

回到main()...

System.out.println(this.getName());

打印出oneSale的名称。 “梨”。 请记住,p3.setName(“pears”)更改了值,该值已分配给与“this”相同的对象,即oneSale。

System.out.println(twoSale.getName());

打印出两个销售名称“葡萄”。 在另一个方法中,值永远不会改变,因为我们将参数p1更改为使用p1 = p2指向不同的对象;命令。

 System.out.println(threeSale.getName());

打印出threeSale Purchase对象的名称:“oranges”。 这是我们在返回p2中分配的p2对象;言。

最后,

System.out.println(x);

打印出x的值。这是“20”。 X was not really changed in the other method because it was passed in as a scalar parameter value.

答案 1 :(得分:0)

希望这会帮助您完成测试。请注意,我没有向您提供您要求的答案,而是指出了一些可能对您有所帮助的关键事项。

public class Purchase {

        private String name;

        public Purchase(String name, int something, double price, int somethingElse) {
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Purchase questionSampleInClass(Purchase p1, int newX) {
            newX = 30;//set newX passed in parameter to value 30
            Purchase p2 = new Purchase("banana", 5, 4.50, 12);//create new instance of Purchase
            Purchase p3 = new Purchase("plum", 6, 5.50, 10);//create another new instance of Purchase
            p1 = p2;//p1, the passed in parameter will now be assigned equal to p2
            p3 = this;//p3 becomes assigned to the instance which called the method questionSampleInClass
            p3.setName("pears");//p3's name will be changed from plum to pears
            p1.setName("oranges");//p1's name will be changed from banana(remember it was assigned p2) to oranges
            p1 = new Purchase("kiwi", 6, 3.00, 3);//a new instance of Purchase is assigned to p1, wiping out the change made in the previous line
            System.out.println(this.getName());
            System.out.println(p2.getName());
            System.out.println(p3.getName());
            return p2;
        }
    }

public class PurchaseDemoClassProblem {

        public static void main(String[] args) {
            Purchase oneSale= new Purchase("apples", 4, 3.50, 6);
            Purchase twoSale= new Purchase("grapes", 8, 1.99, 4);
            Purchase threeSale;
            int x=20;
            System.out.println(oneSale.getName());
            System.out.println(twoSale.getName());
            threeSale = oneSale.questionSampleInClass(twoSale, x);
            System.out.println(oneSale.getName());
            System.out.println(twoSale.getName());
            System.out.println(threeSale.getName());
            System.out.println(x);
        }
    }