博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构造方法
阅读量:5940 次
发布时间:2019-06-19

本文共 3751 字,大约阅读时间需要 12 分钟。

观察之前的代码:
                   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,如需转载请自行联系原作者
你可能感兴趣的文章
<气场>读书笔记
查看>>
领域驱动设计,构建简单的新闻系统,20分钟够吗?
查看>>
web安全问题分析与防御总结
查看>>
React 组件通信之 React context
查看>>
ZooKeeper 可视化监控 zkui
查看>>
Linux下通过配置Crontab实现进程守护
查看>>
ios 打包上传Appstore 时报的错误 90101 90149
查看>>
Oracle推出轻量级Java微服务框架Helidon
查看>>
密码概述
查看>>
autoconf,automake,libtool
查看>>
jQuery的技巧01
查看>>
基于泛型实现的ibatis通用分页查询
查看>>
gopacket 使用
查看>>
AlertDialog对话框
查看>>
我的友情链接
查看>>
linux安全---cacti+ntop监控
查看>>
鸟哥的linux私房菜-shell简单学习-1
查看>>
nagios配置监控的一些思路和工作流程
查看>>
通讯组基本管理任务三
查看>>
赫夫曼编码实现
查看>>