1.对象的创建

来源:互联网 发布:excel数据有效性的来源 编辑:程序博客网 时间:2024/04/30 11:35

一、创建对象

两个步骤:1.声明该类的一个变量(引用变量),用于指向“由类创建的对象”;

                   2.利用new运算符创建对象(即用new运算符在内存中为该对象分配地址空间),并把对象的引用(即存放该对象的首地址)赋给声明好的引用变量。

如:Employee emp1;           

       emp1 = new Employee();

上述两步可以简写为:Employee emp1 =  new Employee();

注意:在JAVA中,所有对象都是动态分配空间。         

以创建的emp1为例:

      

当执行语句"Employee emp1;"  的时候,系统只是在栈内存中为引用型变量emp1分配内存空间,此时只是定义了名为emp1的引用变量,并没有在堆内存中开辟空间,即对象还没有初始化,所以这时的emp1是一个未实例化的对象;当执行语句“emp1 = new Employee();”  时,系统会先用new关键字在堆内存中创建一个Employee类型的对象,为新对象分配内存空间来存储该对象的所有属性(no  name  salary),并对各属性的值进行默认的初始化;接下来会执行Employee类的构造方法,继续该对象的初始化工作;最后进行赋值操作,将新创建的对象的首地址赋给引用变量emp1,至此引用变量emp1和一个具体的对象建立联系,这时emp1称为该对象的一个引用,有时也称实例化对象

类的成员变量具有默认初’始值:

整数类型: 0      浮点类型:0.0         boolean型:false        引用类型:null


例3-2:

package hrms.entity;public class Employee {String no;String name;double salary;public void dispInfo(){System.out.println("当前员工信息");System.out.println("********************");System.out.println("编号:"+no);System.out.println("姓名:"+name);System.out.println("薪水:"+salary);System.out.println("********************");}}

例3-3:

利用3-2定义的Employee类

package hrms.entity;public class Test {public static void main(String[] args) {Employee emp1;emp1 = new Employee();emp1.no = "0001";emp1.name = "张三";emp1.salary = 5000;emp1.dispInfo();}}
运行结果:

当前员工信息********************编号:0001姓名:张三薪水:5000.0********************

上面的程序中访问类的属性时采用“对象直接访问”的形式,这违反了面向对象的封装性机制,在面向对象法则中一般是不允许直接访问属性的。所以为了避免程序中这种错误,在一般的开发中往往要将类中的属性进行封装(即对属性加上访问符private)

例3-4

对实例3-2的属性进行封装

package hrms.entity;public class Employee {private String no;private String name;private double salary;public void dispInfo(){System.out.println("当前员工信息");System.out.println("********************");System.out.println("编号:"+no);System.out.println("姓名:"+name);System.out.println("薪水:"+salary);System.out.println("********************");}}

但这时再运行3-3会发现编译错误,但如果非要对属性赋值的话,这一矛盾如何解决呢?

一般在类的设计时,会对属性增加一些方法,如:setXxx( )、getXxx( )这样的公有方法来解决这一矛盾。


例3-5

对3-4作进一步修改,增加访问属性的get/set方法

package hrms.entity;public class Employee {    private String no;    private String name;    private double salary;    public void dispInfo(){        System.out.println("当前员工信息");        System.out.println("********************");        System.out.println("编号:"+no);        System.out.println("姓名:"+name);        System.out.println("薪水:"+salary);        System.out.println("********************");    }    public String getNo(){        return no;    }    public void setNo(String no){        this.no = no;    }    public String getName(){        return name;    }    public void setName(String name){        this.name = name;    }    public double getSalry(){        return salary;    }    public void setSalary(double salary){        this.salary = salary;    }}


例3-6

修改3-3,利用公有的get/set方法给属性赋值

package hrms.entity;public class Test {    public static void main(String[] args) {        Employee emp1;        emp1 = new Employee();        emp1.setNo("0001");        emp1.setName("张三");        emp1.setSalary(5000);        emp1.dispInfo();    }}
运行结果与3-3一致


提示:一般设计较好的程序中类的属性都是需要封装的。此时,要设置或取得属性值,则只能用setXxx()/getXxx()方法,这是一个明确且标准的规定。


注意:有时候,我们定义一个引用变量,一时无法给出一个确定的值,但是程序中使用不指定值的引用类型变量将会出现“空指针异常”的错误。

避免的方法可以先给引用变量指定一个null值。如:   Employee emp1 = null;    (null还有内存释放的作用)







0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 心里有一道坎过不去了怎么办 刚买的小狗怕人怎么办 一年级孩子字写不好怎么办 小狗三天没吃了怎么办 捡到一只流浪猫怎么办 仓鼠四肢红肿圈状怎么办 泰迪的鼻子干燥怎么办 小狗眼睛有白色浓稠物怎么办 流浪狗生了小狗怎么办 学生字写得很差怎么办 猫身上粘老鼠胶怎么办 抄东西抄的手疼怎么办 皮质物品被油性笔划了怎么办 在小区猫丢了怎么办 母猫把小猫丢了怎么办 小狗不吃东西没精神怎么办 小狗的鼻子烂了怎么办 狗老是在家拉尿怎么办 狗狗鼻子有点干怎么办 狗的鼻头不黑了怎么办 金毛鼻头不黑怎么办 金毛毛掉了不长怎么办 狗狗鼻子烂了怎么办 小比熊鼻子不黑怎么办 狗狗鼻子起皮怎么办 金鱼身子弯了是怎么办 属狗的纹龙怎么办 卫生间的墙空的怎么办 花生苗长得好怎么办 菊花上面的白虫怎么办 小狗不吃东西还吐怎么办 小狗呕吐不吃东西没精神怎么办 小狗生病了不吃东西怎么办 小兔子腿摔了怎么办 刺猬葡萄我们骄傲我们该怎么办 小狗被邻居家大狗咬死了怎么办 狗狗死胎在腹中怎么办 小狗不吃饭没精神怎么办 虎皮鹦鹉生蛋了怎么办 钢笔替换芯干了怎么办 水芯钢笔不出水怎么办