谁能解释一下最后一句为什么输出1000?

c599013081 2011-04-21 08:52:48
public class Rectangle {
static double length;
double width;

public void showArea() {
System.out.println(“L=" + length + ",W=" + width + "\tA=" + length * width);
}
}
public class RectangleDemo {
public static void main(String[] args) {
Rectangle r1 = new Rectangle();
Rectangle r2 = new Rectangle();

r1.length = 30;
r1.width = 20;
r1.showArea(); // L=30.0,W=20.0 A=600.0
r2.length = 50;
r2.width = 40;
r2.showArea(); // L=50.0,W=40.0 A=2000.0
r1.showArea(); // L=50.0,W=20.0 A=1000.0 r1的面积为什么变了?
}
}
...全文
167 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
szc200890 2011-04-22
  • 打赏
  • 举报
回复
因为你的length是静态的,所以当你用r2.length = 50时,就会把ri.length=30覆盖了。所以就等于1000
c599013081 2011-04-22
  • 打赏
  • 举报
回复
很感激各位的回复!我懂了,我来完善一下,static double length;

length是静态的,所有的对象共用一个length;所以r2.length=50改变了r1.length=30的值,也就是说,现在的length=50;因为要求输出 r1.showArea(); r1的width是非静态的double型,故 r1.width = 20不变,不会因为r2.width = 40改变而改变。故最终结果为r2.length * r1.width =50*20=1000.0
不知道解释的好不好?

大家可以加我QQ:599013081 .我们共同进步!!
UPC_思念 2011-04-21
  • 打赏
  • 举报
回复
static声明的变量是属于某个类的,它不属于任何类的实例
dgcxyc 2011-04-21
  • 打赏
  • 举报
回复
因为你的length是用static修饰的。
只要是还在作用范围内,不管是谁对它进行修改,它的值就会保存为修改后的值得。
gentleboy2009 2011-04-21
  • 打赏
  • 举报
回复
去看下书里面的static修饰符的作用就明白了
skysmile007 2011-04-21
  • 打赏
  • 举报
回复
static double length;

长是静态的 所有的对象共用一个length;

r2改变了 length;

r1的也改变了

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧