观察之前的代码:
|
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 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() ;
}
};
|
本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/91234,如需转载请自行联系原作者