JAVA初始化
2016-06-12 07:29
204 查看
java code:
上述例子中基类构造器中调用了eat()方法,可是eat()方法在子类中被覆盖了,所以导致子类成员变量没有初始化就被基类调用了。
初始化的过程:
(1)在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的零;
(2)调用基类构造器,由于(1)的缘故,所以i的值为0;
(3)按照声明的顺序初始化成员变量;
(4)调用子类构造器;
因此编写构造器有一条有效的准则:“用尽可能简单的方法使对象进入正常状态,避免在构造器中调用其他方法”。在构造器中唯一能够安全调用的方法是基类中的final方法,或者是private方法。因为这些方法方法不能被覆盖,所以基类构造器中只能掉用基类的方法,而基类构造器是最后一个初始化动作,所以成员变量都已初始化完毕。
<span style="font-size:14px;">public class Animal { void eat(){} Animal() { System.out.println("animal eat"); eat(); System.out.println("animal eat finish"); } } public class Dog extends Animal{ private int i = 1; Dog(int i) { this.i = i; System.out.println("dog ,i = " + i); } void eat() { System.out.println("dog.eat(), i = " + i); } }</span>
上述例子中基类构造器中调用了eat()方法,可是eat()方法在子类中被覆盖了,所以导致子类成员变量没有初始化就被基类调用了。
初始化的过程:
(1)在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的零;
(2)调用基类构造器,由于(1)的缘故,所以i的值为0;
(3)按照声明的顺序初始化成员变量;
(4)调用子类构造器;
因此编写构造器有一条有效的准则:“用尽可能简单的方法使对象进入正常状态,避免在构造器中调用其他方法”。在构造器中唯一能够安全调用的方法是基类中的final方法,或者是private方法。因为这些方法方法不能被覆盖,所以基类构造器中只能掉用基类的方法,而基类构造器是最后一个初始化动作,所以成员变量都已初始化完毕。
相关文章推荐
- Ubuntu系统下使用eclipse搭建Hadoop2.7.1运行环境
- maven下Spring,Spring mvc整合MyBatis的配置总结和批量操作的效率测试
- 修改 eclipse 默认的 toString 模板, 自动对敏感字段进行 *** 处理
- java并发编程(三)--线程挂起、恢复与终止的正确方法
- java监听器的原理与实现
- Java异常处理,try-catch
- java并发编程(二)-- 线程中断
- Java反射之Field用法
- 如何开发java语言
- java.sql.SQLNonTransientConnectionException异常
- java中的 i++ 和++i
- java获取图片的大小和尺寸
- spring4+springMVC+hibernate4 整合
- [Java][设计模式] 工厂模式一
- Spring 注入bean时的初始化和销毁操作
- springmvc+mybatis+spring 整合
- java引用外部大批量jar包
- Java logback配置
- java 操作属性文件
- 通过Java源码解析,探讨map与hashmap的排序