观察之前的代码:
                   Student s = new Student() ;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

                   s.setStuno("s001") ;

                   s.setName("张三") ;

                   s.setMath(<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />90.0f) ;

                   s.setEnglish(89.0f) ;

                   s.setComputer(99.0f) ;

 

       先实例化一个对象,之后通过此对象分别调用setter方法,此时,所有的属性内容是在对象实例化之后才进行设置的,很麻烦,特别希望能否在对象被实例化的同时就把属性的内容赋上,如果要完成此操作就必须通过构造方法完成。
       对象的产生格式:Student s = new Student() ;
       只要在代码中出现了“()”,就表示调用方法。实际上此方法,就是一个构造方法。
       一实例化对象,则构造方法会被自动调用。
       在之前的所有代码之中,可以发现并没有构造方法的声明,在JAVA程序中,如果一个类没有明确的声明一个构造方法,则会自动生成一个无参的,什么都不做的构造方法。
         Person(){

                  

         }

       通过构造方法,为类中的属性初始化
         Person(){

                   name = "noname" ;

                   age = 0 ;

         }

 

现在外面对于Person的时候需要设置两个属性,一个是name另外一个是age
       如果在一个类中已经明确的存在了一个构造方法,则不会再自动生成无参的什么都不做的构造方法。
class Person{

         // 属性

         private String name ;

         private int age ;

         // 定义一个构造方法

         Person(String n,int a){

                   name = n ;

                   age = a ;

         }

         public void setName(String str){

                   name = str ;

         }

         public void setAge(int a){

                   if(a>0&&a<150)

                            age = a ;

         }

         public String getName(){

                   return name ;

         }

         public int getAge(){

                   return age ;

         }

         public void talk(){

                   System.out.println("姓名:"+name+",年龄:"+age) ;

         }

};

public class OODemo09{

         public static void main(String args[]){

                   Person p = null ;

                   p = new Person("张三",30) ;

                   p.talk() ;

         }

};

 

要求:

person类中最好存在两个构造方法,一个是有参的,一个是无参的。那么此时就需要使用方法重载的概念。

 

         Person(){

                   name = "noname" ;

                   age = 0 ;

         }

         Person(String n,int a){

                   name = n ;

                   age = a ;

         }

 

现在在以下的代码之中又存在了新的问题:
       对于一个类而言,所有的属性的设置,最终都要经过setter方法。
class Person{

         // 属性

         private String name ;

         private int age ;

         // 定义一个构造方法

         // 此构造方法被重载了

         Person(){

                   name = "noname" ;

                   age = 0 ;

         }

         Person(String n,int a){

                   // 在此处调用setter方法,完成设置

                   this.setName(n) ;

                   this.setAge(a) ;

         }

         public void setName(String str){

                   name = str ;

         }

         public void setAge(int a){

                   if(a>0&&a<150)

                            age = a ;

         }

         public String getName(){

                   return name ;

         }

         public int getAge(){

                   return age ;

         }

         public void talk(){

                   System.out.println("姓名:"+name+",年龄:"+age) ;

         }

};

public class OODemo09{

         public static void main(String args[]){

                   Person p = null ;

                   p = new Person("张三",-30) ;

                   p.talk() ;

         }

};

 

练习:

写一个公司员工类
数据成员:
员工号、姓名、薪水、部门
方法:
利用构造方法完成设置信息:
              A、单参,只传递员工号,则员工姓名:无名氏,薪水:0,部门:未定
              B、双参,传递员工号,姓名,则员工薪水为1000,部门:后勤
              C、四参,传递员工号,姓名,部门,薪水
              D、无参,则均为空值
显示信息
main方法中:
创建两个对象,分别进行验证。

 

         private String empno ;

         private String name ;

         private float sal ;

         private String dept ;

 

         Employee(){

                   empno = "" ;

                   name = "" ;

                   sal = 0.0f ;

                   dept = "" ;

         }

         Employee(String eno){

                   setEmpno(eno) ;

                   setName("无名氏") ;

                   setSal(0.0f) ;

                   setDept("未定") ;

         }

         Employee(String eno,String name){

                   setEmpno(eno) ;

                   setName(name) ;

                   setSal(1000.0f) ;

                   setDept("后勤") ;

         }

         Employee(String eno,String name,float s,String d){

                   setEmpno(eno) ;

                   setName(name) ;

                   setSal(s) ;

                   setDept(d) ;

         }

 

         public String getInfo(){

                   return "雇员编号:"+empno+",姓名:"+name+",薪水:"+sal+",部门名称:"+dept ;

         }

 

         public void setEmpno(String eno){

                   empno = eno ;

         }

         public void setName(String n){

                   name = n ;

         }

         public void setSal(float s){

                   sal = s ;

         }

         public void setDept(String d){

                   dept = d;

         }

         public String getEmpno(){

                   return empno ;

         }

         public String getName(){

                   return name ;

         }

         public float getSal(){

                   return sal ;

         }

         public String getDept(){

                   return dept ;

         }

};

public class Demo10{

         public static void main(String args[]){

                   Employee e = new Employee("e001","张三") ;

                   System.out.println(e.getInfo()) ;

         }

};

 

匿名对象:

       匿名:没有名字,无名的对象。
       而且此对象只使用一次。
class Person{

         // 属性

         private String name ;

         private int age ;

         // 定义一个构造方法

         // 此构造方法被重载了

         Person(){

                   name = "noname" ;

                   age = 0 ;

         }

         Person(String n,int a){

                   // 在此处调用setter方法,完成设置

                   this.setName(n) ;

                   this.setAge(a) ;

         }

         public void setName(String str){

                   name = str ;

         }

         public void setAge(int a){

                   if(a>0&&a<150)

                            age = a ;

         }

         public String getName(){

                   return name ;

         }

         public int getAge(){

                   return age ;

         }

         public void talk(){

                   System.out.println("姓名:"+name+",年龄:"+age) ;

         }

};

public class OODemo11{

         public static void main(String args[]){

                   new Person("张三",-30).talk() ;

         }

};