拳皇99连招视频:问下JAVA的两个问题!!

来源:百度文库 编辑:高校问答 时间:2024/04/29 18:46:15
第一个问题:将类中的变量定义为public,可以通过对象直接操纵变量(对象名.变量名)来破坏对象的封装性,
可以举例说明下危害性吗?

第二个问题:
class zz3{
int a,b;
void count(int x,int y){
x=a;y=b;
System.out.println(a+b);
}

}
public class zz2{
public static void main(String[] args){
zz3 m=new zz3();
m.count(3,4);
}
}

谁能告诉我错在哪里了?程序能编译成功,可是得不到想要的结果.
我要知道我错在哪里,不是要修改后的程序,谢谢,如果满意,我会
加分!!

1.没有什麼危害,到是要看有没有必要。拿你的例子说明一下。建立一个类,类中有一个方法可以打印两个整数相加的结果。那麼代码应该是:
class zz3{
public int a,b; //在同一个包内public不用也行。
void count(){
System.out.println(a+b);
}
}
现在你在另一包类中声明 zz3的对像,并调用count方法。像这样:
zz3 m=new zz3(); m.a=3;m.b=4;m.count();
如果把a和b都设为 private时,其它类对像就只能通过方法去设置或其它操作。
2. 你的 zz3类有错,在count方法中,a和b都没有初始化就被使用了,所以会出现错误。你在声明a和b时就对其初始化,运行就不会报错了,但出现的结果不是你想要的。像这样: int a=3,b=4;运行不会出错,不过调用count方法时打印的总是7,因为 x=a;y=b;是把a的值给x,b的值给y,你想要的是把x的值给a,y的值给b。所以要改为:a=x;b=y;

我来答第二题吧:
这是由于在类zz3中的语句:int a,b;
该语句在类声明的主体中,是在所有类方法声明的主体外声明的。因此这是域的变量声明语句。每个类实例(m)包含这个域的一个副本。作用在整个类。
域和局部变量其中的一个区别是:域有默认值,而局部变量没有。而int型的默认值为0;
在zz3类中的方法count中将a,b分别赋给x,y
所以返回值为0.

X=a;y=b;应改成:a=x;b=y;

第一个问题:将类变量设置为public导致外部程序可以直接修改类变量这样做一般的情况下不会有什么问题,有的时候会更方便,但是这样也破坏了数据的封装导致其他的对象可以任意的修改类变量的值,如果这个类属性对数据的有特殊的要求比如大小范围等,或者数据根其他的属性有关联性,这时把属性设置为public就会出现麻烦了,这个时候就体现了使用方法修改属性的好处:保证数据的正确和完整,防止不合逻辑或意外的数据付给属性。建议养成好的习惯不要为了省一点力气而放弃原则。