观察之前的代码:
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>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() ;
<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,如需转载请自行联系原作者