3-java对象构造及对象引用.pptVIP

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3-java对象构造及对象引用

Java对象设计之 对象构造和对象引用 复习一个Java程序的开发过程 Java对象的生命周期 1、对象的构造函数 在Java中,“定义”和“初始化”是一体的,两者不可能彼此脱离而独立存在。 构造函数是一种特殊函数,确保每个对象产生时,初始化动作一定被执行。 构造函数和类名相同,可以有参数但没有返回值 构造函数由编译器唤起,分配必要的内存 1、对象成员初始化 Java保证,变量绝对会在使用之前初始化。强迫程序员一定在使用前给定初始值是不切实际的,但放任变量持有无意义的初值也很危险。 在类成员定义时,指定初值。缺点:对象创建时都是相同的初值。 在构造函数中进行初始化。 static成员只一次初始化,不在定义时,仅在第一个对象创建时。 1、对象创建(上) 对象的创建一般有两种方式,一种是用new操作符,另一种是在一个Class对象上调用newInstance方法。其创建实际过程是一样的。 首先为对象分配内存空间-包括其所有父类的可见或不可见的变量的空间,并初始化这些变量为默认值,如int类型为0,boolean类型为false,对象类型为null。 然后用下述5个步骤来初始化这个新对象: 1)分配参数给指定的构造方法; 2)如果这个指定的构造方法的第一个语句是用this指针显式地调用本类的其它构造方法,则递归执行这5个步骤;如果执行过程正常则跳到步骤5; 1、对象创建(下) 3)如果构造方法的第一个语句没有显式调用本类的其它构造方法,并且本类不是Object类(Object是所有其它类的祖先),则调用显式(用super指针)或隐式地指定的父类的构造方法,递归执行这5个步骤;如果执行过程正常则跳到步骤5; 4)按照变量在类内的定义顺序来初始化本类的变量,如果执行过程正常则跳到步骤5; 5)执行本类这个构造方法中余下的语句,如果执行过程正常则过程结束。 1、对象初始化时序图 实例:PetStore class?Animal?{ ????Animal()?{ ????????System.out.println(Animal); ????} } class?Cat?extends?Animal?{ ????Cat()?{ ????????System.out.println(Cat); ????} } class?Store?{ ????Store()?{ ????????System.out.println(Store); ????} } 1、构造函数重载 构造函数名称只有一个,当你想以多种方式创建对象该如何做?重载对于构造函数来说是必然的。 语言中同一个字可以有不同的意义,例如:清洗。 每个重载函数必须有独一无二的参数列 Tree() {…} //幼苗 Tree(int i) {…} //一定高度的树苗 1、构造函数要注意几点 类的构造函数不能被继承! 继承子类在创建对象时,一定会先调用父类的构造函数,一次让所有继承阶层上的构造函数串联起来,保证对象初始化的正确性。 设计原则:尽可能简单地让对象进入就绪状态;如果可能,避免调用任何方法。在构造方法内唯一能安全调用的是基类中具有final属性的方法或者private方法(private方法会被编译器自动设置final属性)。final的方法因为不能被子类覆盖,所以不会产生问题。 错误示例: (1)不佳的基类构造 public?abstract?class?BaseDlg?extends?JDialog?{ ????public?BaseDlg(Frame?frame,?String?title)?{ ????????super(frame,?title,?true); ????????this.getContentPane().setLayout(new?BorderLayout()); ????????this.getContentPane().add(createHeadPanel(),?BorderLayout.NORTH); ???????this.getContentPane().add(createClientPanel(),?BorderLayout.CENTER); ????????this.getContentPane().add(createButtonPanel(),?BorderLayout.SOUTH); ????} ... ????//?创建对话框客户区域,交给子类实现 ????protected?abstract?JPanel?createClientPanel(); } 错误示例: (2)出错的子类创建 public?class?ChildDlg2?extends?BaseDlg?{ ????JTextField?jTextFieldName

文档评论(0)

ipbohn97 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档