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还有内存释放的作用)
- 1.对象的创建
- TAPPLICATION对象的创建
- 创建对象的考虑
- xmlhttprequest对象的创建
- String对象的创建
- 对象的创建过程
- JavaScript对象的创建
- JavaScript对象的创建
- MFC对象的创建
- String对象的创建
- javascript对象的创建
- 对象创建的依赖
- PHP 对象的创建
- XMLHttpRequest对象的创建
- 对象的创建过程
- AJax的创建对象
- 对象的创建过程
- XMLHttpRequest对象的创建
- jdbcUtil工具包
- C语言与MATLAB接口 编程与实例
- C/汇编混合编程接口--MIPS ABI
- 博为峰JavaEE技术文章 —— Hibernate 指南(1)Hbm文件
- 反向代理入门理解
- 1.对象的创建
- C语言复习——函数
- 用opencv中的warpAffine获取仿射变换图片保存
- C 结构体
- Hex和Bin文件格式区别
- TCP三次握手协议
- 函数式编程与面向对象编程的比较
- jquery可见性过虑选择器
- 爬天眼查,动态加载的网页,模拟浏览器方法