虽然,Java 的构造器非常的简单方便,但还是由我们需要值得注意的地方。
首先当然逃不过对象的初始化顺序。为了能够体现对象的顺序,我写了一个如下一个类,相信已经包含了所有的对象初始化顺序了
class Base {
public Base() {
System.out.println( "B");
}
}
class Inner {
public Inner() {
System.out.println( "D");
}
}
public class InitObject extends Base {
static {
System.out.println( "A");
}
{
System.out.println( "C");
}
private Inner inner = new Inner();
public InitObject() {
System.out.println( "E");
}
public static void main(String[] args) {
new InitObject();
}
}
有了对象的初始化那就要说说对象销毁,虽然说在Java 里面对象的销毁是有垃圾回收器进行自动的处理,但也不能避免我们有时希望程序调用方法对对象进行销毁的操作。在写对象的销毁操作时其实只要仅记一条原则就可以了:与对象的初始化操作正好相反。如果需要具体的说那么可以总结为3 点:1、 首先调用自己的销毁方法。2、属性的销毁。3、基类的销毁。基类的销毁放在最后是由于是导出类的销毁操作可能需要依赖与基类的方法。因此基类的销毁放在最后。
最后要说一个非常有趣的问题:多态。我们都知道Java 通过方法的“动态绑定”实现了多态,那么如果我们在构造器中调用该对象的方法会发生什么情况呢?他还会去调用子类的实现方法吗?我们用事实来证明这一切:
class Base {
public Base() {
test();
}
public void test() {
System.out.println( "Base");
}
}
public class Constructor extends Base {
private int i = 10;
public void test() {
System.out.println( "Constructor: i = " + i);
}
public static void main(String[] args) {
new Constructor();
}
}
运行的结果是:“Constructor: i = 0”。看样子test 方法是执行继承类Constructor 的test 方法,但是i 属性确实0,这是一个代码隐患。因此我们在编写构造器时要遵循这么一条准则:尽可能简单的方法使对象进入正常状态。如果可以的话,避免调用其他的方法。但是我们可以调用那些final 修饰的方法,private和静态方法,这些都是安全的,不会产生多态的行为。因为这些方法无法被继承。
分享到:
相关推荐
理解构造器--构造器和方法的区别 要学习Java,你必须理解构造器。因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆。但是,构造器和方法又有很多重要的区别。 我们说构造器是一种方法,就象讲澳大利亚的...
java 构造器初始化成员变量 是否提供默认构造器 继承中构造器的调用
java构造方法是java类中最重要的一个概念,这篇文档涵盖了,java对象初始化过程中构造器调用的顺序,及作用。
HYPERMILL五轴后处理构造器HYPERMILL五轴后处理构造器HYPERMILL五轴后处理构造器HYPERMILL五轴后处理构造器HYPERMILL五轴后处理构造器
NX10.0后处理构造器,覆盖安装目录下面的同名文件夹即可
NX12.0.2.9 后处理构造器,覆盖安装目录下面的同名文件夹即可
MyBatisPlus条件构造器 -Wrapper详解(为知笔记版,可用网页打开),详解wrapper条件构造器的各种使用方法及其扩展类的使用方法。
亲测好用 大家快来下载吧 NX10.0后处理构造器,覆盖安装目录下面的同名文件夹即可 挺不错的一个资源
多表查询所用到的用来构造list的java类,用于演示在 jpa SQL 查询中如何使用自定义构造器。
arcmap模型构造器——批量构建金字塔,不用批量导入显示啦,减少软件的压力
构造器和方法的区别,欢迎与大家一起分享
Java入门理解构造器
MyBatisPlus条件构造器带条件更新update使用示例代码
当用LABVIEW加载 C# 生成的DLL文件 时显示" 该类不包括任何公共构造器"。 原因:类,或方法未放PUBLIC关键字。 解决办法:1、加上关键字;2、重新命名 命名空间(如果不重新命名,在加载时会依然报警,似乎...
JS+HTML版表单构造器(Fom Builder),适合Web系统使用,ASP.NET,JSP,PHP 在线构造,拖拉完成表单制作,立即生成HTML源代码,实时预览。
JAVA构造器
包括Class类的模板、new对象的内存分配方式、实例和静态。
Mybatis plus无介绍快使用,Wrapper条件构造器的使用附源码(五)
04实现mybatis条件构造器代码demo04实现mybatis条件构造器代码demo04实现mybatis条件构造器代码demo04实现mybatis条件构造器代码demo04实现mybatis条件构造器代码demo04实现mybatis条件构造器代码demo04实现mybatis...
MyBatisPlus条件构造器带条件排序方法orderBy、orderByDesc、orderByAsc使用示例代码