这个代码不长,但我搞不清楚为什么“Apple.applePrice = applePrice+Apple.applePrice;”就得出苹果总价,搞不懂他是怎么运行的,请大神指点!
public static void main(String[] args) {
Apple apple = new Apple();
apple.addPrice(50);
Apple apple2 = new Apple();
apple2.addPrice(100);
System.out.println("苹果的价格为 " + Apple.applePrice);
}
public static class Apple {
public static int applePrice = 0;
public static void addPrice(int applePrice) {
Apple.applePrice = applePrice+Apple.applePrice;
}
}
首先你要搞明白,这个成员方法是用来做相加求和操作的,每一次的调用addPrice方法,Apple.applePrice 会被重新赋值,
新的数值,就是原数值和参数的值相加。
Apple apple = new Apple();
apple.addPrice(50); // Apple.applePrice ,也就是苹果价格为50元
Apple apple2 = new Apple();
apple2.addPrice(100); //再次调用这个方法,苹果总价为 100 + 50 = 150。
重新理解一下这个方法
Apple.applePrice = applePrice+Apple.applePrice;
苹果价格 = 新的参数 + 苹果原来的价格
applePrice是静态变量,静态变量是在程序加载时时就被初始化了,不是在类实例化阶段(new操作)初始化的,所以第一次add完后,价格就是50,当
第二次再new一个Apple去add价格,此时的Apple.applePrice就是50,所以最终是150.
applePrice属性是静态的,无论创建几个Apply他们的applePrice都是同一个,所以你不管用哪个实例进行操作,他们修改的都是同个变量
这就是new一个Apple对象,调用Apple类里面的静态方法传值进去进行求和计算,Apple.applePrice就是调用该类的静态变量applePrice 。Apple.applePrice = applePrice+Apple.applePrice;这段代码就对是静态变量求和后重新赋值给applePrice,从而实现传入苹果的价格进行累计求和的目的。 System.out.println("苹果的价格为 " + Apple.applePrice);最后输出的 Apple.applePric=0+50+100=150.
在类体中定义的变量分为成员变量和静态变量,由static修饰的变量称为静态变量,没有被static修饰的变量称为成员变量。成员变量其实是属于每一个对象的特殊描述,静态变量是被所有对象所共享的。在内存表现上,对于不同的对象,成员变量将被分配不同的内存空间,而静态变量都分配给相同的一处内存。