再说说为什么输出0
首先,代码规范应该如下:
int age;//默认值是0
public void setAge(int age) {
if (age < 0 || age > 130) {
System.out.println("年龄输入非法,设置不成功!");
return;// return表示如果用户输入错误年龄,直接结束这个方法,不进行下面的赋值
}
this.age = age;
}
public int getAge() {
return age;
}
当你调用set方法和get方法时,用的是同一个对象。既然设置年龄值不成功了,肯定会输出对象的默认年龄0。 作者: 武庆东 时间: 2012-9-19 01:11
第五天视频封装那一讲,有个地方迷惑。这段代码输出是age=0. 我知道age有个默认值是0,但是赋值是-40,虽然不符合条件,但为什么输出是0呢?
解答:因为age是int类型,int默认值是0,至始至终没有赋值,所以输出0
还有个小问题,setAge为什么返回值类型是void呢?这个方法不应该返回符合条件的age吗?
解答:因为void说明对外没有提供操作的数据,只是单纯的一个方法~!
如这个返回值是int public int getAge()
{
return age;
}
那么就可以 Person p = new Person();
int s=p.getAge();作者: 郭阳 时间: 2012-9-19 01:24
第一个问题,a在判断的时候,不满足条件if(a>0 && a<130),则执行System.out.println("feifa age");,输出的是字符串feifa age,也就是说age没有被赋值成功。后面又输出了0是因为int age的默认值是0,它是被speak方法输出的
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第二个问题,setAge方法只是将age赋值,不需要其返回什么数据。当然返回值类型为void。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
另外你还有一个问题,speak方法不能被private修饰,如果被private修饰的话,只能在类内部被调用,你自己编译一下肯定会失败的。对外提供的方法不能用private修饰!
class Person
{
private int age;
public void setAge(int a)
{
if(a>0 && a<130)
age = a;
else
System.out.println("feifa age");
}
public int getAge()
{
return age;
}
private void speak() //此处将private去掉或者改为public
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.setAge(-40)//赋值失败,打印feifa age,age依然是默认值0
p.speak();//打印age,即0
}
}
作者: 黑马杨晨 时间: 2012-9-19 12:45
private int age; //这时age的值由于没有赋值所以age的值是默认值0。
public void setAge(int a) //这时把-40这个值传到这里。
{
if(a>0 && a<130) //由于-40这个值不符合条件所以下一句“age=a;”就没有执行到,这里age的值这是默认值0.
age = a;
else
System.out.println("feifa age");
}
class Person
{
private int age;
public void setAge(int a)
{
if(a>0 && a<130)
age = a;
else
System.out.println("feifa age");
}
public int getAge()
{
return age;
}
private void speak()//这去掉private或将其替换成public,private访问权限过低。
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.setAge(-40);//-40不符合if语句中的条件,age没被赋值。所以执行else中的语句。
p.speak();//p.speak();输出的是age的值, age没被赋值 ,会输出默认值
}
}