天天看点

构造方法

观察之前的代码:

                   Student s = new Student() ;

                   s.setStuno("s001") ;

                   s.setName("张三") ;

                   s.setMath(90.0f) ;

                   s.setEnglish(89.0f) ;

                   s.setComputer(99.0f) ;

       先实例化一个对象,之后通过此对象分别调用setter方法,此时,所有的属性内容是在对象实例化之后才进行设置的,很麻烦,特别希望能否在对象被实例化的同时就把属性的内容赋上,如果要完成此操作就必须通过构造方法完成。

       对象的产生格式:Student s = new <b>Student()</b> ;

       只要在代码中出现了“()”,就表示调用方法。实际上此方法,就是一个构造方法。

       一实例化对象,则构造方法会被自动调用。

       在之前的所有代码之中,可以发现并没有构造方法的声明,在JAVA程序中,如果一个类没有明确的声明一个构造方法,则会自动生成一个无参的,什么都不做的构造方法。

         Person(){

         }

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

<b>                   name = "noname" ;</b>

<b>                   age = 0 ;</b>

现在外面对于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&gt;0&amp;&amp;a&lt;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() ;

<b>要求:</b>

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

                   name = "noname" ;

                   age = 0 ;

现在在以下的代码之中又存在了新的问题:

       对于一个类而言,所有的属性的设置,最终都要经过setter方法。

         // 此构造方法被重载了

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

                   this.setName(n) ;

                   this.setAge(a) ;

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

<b>练习:</b>

写一个公司员工类

数据成员:

员工号、姓名、薪水、部门

方法:

利用构造方法完成设置信息:

              A、单参,只传递员工号,则员工姓名:无名氏,薪水:0,部门:未定

              B、双参,传递员工号,姓名,则员工薪水为1000,部门:后勤

              C、四参,传递员工号,姓名,部门,薪水

              D、无参,则均为空值

显示信息

main方法中:

创建两个对象,分别进行验证。

         private String empno ;

         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){

                   setName(name) ;

                   setSal(1000.0f) ;

                   setDept("后勤") ;

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

                   setSal(s) ;

                   setDept(d) ;

         public String getInfo(){

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

         public void setEmpno(String eno){

                   empno = eno ;

         public void setName(String n){

         public void setSal(float s){

                   sal = s ;

         public void setDept(String d){

                   dept = d;

         public String getEmpno(){

                   return empno ;

         public float getSal(){

                   return sal ;

         public String getDept(){

                   return dept ;

public class Demo10{

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

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

<b>匿名对象:</b>

       匿名:没有名字,无名的对象。

       而且此对象只使用一次。

public class OODemo11{

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

本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/91234,如需转载请自行联系原作者