代码如下:
 class student {
  public String name="";
  private boolean sex=false;
  private String birthday="";
  private int num=000000;
  student() {
  }
 student(String name,boolean sex,String birthday,int num) {
this.name=name;
this.sex=sex;
this.birthday=birthday;
this.num=num;
  }
 public void setSex(boolean sex){
   this.sex=sex;
  }
  public char  getSex() {
  char s;
  if (this.sex)
  {
  s='男';
  }
  else
  s='女';
return s;
  }
   public void setBirthday(String birthday){
   this.birthday=birthday;
  }
  public String  getBirthday() {
return this.birthday;
  }
  public void setNum(int num){
   this.num=num;
  }
  public int  getNum() {
return this.num;
  }
}
public class StudentTest {
 public static void main(String[] args){
       student st= new student("Catherine",false,"1972-01-01",20070203);
       System.out.println("姓名:"+st.name+"\n"
                      +"性别:"+st.getSex()+"\n"
 +"出生年月:"+st.getBirthday()+"\n"
  +"学号:"+st.getNum()+"\n");
   st.name="join";
   st.setSex(true);
   st.setBirthday("1970-01-01");
   st.setNum(20070801);
   System.out.println("姓名:"+st.name+"\n"
                      +"性别:"+st.getSex()+"\n"
 +"出生年月:"+st.getBirthday()+"\n"
  +"学号:"+st.getNum()+"\n");
    }
}
打印结果如下:
姓名:Catherine
性别:女
出生年月:1972-01-01
学号:20070203姓名:join
性别:男
出生年月:1970-01-01
学号:20070801
问题1:代码中为什么会出两个构造函数,其中一个是空的,另一个是带参数的,我把空的构造函数注释掉一样编译通过,打印结果相同,请问这个空构造函数在这起什么作用?
问题2:char定义的数据似乎只能定义一个字节的,而这里的"男","女"是汉字有两个字节了,为什么能编译通过?
问题3:代码中已经new了Student的实列,传了参数,为什么不能直接通过get()方法获得值,而要先set()?是不是因为变量定义了private的缘故?如果是的话我可以理解为定义了private的变量如果要调用都要先用set()方法赋值?如果不是这样理解的话还请详细说明.
问题4:这里的if判断语句中判断条件(this.sex)怎么理解?它是根据什么来给出男或女的,也就是说判断标准是什么,为什么传了false给出女,传了ture就是男?举列来说if(x>0)是男,else是女,那就看传的参数是否大于0,而这里我没看出判断的标准.
最后非常感谢看完此贴的人,当然更是要谢谢给予帮助和解答的人.我想正是由于你们的的存在和默默的付出,才是我们java菜鸟前进的引路人.我刚在csdn上注册,这是我的处子贴,所以多说几句.我是一位军事迷,最后请允许我引用一句写镶嵌在北京总参荣誉室的那四句话送给这里的黑客达人们 :无声战线,无名英雄,无私奉献,无尚光荣。

解决方案 »

  1.   

    问题1:为什么不能有多个构造函数? 构造函数也是个函数,难道函数重载有问题吗?如果没有那个空的构造函数(其实是不带参数的构造函数),那么你只能new student("Catherine",false,"1972-01-01",20070203); 这样来new student实例,而有了那个不带参数的构造函数,就可以new student()来构造实例了。事实上,如果你没有提供任何构造函数,编译器会给你提供一个默认的构造函数,这个默认的构造函数就跟你那个空的构造函数一样,不带任何参数,什么事也不干。如果你提供了任何一个构造函数,编译器就不会给你提供默认构造函数了,这个时候如果你还想要有一个不带参数的构造函数,你就的自己写一个,类似你的例子。
    问题2:一个char就是2个字节,16位。
    问题3:对于类的变量,如果你没有赋值,会有默认值:数值类型默认值是0,引用类型是null。 你的这个问题我实在没看懂,你逻辑混乱。
    问题4:这个问题我很无语,明明上面sex是个boolean类型的变量,所有if判断条件判断的就是这个啊,传false认为是女,传true认为是男呗。